Message ID | Pine.LNX.4.64.0908012148420.25693@ask.diku.dk (mailing list archive) |
---|---|
State | Superseded, archived |
Headers |
Return-path: <linux-media-owner@vger.kernel.org> Envelope-to: mchehab@infradead.org Delivery-date: Sat, 01 Aug 2009 19:49:49 +0000 Received: from bombadil.infradead.org [18.85.46.34] by pedra.chehab.org with IMAP (fetchmail-6.3.6) for <mchehab@localhost> (single-drop); Sun, 02 Aug 2009 01:21:16 -0300 (BRT) Received: from vger.kernel.org ([209.132.176.167]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1MXKaS-00022Q-A2; Sat, 01 Aug 2009 19:49:48 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752177AbZHATtI (ORCPT <rfc822; kmpark@infradead.org> + 1 other); Sat, 1 Aug 2009 15:49:08 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752171AbZHATtH (ORCPT <rfc822;linux-media-outgoing>); Sat, 1 Aug 2009 15:49:07 -0400 Received: from mgw2.diku.dk ([130.225.96.92]:54087 "EHLO mgw2.diku.dk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752099AbZHATtG (ORCPT <rfc822;linux-media@vger.kernel.org>); Sat, 1 Aug 2009 15:49:06 -0400 Received: from localhost (localhost [127.0.0.1]) by mgw2.diku.dk (Postfix) with ESMTP id 3D57519BCF3; Sat, 1 Aug 2009 21:49:06 +0200 (CEST) Received: from mgw2.diku.dk ([127.0.0.1]) by localhost (mgw2.diku.dk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 21297-18; Sat, 1 Aug 2009 21:49:04 +0200 (CEST) Received: from nhugin.diku.dk (nhugin.diku.dk [130.225.96.140]) by mgw2.diku.dk (Postfix) with ESMTP id 5D51C19BCF1; Sat, 1 Aug 2009 21:49:04 +0200 (CEST) Received: from ask.diku.dk (ask.diku.dk [130.225.96.225]) by nhugin.diku.dk (Postfix) with ESMTP id B21936DFB46; Sat, 1 Aug 2009 21:48:13 +0200 (CEST) Received: by ask.diku.dk (Postfix, from userid 3767) id 48641154DF9; Sat, 1 Aug 2009 21:49:04 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by ask.diku.dk (Postfix) with ESMTP id 4749B1549A9; Sat, 1 Aug 2009 21:49:04 +0200 (CEST) Date: Sat, 1 Aug 2009 21:49:04 +0200 (CEST) From: Julia Lawall <julia@diku.dk> To: laurent.pinchart@skynet.be, linux-media@vger.kernel.org, linux-uvc-devel@lists.berlios.de, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: [PATCH 2/5] drivers/media/video/uvc: Use DIV_ROUND_CLOSEST Message-ID: <Pine.LNX.4.64.0908012148420.25693@ask.diku.dk> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: amavisd-new at diku.dk Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: <linux-media.vger.kernel.org> X-Mailing-List: linux-media@vger.kernel.org |
Commit Message
Julia Lawall
Aug. 1, 2009, 7:49 p.m. UTC
From: Julia Lawall <julia@diku.dk> The kernel.h macro DIV_ROUND_CLOSEST performs the computation (x + d/2)/d but is perhaps more readable. The semantic patch that makes this change is as follows: (http://www.emn.fr/x-info/coccinelle/) // <smpl> @haskernel@ @@ #include <linux/kernel.h> @depends on haskernel@ expression x,__divisor; @@ - (((x) + ((__divisor) / 2)) / (__divisor)) + DIV_ROUND_CLOSEST(x,__divisor) // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> --- drivers/media/video/uvc/uvc_v4l2.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Comments
On Saturday 01 August 2009 21:49:04 Julia Lawall wrote: > From: Julia Lawall <julia@diku.dk> > > The kernel.h macro DIV_ROUND_CLOSEST performs the computation (x + d/2)/d > but is perhaps more readable. > > The semantic patch that makes this change is as follows: > (http://www.emn.fr/x-info/coccinelle/) > > // <smpl> > @haskernel@ > @@ > > #include <linux/kernel.h> > > @depends on haskernel@ > expression x,__divisor; > @@ > > - (((x) + ((__divisor) / 2)) / (__divisor)) > + DIV_ROUND_CLOSEST(x,__divisor) > // </smpl> > > Signed-off-by: Julia Lawall <julia@diku.dk> > > --- > drivers/media/video/uvc/uvc_v4l2.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/media/video/uvc/uvc_v4l2.c > b/drivers/media/video/uvc/uvc_v4l2.c index 87cb9cc..6edaaf6 100644 > --- a/drivers/media/video/uvc/uvc_v4l2.c > +++ b/drivers/media/video/uvc/uvc_v4l2.c > @@ -95,7 +95,7 @@ static __u32 uvc_try_frame_interval(struct uvc_frame > *frame, __u32 interval) const __u32 max = frame->dwFrameInterval[1]; > const __u32 step = frame->dwFrameInterval[2]; > > - interval = min + (interval - min + step/2) / step * step; > + interval = min + DIV_ROUND_CLOSEST(interval-min, step) * step; > if (interval > max) > interval = max; > } The purpose of the above code is to clamp the interval value to the [min, max] range at round it to the closest multiple of step. Other drivers might need similar code. Do you think it might be useful to introduce a clamp_step macro for this ? If not, Acked-by: Laurent Pinchart <laurent.pinchart@skynet.be> Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sat, 1 Aug 2009, Laurent Pinchart wrote: > On Saturday 01 August 2009 21:49:04 Julia Lawall wrote: > > From: Julia Lawall <julia@diku.dk> > > > > The kernel.h macro DIV_ROUND_CLOSEST performs the computation (x + d/2)/d > > but is perhaps more readable. > > > > The semantic patch that makes this change is as follows: > > (http://www.emn.fr/x-info/coccinelle/) > > > > // <smpl> > > @haskernel@ > > @@ > > > > #include <linux/kernel.h> > > > > @depends on haskernel@ > > expression x,__divisor; > > @@ > > > > - (((x) + ((__divisor) / 2)) / (__divisor)) > > + DIV_ROUND_CLOSEST(x,__divisor) > > // </smpl> > > > > Signed-off-by: Julia Lawall <julia@diku.dk> > > > > --- > > drivers/media/video/uvc/uvc_v4l2.c | 2 +- > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > diff --git a/drivers/media/video/uvc/uvc_v4l2.c > > b/drivers/media/video/uvc/uvc_v4l2.c index 87cb9cc..6edaaf6 100644 > > --- a/drivers/media/video/uvc/uvc_v4l2.c > > +++ b/drivers/media/video/uvc/uvc_v4l2.c > > @@ -95,7 +95,7 @@ static __u32 uvc_try_frame_interval(struct uvc_frame > > *frame, __u32 interval) const __u32 max = frame->dwFrameInterval[1]; > > const __u32 step = frame->dwFrameInterval[2]; > > > > - interval = min + (interval - min + step/2) / step * step; > > + interval = min + DIV_ROUND_CLOSEST(interval-min, step) * step; > > if (interval > max) > > interval = max; > > } > > The purpose of the above code is to clamp the interval value to the [min, max] > range at round it to the closest multiple of step. Other drivers might need > similar code. Do you think it might be useful to introduce a clamp_step macro > for this ? I tried searching for the following: @@ expression interval, min, max, step, E; @@ * interval = min + (interval - min + step/2) / step * step; ... when != interval = E * if (interval > max) { ... interval = max; ... } @@ expression interval, min, max, step, E; @@ * interval = min + DIV_ROUND_CLOSEST(interval-min, step) * step; ... when != interval = E * if (interval > max) { ... interval = max; ... } and the only occurrence I found was the code above. Perhaps there is some other way in which the pattern would appear? julia -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/video/uvc/uvc_v4l2.c b/drivers/media/video/uvc/uvc_v4l2.c index 87cb9cc..6edaaf6 100644 --- a/drivers/media/video/uvc/uvc_v4l2.c +++ b/drivers/media/video/uvc/uvc_v4l2.c @@ -95,7 +95,7 @@ static __u32 uvc_try_frame_interval(struct uvc_frame *frame, __u32 interval) const __u32 max = frame->dwFrameInterval[1]; const __u32 step = frame->dwFrameInterval[2]; - interval = min + (interval - min + step/2) / step * step; + interval = min + DIV_ROUND_CLOSEST(interval-min, step) * step; if (interval > max) interval = max; }