drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
This fixes the following compilation failure: "error: ‘for’ loop
initial declarations are only allowed in C99 or C11 mode"
Cc: stable@vger.kernel.org
Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers")
Signed-off-by: Desnes Nunes <desnesn@redhat.com>
---
drivers/media/usb/uvc/uvc_ctrl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 44b6513c5264..532615d8484b 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev)
void uvc_ctrl_cleanup_fh(struct uvc_fh *handle)
{
struct uvc_entity *entity;
- int i;
+ unsigned int i;
guard(mutex)(&handle->chain->ctrl_mutex);
@@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle)
return;
list_for_each_entry(entity, &handle->chain->dev->entities, list) {
- for (unsigned int i = 0; i < entity->ncontrols; ++i) {
+ for (i = 0; i < entity->ncontrols; ++i) {
if (entity->controls[i].handle != handle)
continue;
uvc_ctrl_set_handle(handle, &entity->controls[i], NULL);
--
2.49.0
On Mon, Jun 30, 2025 at 12:01:06PM -0300, Desnes Nunes wrote: > This fixes the following compilation failure: "error: ‘for’ loop > initial declarations are only allowed in C99 or C11 mode" > > Cc: stable@vger.kernel.org > Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers") > Signed-off-by: Desnes Nunes <desnesn@redhat.com> > --- > drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 44b6513c5264..532615d8484b 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) > void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > { > struct uvc_entity *entity; > - int i; > + unsigned int i; > > guard(mutex)(&handle->chain->ctrl_mutex); If your compiler can handle this guard(mutex) line, then: > > @@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > return; > > list_for_each_entry(entity, &handle->chain->dev->entities, list) { > - for (unsigned int i = 0; i < entity->ncontrols; ++i) { It can also handle that line. Are you sure you are using a sane compiler? confused, greg k-h
Hello Greg, The compiler is sane, but I ran into this while backporting fixes to an old codebase that still uses C89 due to legacy support reasons. Furthermore, you're right; there is no guard() in my code base, thus I had to backport guard() with the old mutex lock/unlock calls used prior to guard(). Indeed - will focus on all of what has been said on the v2. Thanks for the review Greg, On Mon, Jun 30, 2025 at 12:42 PM Greg KH <gregkh@linuxfoundation.org> wrote: > > On Mon, Jun 30, 2025 at 12:01:06PM -0300, Desnes Nunes wrote: > > This fixes the following compilation failure: "error: ‘for’ loop > > initial declarations are only allowed in C99 or C11 mode" > > > > Cc: stable@vger.kernel.org > > Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers") > > Signed-off-by: Desnes Nunes <desnesn@redhat.com> > > --- > > drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > > index 44b6513c5264..532615d8484b 100644 > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > @@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) > > void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > { > > struct uvc_entity *entity; > > - int i; > > + unsigned int i; > > > > guard(mutex)(&handle->chain->ctrl_mutex); > > If your compiler can handle this guard(mutex) line, then: > > > > > @@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > return; > > > > list_for_each_entry(entity, &handle->chain->dev->entities, list) { > > - for (unsigned int i = 0; i < entity->ncontrols; ++i) { > > It can also handle that line. > > Are you sure you are using a sane compiler? > > confused, > > greg k-h > -- Desnes Nunes
Hi Desdes How did you trigger this build warning? I believe we use C11 https://www.kernel.org/doc/html/latest/process/programming-language.html Regards! On Mon, 30 Jun 2025 at 17:07, Desnes Nunes <desnesn@redhat.com> wrote: > > This fixes the following compilation failure: "error: ‘for’ loop > initial declarations are only allowed in C99 or C11 mode" > > Cc: stable@vger.kernel.org > Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers") > Signed-off-by: Desnes Nunes <desnesn@redhat.com> > --- > drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 44b6513c5264..532615d8484b 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) > void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > { > struct uvc_entity *entity; > - int i; > + unsigned int i; > > guard(mutex)(&handle->chain->ctrl_mutex); > > @@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > return; > > list_for_each_entry(entity, &handle->chain->dev->entities, list) { > - for (unsigned int i = 0; i < entity->ncontrols; ++i) { > + for (i = 0; i < entity->ncontrols; ++i) { > if (entity->controls[i].handle != handle) > continue; > uvc_ctrl_set_handle(handle, &entity->controls[i], NULL); > -- > 2.49.0 > > -- Ricardo Ribalda
Hello Ricardo, I triggered this build error while working in an older codebase that uses C89 due to legacy support reasons. Indeed - will focus on submitting C11 compatible fixes even when working on older codebases. Thanks for the review Ricardo, On Mon, Jun 30, 2025 at 12:16 PM Ricardo Ribalda <ribalda@chromium.org> wrote: > > Hi Desdes > > How did you trigger this build warning? I believe we use C11 > > https://www.kernel.org/doc/html/latest/process/programming-language.html > > > Regards! > > On Mon, 30 Jun 2025 at 17:07, Desnes Nunes <desnesn@redhat.com> wrote: > > > > This fixes the following compilation failure: "error: ‘for’ loop > > initial declarations are only allowed in C99 or C11 mode" > > > > Cc: stable@vger.kernel.org > > Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers") > > Signed-off-by: Desnes Nunes <desnesn@redhat.com> > > --- > > drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > > index 44b6513c5264..532615d8484b 100644 > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > @@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) > > void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > { > > struct uvc_entity *entity; > > - int i; > > + unsigned int i; > > > > guard(mutex)(&handle->chain->ctrl_mutex); > > > > @@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > return; > > > > list_for_each_entry(entity, &handle->chain->dev->entities, list) { > > - for (unsigned int i = 0; i < entity->ncontrols; ++i) { > > + for (i = 0; i < entity->ncontrols; ++i) { > > if (entity->controls[i].handle != handle) > > continue; > > uvc_ctrl_set_handle(handle, &entity->controls[i], NULL); > > -- > > 2.49.0 > > > > > > > -- > Ricardo Ribalda > -- Desnes Nunes
On Mon, Jun 30, 2025 at 05:15:38PM +0200, Ricardo Ribalda wrote: > Hi Desdes > > How did you trigger this build warning? I believe we use C11 > > https://www.kernel.org/doc/html/latest/process/programming-language.html Note that the local declaration of the loop counter shadows the global one. I would have expected a different compiler warning though. The shadowing was introduced by commit 10acb9101355484c3e4f2625003cd1b6c203cfe4 Author: Ricardo Ribalda <ribalda@chromium.org> Date: Thu Mar 27 21:05:29 2025 +0000 media: uvcvideo: Increase/decrease the PM counter per IOCTL and I think it should be fixed (while at it, with an unsigned int local loop counter instead of a signed int) as it's not a good practice. > On Mon, 30 Jun 2025 at 17:07, Desnes Nunes <desnesn@redhat.com> wrote: > > > > This fixes the following compilation failure: "error: ‘for’ loop > > initial declarations are only allowed in C99 or C11 mode" > > > > Cc: stable@vger.kernel.org > > Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers") > > Signed-off-by: Desnes Nunes <desnesn@redhat.com> > > --- > > drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > > index 44b6513c5264..532615d8484b 100644 > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > @@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) > > void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > { > > struct uvc_entity *entity; > > - int i; > > + unsigned int i; > > > > guard(mutex)(&handle->chain->ctrl_mutex); > > > > @@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > return; > > > > list_for_each_entry(entity, &handle->chain->dev->entities, list) { > > - for (unsigned int i = 0; i < entity->ncontrols; ++i) { > > + for (i = 0; i < entity->ncontrols; ++i) { > > if (entity->controls[i].handle != handle) > > continue; > > uvc_ctrl_set_handle(handle, &entity->controls[i], NULL); -- Regards, Laurent Pinchart
Hello Laurent, Yes, I did see that commit and will send a v2 to properly address the variable shadowing following C11 standards. Thanks for the review Laurent, On Mon, Jun 30, 2025 at 12:30 PM Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > On Mon, Jun 30, 2025 at 05:15:38PM +0200, Ricardo Ribalda wrote: > > Hi Desdes > > > > How did you trigger this build warning? I believe we use C11 > > > > https://www.kernel.org/doc/html/latest/process/programming-language.html > > Note that the local declaration of the loop counter shadows the global > one. I would have expected a different compiler warning though. > > The shadowing was introduced by > > commit 10acb9101355484c3e4f2625003cd1b6c203cfe4 > Author: Ricardo Ribalda <ribalda@chromium.org> > Date: Thu Mar 27 21:05:29 2025 +0000 > > media: uvcvideo: Increase/decrease the PM counter per IOCTL > > and I think it should be fixed (while at it, with an unsigned int local > loop counter instead of a signed int) as it's not a good practice. > > > On Mon, 30 Jun 2025 at 17:07, Desnes Nunes <desnesn@redhat.com> wrote: > > > > > > This fixes the following compilation failure: "error: ‘for’ loop > > > initial declarations are only allowed in C99 or C11 mode" > > > > > > Cc: stable@vger.kernel.org > > > Fixes: 221cd51efe45 ("media: uvcvideo: Remove dangling pointers") > > > Signed-off-by: Desnes Nunes <desnesn@redhat.com> > > > --- > > > drivers/media/usb/uvc/uvc_ctrl.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > > > index 44b6513c5264..532615d8484b 100644 > > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > > @@ -3260,7 +3260,7 @@ int uvc_ctrl_init_device(struct uvc_device *dev) > > > void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > > { > > > struct uvc_entity *entity; > > > - int i; > > > + unsigned int i; > > > > > > guard(mutex)(&handle->chain->ctrl_mutex); > > > > > > @@ -3268,7 +3268,7 @@ void uvc_ctrl_cleanup_fh(struct uvc_fh *handle) > > > return; > > > > > > list_for_each_entry(entity, &handle->chain->dev->entities, list) { > > > - for (unsigned int i = 0; i < entity->ncontrols; ++i) { > > > + for (i = 0; i < entity->ncontrols; ++i) { > > > if (entity->controls[i].handle != handle) > > > continue; > > > uvc_ctrl_set_handle(handle, &entity->controls[i], NULL); > > -- > Regards, > > Laurent Pinchart > -- Desnes Nunes
© 2016 - 2025 Red Hat, Inc.