patch "staging: comedi: dt3000: Fix rounding up of timer divisor" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: comedi: dt3000: Fix rounding up of timer divisor
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 8e2a589a3fc36ce858d42e767c3bcd8fc62a512b Mon Sep 17 00:00:00 2001
From: Ian Abbott <[email protected]>
Date: Mon, 12 Aug 2019 13:08:14 +0100
Subject: staging: comedi: dt3000: Fix rounding up of timer divisor
dt3k_ns_to_timer() determines the prescaler and divisor to use to produce a desired timing period. It is influenced by a rounding mode and can round the divisor up, down, or to the nearest value. However, the code for rounding up currently does the same as rounding down! Fix ir by using the DIV_ROUND_UP() macro to calculate the divisor when rounding up.
Also, change the types of the divider, base and prescale variables from int to unsigned int to avoid mixing signed and unsigned types in the calculations.
Also fix a typo in a nearby comment: "improvment" => "improvement".
--- drivers/staging/comedi/drivers/dt3000.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/staging/comedi/drivers/dt3000.c +3 -3
@@ -342,9 +342,9 @@ static irqreturn_t dt3k_interrupt(int irq, void *d)static int dt3k_ns_to_timer (unsigned int timer_base,unsigned int *nanosec,unsigned int flags) { -int divider, base, prescale; +unsigned int divider, base, prescale; -/* This function needs improvment */ +/* This function needs improvement */ /* Don't know if divider==0 works. */ for (prescale =0 ; prescale <16 ; prescale++) {
@@ -358,7 +358,7 @@ static int dt3k_ns_to_timer(unsigned int timer_base, unsigned int *nanosec, divider = (*nanosec) / base;break ;case CMDF_ROUND_UP : - divider = (*nanosec) / base; + divider =DIV_ROUND_UP (*nanosec, base);break ; }if (divider <65536 ) {
Signature · 1 line
2.22.0