linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	linux-kernel@vger.kernel.org, "hn.chen" <hn.chen@sunplusit.com>,
	linux-media@vger.kernel.org
Subject: Re: [PATCH v9 1/6] media: uvcvideo: Fix negative modulus calculation
Date: Thu, 21 Mar 2024 23:50:47 +0200	[thread overview]
Message-ID: <20240321215047.GA20938@pendragon.ideasonboard.com> (raw)
In-Reply-To: <CANiDSCsqYHModDZCi2hooDYsFgu+bN_OioBGEJQJuZgdiJO=ug@mail.gmail.com>

Hi Ricardo,

On Mon, Feb 19, 2024 at 04:07:12PM +0100, Ricardo Ribalda wrote:
> On Mon, 19 Feb 2024 at 11:40, Laurent Pinchart wrote:
> > On Mon, Feb 19, 2024 at 11:28:03AM +0100, Ricardo Ribalda wrote:
> > > On Mon, 12 Feb 2024 at 23:59, Laurent Pinchart wrote:
> > > > On Wed, Mar 15, 2023 at 02:30:12PM +0100, Ricardo Ribalda wrote:
> > > > > If head is 0, last will be addressing the index 0 instead of clock->size
> > > > > -1. Luckily clock->head is unsiged, otherwise it would be addressing
> > > > > 0xffffffff.
> > > >
> > > > I'm not following you. In the expression
> > > >
> > > >         (clock->head - 1) % clock->size
> > > >
> > > > clock->head is an unsigned int, and 1 as a signed int, so the result of
> > > > the subtraction is promoted to an unsigned int. When clock->head is 0, the expression evaluates to
> > > >
> > > >         0xffffffff % clock->size
> > > >
> > > > clock->size is a power of two (hardcoded to 32 at the moment), so the
> > > > expression evaluates to 31, as intended.
> > > >
> > > > Am I missing something ?
> > >
> > > Take a look to: https://godbolt.org/z/xYeqTx6ba
> > >
> > > The expression only works because the size is a power of two. In this
> > > set I am allowing sizes that are not powers of two.
> >
> > Could you then update the commit message to explain that ?
> >
> > I'll review the rest of the series this week.
> Thanks
> 
> Will update with the following text after the review:
> 
> The tail of the list lives at the position before the head. This is
> mathematically noted as
> ```
> (head-1)  mod size.
> ```
> 
> Unfortunately C, does not have a modulus operator, but a remainder
> operator (%).
> The reminder operation has a different result than the modulus if
> (head -1) is a negative number and size is not a power of two.
> 
> Adding size to (head-1) allows the code to run with any value of size.

Could you please add

This does not change the current behaviour of the driver, as the size is
always a power of two, but prepares for reworks that will change the
size to a non power of two.

or something similar ?

> > > > > Nontheless, this is not the intented behaviour and should be fixed.
> > > > >
> > > > > Fixes: 66847ef013cc ("[media] uvcvideo: Add UVC timestamps support")

I think this should be dropped, the patch doesn't fix an issue, but
prepares for further changes that add new features. I'd also like to
update the commit message to avoid stating "Fix", to avoid this being
picked for stable kernels automatically.

> > > > > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > > > > ---
> > > > >  drivers/media/usb/uvc/uvc_video.c | 2 +-
> > > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > >
> > > > > diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
> > > > > index d4b023d4de7c..4ff4ab4471fe 100644
> > > > > --- a/drivers/media/usb/uvc/uvc_video.c
> > > > > +++ b/drivers/media/usb/uvc/uvc_video.c
> > > > > @@ -732,7 +732,7 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
> > > > >               goto done;
> > > > >
> > > > >       first = &clock->samples[clock->head];
> > > > > -     last = &clock->samples[(clock->head - 1) % clock->size];
> > > > > +     last = &clock->samples[(clock->head - 1 + clock->size) % clock->size];
> > > > >
> > > > >       /* First step, PTS to SOF conversion. */
> > > > >       delta_stc = buf->pts - (1UL << 31);

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2024-03-21 21:50 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-15 13:30 [PATCH v9 0/6] uvcvideo: Fixes for hw timestamping Ricardo Ribalda
2023-03-15 13:30 ` [PATCH v9 1/6] media: uvcvideo: Fix negative modulus calculation Ricardo Ribalda
2023-03-16  3:05   ` Sergey Senozhatsky
2024-02-12 22:59   ` Laurent Pinchart
2024-02-19 10:28     ` Ricardo Ribalda
2024-02-19 10:40       ` Laurent Pinchart
2024-02-19 15:07         ` Ricardo Ribalda
2024-03-21 21:50           ` Laurent Pinchart [this message]
2024-03-22  9:19             ` Laurent Pinchart
2024-03-22  9:29               ` Ricardo Ribalda
2024-03-22  9:35                 ` Laurent Pinchart
2023-03-15 13:30 ` [PATCH v9 2/6] media: uvcvideo: Ignore empty TS packets Ricardo Ribalda
2024-03-21 23:26   ` Laurent Pinchart
2024-03-22  8:22     ` Ricardo Ribalda
2024-03-22  8:52       ` Laurent Pinchart
2023-03-15 13:30 ` [PATCH v9 3/6] media: uvcvideo: Quirk for invalid dev_sof in Logitech C922 Ricardo Ribalda
2024-03-21 23:44   ` Laurent Pinchart
2024-03-22  8:32     ` Ricardo Ribalda
2024-03-22  8:52       ` Laurent Pinchart
2023-03-15 13:30 ` [PATCH v9 4/6] media: uvcvideo: Allow hw clock updates with buffers not full Ricardo Ribalda
2023-03-16  3:08   ` Sergey Senozhatsky
2024-03-22  0:12   ` Laurent Pinchart
2023-03-15 13:30 ` [PATCH v9 5/6] media: uvcvideo: Refactor clock circular buffer Ricardo Ribalda
2024-03-22  0:36   ` Laurent Pinchart
2023-03-15 13:30 ` [PATCH v9 6/6] media: uvcvideo: Fix hw timestamp handling for slow FPS Ricardo Ribalda
2023-03-16  3:07   ` Sergey Senozhatsky
2024-03-22  9:35   ` Laurent Pinchart
2024-03-22  9:53     ` Ricardo Ribalda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240321215047.GA20938@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hn.chen@sunplusit.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=ribalda@chromium.org \
    --cc=senozhatsky@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).