Re: [PATCH v3 3/5] media: atmel-isc: Enable the clocks during probe
Hi Sakari, Sorry for late answer, because I was in vacation last week. On 2017/9/29 5:25, Sakari Ailus wrote: Hi Wenyou, On Thu, Sep 28, 2017 at 04:18:26PM +0800, Wenyou Yang wrote: To meet the relationship, enable the HCLOCK and ispck during the device probe, "isc_pck frequency is less than or equal to isc_ispck, and isc_ispck is greater than or equal to HCLOCK." Meanwhile, call the pm_runtime_enable() in the right place. Signed-off-by: Wenyou Yang--- Changes in v3: None Changes in v2: None drivers/media/platform/atmel/atmel-isc.c | 31 +-- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/atmel/atmel-isc.c b/drivers/media/platform/atmel/atmel-isc.c index 0b15dc1a3a0b..f092c95587c1 100644 --- a/drivers/media/platform/atmel/atmel-isc.c +++ b/drivers/media/platform/atmel/atmel-isc.c @@ -1594,6 +1594,7 @@ static int isc_async_complete(struct v4l2_async_notifier *notifier) struct isc_subdev_entity *sd_entity; struct video_device *vdev = >video_dev; struct vb2_queue *q = >vb2_vidq; + struct device *dev = isc->dev; int ret; ret = v4l2_device_register_subdev_nodes(>v4l2_dev); @@ -1677,6 +1678,10 @@ static int isc_async_complete(struct v4l2_async_notifier *notifier) return ret; } + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + pm_request_idle(dev); Remember that the driver's async complete function could never get called. What would be the reason to move it here? The ISC provides the clock for the sensor, namely, it is the clock provider for the external sensor. So it keeps active to make the sensor probe successfully. Otherwise, the sensor, such as 0v7670 fails to probe due to the failure to clk_enable(). + return 0; } @@ -1856,25 +1861,37 @@ static int atmel_isc_probe(struct platform_device *pdev) return ret; } + ret = clk_prepare_enable(isc->hclock); + if (ret) { + dev_err(dev, "failed to enable hclock: %d\n", ret); + return ret; + } + ret = isc_clk_init(isc); if (ret) { dev_err(dev, "failed to init isc clock: %d\n", ret); - goto clean_isc_clk; + goto unprepare_hclk; } isc->ispck = isc->isc_clks[ISC_ISPCK].clk; + ret = clk_prepare_enable(isc->ispck); + if (ret) { + dev_err(dev, "failed to enable ispck: %d\n", ret); + goto unprepare_hclk; + } + /* ispck should be greater or equal to hclock */ ret = clk_set_rate(isc->ispck, clk_get_rate(isc->hclock)); if (ret) { dev_err(dev, "failed to set ispck rate: %d\n", ret); - goto clean_isc_clk; + goto unprepare_clk; } ret = v4l2_device_register(dev, >v4l2_dev); if (ret) { dev_err(dev, "unable to register v4l2 device.\n"); - goto clean_isc_clk; + goto unprepare_clk; } ret = isc_parse_dt(dev, isc); @@ -1907,8 +1924,6 @@ static int atmel_isc_probe(struct platform_device *pdev) break; } - pm_runtime_enable(dev); - return 0; cleanup_subdev: @@ -1917,7 +1932,11 @@ static int atmel_isc_probe(struct platform_device *pdev) unregister_v4l2_device: v4l2_device_unregister(>v4l2_dev); -clean_isc_clk: +unprepare_clk: + clk_disable_unprepare(isc->ispck); +unprepare_hclk: + clk_disable_unprepare(isc->hclock); I think you're missing clk_disable_unprepare() in the driver's remove callback. Will add in next version. + isc_clk_cleanup(isc); return ret; Best Regards, Wenyou Yang
[RESEND PATCH] media: uvcvideo: Fix memory leak of uvc resources
The refcount would be inited to 1 in kref_init(), so we don't need to increase it at the end of uvc_register_video(). Fixes: 9d15cd958c17 ("media: uvcvideo: Convert from using an atomic variable to a reference count") Signed-off-by: Jeffy Chen--- drivers/media/usb/uvc/uvc_driver.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 6d22b22cb35b..dd6106411eb0 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1939,7 +1939,6 @@ static int uvc_register_video(struct uvc_device *dev, else stream->chain->caps |= V4L2_CAP_VIDEO_OUTPUT; - kref_get(>ref); return 0; } -- 2.11.0
[PATCH] media: uvcvideo: Fix memory leak of uvc resources
The refcount would be inited to 1 in kref_init(), so we don't need to increase it at the end of uvc_probe(). Fixes: 9d15cd958c17 ("media: uvcvideo: Convert from using an atomic variable to a reference count") Signed-off-by: Jeffy Chen--- drivers/media/usb/uvc/uvc_driver.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 6d22b22cb35b..dd6106411eb0 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -1939,7 +1939,6 @@ static int uvc_register_video(struct uvc_device *dev, else stream->chain->caps |= V4L2_CAP_VIDEO_OUTPUT; - kref_get(>ref); return 0; } -- 2.11.0
cron job: media_tree daily build: ERRORS
This message is generated daily by a cron job that builds media_tree for the kernels and architectures in the list below. Results of the daily build of media_tree: date: Mon Oct 9 05:00:05 CEST 2017 media-tree git hash:c1301077213d4dca34f01fc372b64d3c4a49a437 media_build git hash: b829b621b4c2e6c5cbedbd1ce62b4e958f7d13a4 v4l-utils git hash: 01c04f7c8ad1a91af33e20621eba9200f447737e gcc version:i686-linux-gcc (GCC) 7.1.0 sparse version: v0.5.0 smatch version: v0.5.0-3553-g78b2ea6 host hardware: x86_64 host os:4.12.0-164 linux-git-arm-at91: ERRORS linux-git-arm-davinci: ERRORS linux-git-arm-multi: ERRORS linux-git-arm-pxa: ERRORS linux-git-arm-stm32: ERRORS linux-git-blackfin-bf561: ERRORS linux-git-i686: OK linux-git-m32r: WARNINGS linux-git-mips: ERRORS linux-git-powerpc64: OK linux-git-sh: ERRORS linux-git-x86_64: OK linux-2.6.36.4-i686: ERRORS linux-2.6.37.6-i686: ERRORS linux-2.6.38.8-i686: ERRORS linux-2.6.39.4-i686: ERRORS linux-3.0.60-i686: ERRORS linux-3.1.10-i686: ERRORS linux-3.2.37-i686: ERRORS linux-3.3.8-i686: ERRORS linux-3.4.27-i686: ERRORS linux-3.5.7-i686: ERRORS linux-3.6.11-i686: ERRORS linux-3.7.4-i686: ERRORS linux-3.8-i686: ERRORS linux-3.9.2-i686: ERRORS linux-3.10.1-i686: ERRORS linux-3.11.1-i686: ERRORS linux-3.12.67-i686: ERRORS linux-3.13.11-i686: ERRORS linux-3.14.9-i686: ERRORS linux-3.15.2-i686: ERRORS linux-3.16.7-i686: ERRORS linux-3.17.8-i686: ERRORS linux-3.18.7-i686: ERRORS linux-3.19-i686: ERRORS linux-4.0.9-i686: ERRORS linux-4.1.33-i686: ERRORS linux-4.2.8-i686: ERRORS linux-4.3.6-i686: ERRORS linux-4.4.22-i686: ERRORS linux-4.5.7-i686: ERRORS linux-4.6.7-i686: ERRORS linux-4.7.5-i686: ERRORS linux-4.8-i686: ERRORS linux-4.9.26-i686: ERRORS linux-4.10.14-i686: ERRORS linux-4.11-i686: ERRORS linux-4.12.1-i686: ERRORS linux-4.13-i686: ERRORS linux-2.6.36.4-x86_64: ERRORS linux-2.6.37.6-x86_64: ERRORS linux-2.6.38.8-x86_64: ERRORS linux-2.6.39.4-x86_64: ERRORS linux-3.0.60-x86_64: ERRORS linux-3.1.10-x86_64: ERRORS linux-3.2.37-x86_64: ERRORS linux-3.3.8-x86_64: ERRORS linux-3.4.27-x86_64: ERRORS linux-3.5.7-x86_64: ERRORS linux-3.6.11-x86_64: ERRORS linux-3.7.4-x86_64: ERRORS linux-3.8-x86_64: ERRORS linux-3.9.2-x86_64: ERRORS linux-3.10.1-x86_64: ERRORS linux-3.11.1-x86_64: ERRORS linux-3.12.67-x86_64: ERRORS linux-3.13.11-x86_64: ERRORS linux-3.14.9-x86_64: ERRORS linux-3.15.2-x86_64: ERRORS linux-3.16.7-x86_64: ERRORS linux-3.17.8-x86_64: ERRORS linux-3.18.7-x86_64: ERRORS linux-3.19-x86_64: ERRORS linux-4.0.9-x86_64: ERRORS linux-4.1.33-x86_64: ERRORS linux-4.2.8-x86_64: ERRORS linux-4.3.6-x86_64: ERRORS linux-4.4.22-x86_64: ERRORS linux-4.5.7-x86_64: ERRORS linux-4.6.7-x86_64: ERRORS linux-4.7.5-x86_64: ERRORS linux-4.8-x86_64: ERRORS linux-4.9.26-x86_64: ERRORS linux-4.10.14-x86_64: ERRORS linux-4.11-x86_64: ERRORS linux-4.12.1-x86_64: ERRORS linux-4.13-x86_64: ERRORS apps: OK spec-git: OK Detailed results are available here: http://www.xs4all.nl/~hverkuil/logs/Monday.log Full logs are available here: http://www.xs4all.nl/~hverkuil/logs/Monday.tar.bz2 The Media Infrastructure API from this daily build is here: http://www.xs4all.nl/~hverkuil/spec/index.html
Re: [PATCH v8 1/3] media: dt: bindings: Add binding for tango HW IR decoder
On Fri, Oct 6, 2017 at 7:23 AM, Marc Gonzalezwrote: > Add DT binding for the HW IR decoder embedded in SMP86xx/SMP87xx. > > Signed-off-by: Marc Gonzalez > --- > .../devicetree/bindings/media/tango-ir.txt | 21 > + > 1 file changed, 21 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/tango-ir.txt Acked-by: Rob Herring
Re: [PATCH v15 07/32] v4l: async: Add V4L2 async documentation to the documentation build
Hi, On Thu, Oct 05, 2017 at 12:50:26AM +0300, Sakari Ailus wrote: > The V4L2 async wasn't part of the documentation build. Fix this. > > Signed-off-by: Sakari Ailus> Reviewed-by: Niklas Söderlund > Acked-by: Hans Verkuil > Reviewed-by: Laurent Pinchart Reviewed-by: Sebastian Reichel -- Sebastian > --- > Documentation/media/kapi/v4l2-async.rst | 3 +++ > Documentation/media/kapi/v4l2-core.rst | 1 + > 2 files changed, 4 insertions(+) > create mode 100644 Documentation/media/kapi/v4l2-async.rst > > diff --git a/Documentation/media/kapi/v4l2-async.rst > b/Documentation/media/kapi/v4l2-async.rst > new file mode 100644 > index ..523ff9eb09a0 > --- /dev/null > +++ b/Documentation/media/kapi/v4l2-async.rst > @@ -0,0 +1,3 @@ > +V4L2 async kAPI > +^^^ > +.. kernel-doc:: include/media/v4l2-async.h > diff --git a/Documentation/media/kapi/v4l2-core.rst > b/Documentation/media/kapi/v4l2-core.rst > index c7434f38fd9c..5cf292037a48 100644 > --- a/Documentation/media/kapi/v4l2-core.rst > +++ b/Documentation/media/kapi/v4l2-core.rst > @@ -19,6 +19,7 @@ Video4Linux devices > v4l2-mc > v4l2-mediabus > v4l2-mem2mem > +v4l2-async > v4l2-fwnode > v4l2-rect > v4l2-tuner > -- > 2.11.0 > signature.asc Description: PGP signature
Re: [PATCH v15 06/32] v4l: async: Use more intuitive names for internal functions
Hi, On Thu, Oct 05, 2017 at 12:50:25AM +0300, Sakari Ailus wrote: > Rename internal functions to make the names of the functions better > describe what they do. > > Old nameNew name > v4l2_async_test_notify v4l2_async_match_notify > v4l2_async_belongs v4l2_async_find_match > > Signed-off-by: Sakari Ailus> Acked-by: Hans Verkuil > Acked-by: Pavel Machek > Reviewed-by: Laurent Pinchart Reviewed-by: Sebastian Reichel -- Sebastian > --- > drivers/media/v4l2-core/v4l2-async.c | 19 ++- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c > b/drivers/media/v4l2-core/v4l2-async.c > index cde2cf2ab4b0..8b84fea50c2a 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -60,8 +60,8 @@ static LIST_HEAD(subdev_list); > static LIST_HEAD(notifier_list); > static DEFINE_MUTEX(list_lock); > > -static struct v4l2_async_subdev *v4l2_async_belongs(struct > v4l2_async_notifier *notifier, > - struct v4l2_subdev *sd) > +static struct v4l2_async_subdev *v4l2_async_find_match( > + struct v4l2_async_notifier *notifier, struct v4l2_subdev *sd) > { > bool (*match)(struct v4l2_subdev *, struct v4l2_async_subdev *); > struct v4l2_async_subdev *asd; > @@ -95,9 +95,9 @@ static struct v4l2_async_subdev *v4l2_async_belongs(struct > v4l2_async_notifier * > return NULL; > } > > -static int v4l2_async_test_notify(struct v4l2_async_notifier *notifier, > - struct v4l2_subdev *sd, > - struct v4l2_async_subdev *asd) > +static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier, > +struct v4l2_subdev *sd, > +struct v4l2_async_subdev *asd) > { > int ret; > > @@ -187,11 +187,11 @@ int v4l2_async_notifier_register(struct v4l2_device > *v4l2_dev, > list_for_each_entry_safe(sd, tmp, _list, async_list) { > int ret; > > - asd = v4l2_async_belongs(notifier, sd); > + asd = v4l2_async_find_match(notifier, sd); > if (!asd) > continue; > > - ret = v4l2_async_test_notify(notifier, sd, asd); > + ret = v4l2_async_match_notify(notifier, sd, asd); > if (ret < 0) { > mutex_unlock(_lock); > return ret; > @@ -255,13 +255,14 @@ int v4l2_async_register_subdev(struct v4l2_subdev *sd) > INIT_LIST_HEAD(>async_list); > > list_for_each_entry(notifier, _list, list) { > - struct v4l2_async_subdev *asd = v4l2_async_belongs(notifier, > sd); > + struct v4l2_async_subdev *asd = v4l2_async_find_match(notifier, > + sd); > int ret; > > if (!asd) > continue; > > - ret = v4l2_async_test_notify(notifier, sd, asd); > + ret = v4l2_async_match_notify(notifier, sd, asd); > if (ret) > goto err_unlock; > > -- > 2.11.0 > signature.asc Description: PGP signature
Re: [PATCH v15 05/32] v4l: async: Correctly serialise async sub-device unregistration
Hi, On Thu, Oct 05, 2017 at 12:50:24AM +0300, Sakari Ailus wrote: > The check whether an async sub-device is bound to a notifier was performed > without list_lock held, making it possible for another process to > unbind the async sub-device before the sub-device unregistration function > proceeds to take the lock. > > Fix this by first acquiring the lock and then proceeding with the check. > > Signed-off-by: Sakari AilusReviewed-by: Sebastian Reichel -- Sebastian > --- > drivers/media/v4l2-core/v4l2-async.c | 18 +++--- > 1 file changed, 7 insertions(+), 11 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c > b/drivers/media/v4l2-core/v4l2-async.c > index 4924481451ca..cde2cf2ab4b0 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -298,20 +298,16 @@ EXPORT_SYMBOL(v4l2_async_register_subdev); > > void v4l2_async_unregister_subdev(struct v4l2_subdev *sd) > { > - struct v4l2_async_notifier *notifier = sd->notifier; > - > - if (!sd->asd) { > - if (!list_empty(>async_list)) > - v4l2_async_cleanup(sd); > - return; > - } > - > mutex_lock(_lock); > > - list_add(>asd->list, >waiting); > + if (sd->asd) { > + struct v4l2_async_notifier *notifier = sd->notifier; > > - if (notifier->unbind) > - notifier->unbind(notifier, sd, sd->asd); > + list_add(>asd->list, >waiting); > + > + if (notifier->unbind) > + notifier->unbind(notifier, sd, sd->asd); > + } > > v4l2_async_cleanup(sd); > > -- > 2.11.0 > signature.asc Description: PGP signature
Re: [PATCH v15 03/32] v4l: async: fix unbind error in v4l2_async_notifier_unregister()
Hi, On Thu, Oct 05, 2017 at 12:50:22AM +0300, Sakari Ailus wrote: > From: Niklas Söderlund> > The call to v4l2_async_cleanup() will set sd->asd to NULL so passing it to > notifier->unbind() have no effect and leaves the notifier confused. Call > the unbind() callback prior to cleaning up the subdevice to avoid this. > > Signed-off-by: Niklas Söderlund > Signed-off-by: Sakari Ailus Reviewed-by: Sebastian Reichel -- Sebastian > --- > drivers/media/v4l2-core/v4l2-async.c | 8 > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c > b/drivers/media/v4l2-core/v4l2-async.c > index 21c748bf3a7b..ca281438a0ae 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -206,11 +206,11 @@ void v4l2_async_notifier_unregister(struct > v4l2_async_notifier *notifier) > list_del(>list); > > list_for_each_entry_safe(sd, tmp, >done, async_list) { > - v4l2_async_cleanup(sd); > - > if (notifier->unbind) > notifier->unbind(notifier, sd, sd->asd); > > + v4l2_async_cleanup(sd); > + > list_move(>async_list, _list); > } > > @@ -268,11 +268,11 @@ void v4l2_async_unregister_subdev(struct v4l2_subdev > *sd) > > list_add(>asd->list, >waiting); > > - v4l2_async_cleanup(sd); > - > if (notifier->unbind) > notifier->unbind(notifier, sd, sd->asd); > > + v4l2_async_cleanup(sd); > + > mutex_unlock(_lock); > } > EXPORT_SYMBOL(v4l2_async_unregister_subdev); > -- > 2.11.0 > signature.asc Description: PGP signature
Re: [PATCH v15 02/32] v4l: async: Don't set sd->dev NULL in v4l2_async_cleanup
Hi, On Thu, Oct 05, 2017 at 12:50:21AM +0300, Sakari Ailus wrote: > v4l2_async_cleanup() is called when the async sub-device is unbound from > the media device. As the pointer is set by the driver registering the > async sub-device, leave the pointer as set by the driver. > > Signed-off-by: Sakari Ailus> --- Reviewed-by: Sebastian Reichel -- Sebastian > drivers/media/v4l2-core/v4l2-async.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c > b/drivers/media/v4l2-core/v4l2-async.c > index 60a1a50b9537..21c748bf3a7b 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -134,7 +134,6 @@ static void v4l2_async_cleanup(struct v4l2_subdev *sd) > /* Subdevice driver will reprobe and put the subdev back onto the list > */ > list_del_init(>async_list); > sd->asd = NULL; > - sd->dev = NULL; > } > > int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, > -- > 2.11.0 > signature.asc Description: PGP signature
Re: [PATCH v15 01/32] v4l: async: Remove re-probing support
Hi, On Thu, Oct 05, 2017 at 12:50:20AM +0300, Sakari Ailus wrote: > Remove V4L2 async re-probing support. The re-probing support has been > there to support cases where the sub-devices require resources provided by > the main driver's hardware to function, such as clocks. > > Reprobing has allowed unbinding and again binding the main driver without > explicilty unbinding the sub-device drivers. This is certainly not a > common need, and the responsibility will be the user's going forward. > > An alternative could have been to introduce notifier specific locks. > Considering the complexity of the re-probing and that it isn't really a > solution to a problem but a workaround, remove re-probing instead. > > Signed-off-by: Sakari Ailus> Acked-by: Hans Verkuil > Acked-by: Laurent Pinchart > --- Reviewed-by: Sebastian Reichel -- Sebastian > drivers/media/v4l2-core/v4l2-async.c | 54 > +--- > 1 file changed, 1 insertion(+), 53 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-async.c > b/drivers/media/v4l2-core/v4l2-async.c > index d741a8e0fdac..60a1a50b9537 100644 > --- a/drivers/media/v4l2-core/v4l2-async.c > +++ b/drivers/media/v4l2-core/v4l2-async.c > @@ -198,78 +198,26 @@ EXPORT_SYMBOL(v4l2_async_notifier_register); > void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier) > { > struct v4l2_subdev *sd, *tmp; > - unsigned int notif_n_subdev = notifier->num_subdevs; > - unsigned int n_subdev = min(notif_n_subdev, V4L2_MAX_SUBDEVS); > - struct device **dev; > - int i = 0; > > if (!notifier->v4l2_dev) > return; > > - dev = kvmalloc_array(n_subdev, sizeof(*dev), GFP_KERNEL); > - if (!dev) { > - dev_err(notifier->v4l2_dev->dev, > - "Failed to allocate device cache!\n"); > - } > - > mutex_lock(_lock); > > list_del(>list); > > list_for_each_entry_safe(sd, tmp, >done, async_list) { > - struct device *d; > - > - d = get_device(sd->dev); > - > v4l2_async_cleanup(sd); > > - /* If we handled USB devices, we'd have to lock the parent too > */ > - device_release_driver(d); > - > if (notifier->unbind) > notifier->unbind(notifier, sd, sd->asd); > > - /* > - * Store device at the device cache, in order to call > - * put_device() on the final step > - */ > - if (dev) > - dev[i++] = d; > - else > - put_device(d); > + list_move(>async_list, _list); > } > > mutex_unlock(_lock); > > - /* > - * Call device_attach() to reprobe devices > - * > - * NOTE: If dev allocation fails, i is 0, and the whole loop won't be > - * executed. > - */ > - while (i--) { > - struct device *d = dev[i]; > - > - if (d && device_attach(d) < 0) { > - const char *name = "(none)"; > - int lock = device_trylock(d); > - > - if (lock && d->driver) > - name = d->driver->name; > - dev_err(d, "Failed to re-probe to %s\n", name); > - if (lock) > - device_unlock(d); > - } > - put_device(d); > - } > - kvfree(dev); > - > notifier->v4l2_dev = NULL; > - > - /* > - * Don't care about the waiting list, it is initialised and populated > - * upon notifier registration. > - */ > } > EXPORT_SYMBOL(v4l2_async_notifier_unregister); > > -- > 2.11.0 > signature.asc Description: PGP signature
Re: [PATCH] v4l2-dv-timings.h: fix polarity for 4k formats
On Mon, 2016-05-02 at 10:11 +0200, Hans Verkuil wrote: > Backport to 3.16-4.0 of mainline commit > 3020ca711871fdaf0c15c8bab677a6bc302e28fe > > The VSync polarity was negative instead of positive for the 4k CEA formats. > I probably copy-and-pasted these from the DMT 4k format, which does have a > negative VSync polarity. > > Signed-off-by: Hans Verkuil> Reported-by: Martin Bugge > Signed-off-by: Mauro Carvalho Chehab [...] I've belatedly queued this up for 3.16. Ben. -- Ben Hutchings compatible: Gracefully accepts erroneous data from any source signature.asc Description: This is a digitally signed message part
[PATCH] media: rc: check for integer overflow
The ioctl LIRC_SET_REC_TIMEOUT would set a timeout of 704ns if called with a timeout of 4294968us. Signed-off-by: Sean Young--- drivers/media/rc/ir-lirc-codec.c | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c index bd046c41a53a..8f2f37412fc5 100644 --- a/drivers/media/rc/ir-lirc-codec.c +++ b/drivers/media/rc/ir-lirc-codec.c @@ -298,11 +298,14 @@ static long ir_lirc_ioctl(struct file *filep, unsigned int cmd, if (!dev->max_timeout) return -ENOTTY; + /* Check for multiply overflow */ + if (val > U32_MAX / 1000) + return -EINVAL; + tmp = val * 1000; - if (tmp < dev->min_timeout || - tmp > dev->max_timeout) - return -EINVAL; + if (tmp < dev->min_timeout || tmp > dev->max_timeout) + return -EINVAL; if (dev->s_timeout) ret = dev->s_timeout(dev, tmp); -- 2.13.6
Re: [PATCH v3 00/17] kernel-doc: add supported to document nested structs/
> Am 07.10.2017 um 18:34 schrieb Jonathan Corbet: > > On Wed, 4 Oct 2017 08:48:38 -0300 > Mauro Carvalho Chehab wrote: > >> Right now, it is not possible to document nested struct and nested unions. >> kernel-doc simply ignore them. >> >> Add support to document them. > > So I've finally found some time to actually look at these; sorry for being > so absent from the discussion. I plead $EXCUSES... > > Some overall impressions: > > - Seems like something we want. > - I love hacking all the cruft out of kernel-doc; I've been meaning to > do that for a bit. > - It would sure be nice to restore proper man-page generation rather than > documenting a hack with a perl script. Someday. > > I have one real complaint, though: with these patches applied, a "make > htmldocs" generates about 5500 (!) more warnings than it did before. Over > the last couple of months, I put a bit of focused time into reducing > warnings, and managed to get rid of 20-30 of them. Now I feel despondent. > > I really don't want to add that much noise to the docs build; I think it > will defeat any hope of cleaning up the warnings we already have. I > wonder if we could suppress warnings about nested structs by default, and > add a flag or envar to turn them back on for those who want them? This is what I vote for: +1 > In truth, now that I look, the real problem is that the warnings are > repeated many times - as in, like 100 times: > >> ./include/net/cfg80211.h:4115: warning: Function parameter or member >> 'wext.ibss' not described in 'wireless_dev' >> ./include/net/cfg80211.h:4115: warning: Function parameter or member >> 'wext.ibss' not described in 'wireless_dev' > <107 instances deleted...> >> ./include/net/cfg80211.h:4115: warning: Function parameter or member >> 'wext.ibss' not described in 'wireless_dev' > > That's not something that used to happen, and is certainly not helpful. > Figuring that out would help a lot. Can I get you to take a look at > what's going on here? Hi Jon, if you grep for .. kernel-doc:: include/net/cfg80211.h e.g. by: grep cfg80211.h Documentation/driver-api/80211/cfg80211.rst | wc -l you will see, that this directive is used 110 times in one reST file. If you have 5 warnings about the kernel-doc markup in include/net/cfg80211.h you will get 550 warnings about kernel-doc markup just for just one source code file. This is because the kernel-doc parser is an external process which is called (in this example) 110 times for one reST file and one source code file. If include/net/cfg80211.h is referred in other reST files, we got accordingly more and more warnings .. thats really noise. So what I see is, that a major part of such noise is self made, it was one major goal when I started with the python implementation: run kernel-doc parser in the Sphinx process, cache the results and use it in all reST files where it is required from a kernel-doc directive. Since there is also a man page solution in the py- version I vote to merge the py-version into the kernel (ATM man is similar to what we had in DocBook and it is expandable). If you want to have a preview of the result, try this patch: https://return42.github.io/linuxdoc/linux.html The only drawback of the py version I see is, that Mauro prefers perl and I do not want to lose him as an contributer to the kernel-doc parser. IMO he is an experienced C programmer with an excellent regexpr knowledge. This is, what is needed for this job. May be we can motivate him to give python one more try, this is what I hope. The py version includes all patches we had to the perl version, but I also know, that you are not 100% compliant with the coding style, this could all be fixed in a RFC round. Excuse me if I annoying with this solution; IMO it contains what we need, if we really want to make a step forward. Thanks, -- Markus -- > > Thanks, > > jon > > -- > To unsubscribe from this list: send the line "unsubscribe linux-doc" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/2] staging: atomisp: cleanup out of memory messages
Logging of explicit out of memory messages is redundant since memory allocation failures produce a backtrace. Done with the help of the following cocci script: @@ expression ex, ret; statement s; constant char[] c; constant err; identifier f, l; @@ ex = \(kmalloc\|kmalloc_array\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|devm_kzalloc\)(...) ... when != ex if ( ( !ex | unlikely(!ex) ) ) - { - f(..., c, ...); ( return ret; | return; | return err; | goto l; ) - } else s Another case where if branch has multiple statements was handled with the following condition: { ... - f(..., c, ...); ... } Signed-off-by: Aishwarya Pant--- drivers/staging/media/atomisp/i2c/ap1302.c | 4 +--- drivers/staging/media/atomisp/i2c/gc0310.c | 4 +--- drivers/staging/media/atomisp/i2c/gc2235.c | 4 +--- drivers/staging/media/atomisp/i2c/imx/imx.c| 4 +--- drivers/staging/media/atomisp/i2c/lm3554.c | 4 +--- drivers/staging/media/atomisp/i2c/mt9m114.c| 4 +--- drivers/staging/media/atomisp/i2c/ov2680.c | 4 +--- drivers/staging/media/atomisp/i2c/ov2722.c | 4 +--- drivers/staging/media/atomisp/i2c/ov5693/ov5693.c | 4 +--- drivers/staging/media/atomisp/i2c/ov8858.c | 6 +- drivers/staging/media/atomisp/pci/atomisp2/atomisp_fops.c | 4 +--- drivers/staging/media/atomisp/pci/atomisp2/atomisp_ioctl.c | 9 ++--- .../media/atomisp/pci/atomisp2/css2400/sh_css_param_shading.c | 4 +--- drivers/staging/media/atomisp/pci/atomisp2/hmm/hmm_bo.c| 10 ++ .../staging/media/atomisp/pci/atomisp2/hmm/hmm_dynamic_pool.c | 6 +- .../staging/media/atomisp/pci/atomisp2/hmm/hmm_reserved_pool.c | 5 + drivers/staging/media/atomisp/pci/atomisp2/hmm/hmm_vm.c| 4 +--- .../media/atomisp/platform/intel-mid/atomisp_gmin_platform.c | 4 +--- 18 files changed, 20 insertions(+), 68 deletions(-) diff --git a/drivers/staging/media/atomisp/i2c/ap1302.c b/drivers/staging/media/atomisp/i2c/ap1302.c index 2f772a020c8b..bfbf85122c3b 100644 --- a/drivers/staging/media/atomisp/i2c/ap1302.c +++ b/drivers/staging/media/atomisp/i2c/ap1302.c @@ -1153,10 +1153,8 @@ static int ap1302_probe(struct i2c_client *client, /* allocate device & init sub device */ dev = devm_kzalloc(>dev, sizeof(*dev), GFP_KERNEL); - if (!dev) { - dev_err(>dev, "%s: out of memory\n", __func__); + if (!dev) return -ENOMEM; - } mutex_init(>input_lock); diff --git a/drivers/staging/media/atomisp/i2c/gc0310.c b/drivers/staging/media/atomisp/i2c/gc0310.c index 35ed51ffe944..291565451bfe 100644 --- a/drivers/staging/media/atomisp/i2c/gc0310.c +++ b/drivers/staging/media/atomisp/i2c/gc0310.c @@ -1385,10 +1385,8 @@ static int gc0310_probe(struct i2c_client *client, pr_info("%s S\n", __func__); dev = kzalloc(sizeof(*dev), GFP_KERNEL); - if (!dev) { - dev_err(>dev, "out of memory\n"); + if (!dev) return -ENOMEM; - } mutex_init(>input_lock); diff --git a/drivers/staging/media/atomisp/i2c/gc2235.c b/drivers/staging/media/atomisp/i2c/gc2235.c index e43d31ea9676..f51535eee091 100644 --- a/drivers/staging/media/atomisp/i2c/gc2235.c +++ b/drivers/staging/media/atomisp/i2c/gc2235.c @@ -1123,10 +1123,8 @@ static int gc2235_probe(struct i2c_client *client, unsigned int i; dev = kzalloc(sizeof(*dev), GFP_KERNEL); - if (!dev) { - dev_err(>dev, "out of memory\n"); + if (!dev) return -ENOMEM; - } mutex_init(>input_lock); diff --git a/drivers/staging/media/atomisp/i2c/imx/imx.c b/drivers/staging/media/atomisp/i2c/imx/imx.c index 49ab0af87096..957fb1863b40 100644 --- a/drivers/staging/media/atomisp/i2c/imx/imx.c +++ b/drivers/staging/media/atomisp/i2c/imx/imx.c @@ -2365,10 +2365,8 @@ static int imx_probe(struct i2c_client *client, /* allocate sensor device & init sub device */ dev = kzalloc(sizeof(*dev), GFP_KERNEL); - if (!dev) { - v4l2_err(client, "%s: out of memory\n", __func__); + if (!dev) return -ENOMEM; - } mutex_init(>input_lock); diff --git a/drivers/staging/media/atomisp/i2c/lm3554.c b/drivers/staging/media/atomisp/i2c/lm3554.c index 679176f7c542..37876d245a02 100644 --- a/drivers/staging/media/atomisp/i2c/lm3554.c +++ b/drivers/staging/media/atomisp/i2c/lm3554.c @@ -871,10 +871,8 @@ static int lm3554_probe(struct i2c_client *client, int ret; flash = kzalloc(sizeof(*flash), GFP_KERNEL); - if (!flash) { - dev_err(>dev, "out of memory\n"); + if (!flash) return -ENOMEM; - }
[PATCH 1/2] staging: atomisp2: cleanup null check on memory allocation
For memory allocation functions that fail with a NULL return value, it is preferred to use the (!x) test in place of (x == NULL). Changes in atomisp2/css2400/sh_css.c were done by hand. Done with the help of the following cocci script: @@ type T; T* p; statement s,s1; @@ p = \(devm_kzalloc\|devm_ioremap\|usb_alloc_urb\|alloc_netdev\|dev_alloc_skb\| kmalloc\|kmalloc_array\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|devm_kzalloc\)(...) ...when != p if ( - p == NULL + !p ) s else s1 Signed-off-by: Aishwarya Pant-- Changes in atomisp2/css2400/sh_css.c were done by hand, the above script was not able to match the pattern if (a->b != null). --- .../media/atomisp/pci/atomisp2/css2400/sh_css.c| 36 +++--- .../atomisp/pci/atomisp2/css2400/sh_css_firmware.c | 6 ++-- .../pci/atomisp2/css2400/sh_css_param_shading.c| 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c index e882b5596813..56de641d8848 100644 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c +++ b/drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c @@ -5607,13 +5607,13 @@ static enum ia_css_err load_video_binaries(struct ia_css_pipe *pipe) mycs->num_yuv_scaler = cas_scaler_descr.num_stage; mycs->yuv_scaler_binary = kzalloc(cas_scaler_descr.num_stage * sizeof(struct ia_css_binary), GFP_KERNEL); - if (mycs->yuv_scaler_binary == NULL) { + if (!mycs->yuv_scaler_binary) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; return err; } mycs->is_output_stage = kzalloc(cas_scaler_descr.num_stage * sizeof(bool), GFP_KERNEL); - if (mycs->is_output_stage == NULL) { + if (!mycs->is_output_stage) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; return err; } @@ -6258,14 +6258,14 @@ static enum ia_css_err load_primary_binaries( mycs->num_yuv_scaler = cas_scaler_descr.num_stage; mycs->yuv_scaler_binary = kzalloc(cas_scaler_descr.num_stage * sizeof(struct ia_css_binary), GFP_KERNEL); - if (mycs->yuv_scaler_binary == NULL) { + if (!mycs->yuv_scaler_binary) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; IA_CSS_LEAVE_ERR_PRIVATE(err); return err; } mycs->is_output_stage = kzalloc(cas_scaler_descr.num_stage * sizeof(bool), GFP_KERNEL); - if (mycs->is_output_stage == NULL) { + if (!mycs->is_output_stage) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; IA_CSS_LEAVE_ERR_PRIVATE(err); return err; @@ -6982,27 +6982,27 @@ static enum ia_css_err ia_css_pipe_create_cas_scaler_desc_single_output( } descr->in_info = kmalloc(descr->num_stage * sizeof(struct ia_css_frame_info), GFP_KERNEL); - if (descr->in_info == NULL) { + if (!descr->in_info) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; goto ERR; } descr->internal_out_info = kmalloc(descr->num_stage * sizeof(struct ia_css_frame_info), GFP_KERNEL); - if (descr->internal_out_info == NULL) { + if (!descr->internal_out_info) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; goto ERR; } descr->out_info = kmalloc(descr->num_stage * sizeof(struct ia_css_frame_info), GFP_KERNEL); - if (descr->out_info == NULL) { + if (!descr->out_info) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; goto ERR; } descr->vf_info = kmalloc(descr->num_stage * sizeof(struct ia_css_frame_info), GFP_KERNEL); - if (descr->vf_info == NULL) { + if (!descr->vf_info) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; goto ERR; } descr->is_output_stage = kmalloc(descr->num_stage * sizeof(bool), GFP_KERNEL); - if (descr->is_output_stage == NULL) { + if (!descr->is_output_stage) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; goto ERR; } @@ -7118,22 +7118,22 @@ static enum ia_css_err ia_css_pipe_create_cas_scaler_desc(struct ia_css_pipe *pi descr->num_stage = num_stages; descr->in_info = kmalloc(descr->num_stage * sizeof(struct ia_css_frame_info), GFP_KERNEL); - if (descr->in_info == NULL) { + if (!descr->in_info) { err = IA_CSS_ERR_CANNOT_ALLOCATE_MEMORY; goto
[PATCH 0/2] staginng: atomisp: memory allocation cleanups
Patch series performs minor code cleanups using coccinelle to simplify memory allocation tests and remove redundant OOM log messages. Aishwarya Pant (2): staging: atomisp2: cleanup null check on memory allocation staging: atomisp: cleanup out of memory messages drivers/staging/media/atomisp/i2c/ap1302.c | 4 +-- drivers/staging/media/atomisp/i2c/gc0310.c | 4 +-- drivers/staging/media/atomisp/i2c/gc2235.c | 4 +-- drivers/staging/media/atomisp/i2c/imx/imx.c| 4 +-- drivers/staging/media/atomisp/i2c/lm3554.c | 4 +-- drivers/staging/media/atomisp/i2c/mt9m114.c| 4 +-- drivers/staging/media/atomisp/i2c/ov2680.c | 4 +-- drivers/staging/media/atomisp/i2c/ov2722.c | 4 +-- drivers/staging/media/atomisp/i2c/ov5693/ov5693.c | 4 +-- drivers/staging/media/atomisp/i2c/ov8858.c | 6 +--- .../media/atomisp/pci/atomisp2/atomisp_fops.c | 4 +-- .../media/atomisp/pci/atomisp2/atomisp_ioctl.c | 9 ++ .../media/atomisp/pci/atomisp2/css2400/sh_css.c| 36 +++--- .../atomisp/pci/atomisp2/css2400/sh_css_firmware.c | 6 ++-- .../pci/atomisp2/css2400/sh_css_param_shading.c| 4 +-- .../media/atomisp/pci/atomisp2/hmm/hmm_bo.c| 10 ++ .../atomisp/pci/atomisp2/hmm/hmm_dynamic_pool.c| 6 +--- .../atomisp/pci/atomisp2/hmm/hmm_reserved_pool.c | 5 +-- .../media/atomisp/pci/atomisp2/hmm/hmm_vm.c| 4 +-- .../platform/intel-mid/atomisp_gmin_platform.c | 4 +-- 20 files changed, 41 insertions(+), 89 deletions(-) -- 2.11.0