Subject: Re: [PATCH 0/5] video-SMSC UFX: Adjustments for five function implementations

On Saturday, November 25, 2017 09:42:57 PM SF Markus Elfring wrote:
> From: Markus Elfring <[email protected]>
> Date: Sat, 25 Nov 2017 21:38:42 +0100
>
> A few update suggestions were taken into account
> from static source code analysis.
>
> Markus Elfring (5):
> Delete an error message for a failed memory allocation in two functions

This patch removes the information about the device for which the allocation
fails.

> Less checks in ufx_usb_probe() after error detection

This patch depends on the earlier patch (which is not being merged) so please
re-base it if you want it to be applied.

> Return an error code only as a constant in ufx_realloc_framebuffer()

ditto

> Improve a size determination in two functions

Patch queued for 4.16, thanks.

> Adjust three checks for null pointers

This patch contains unrelated change ({} braces addition) which should be
dropped.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


2017-12-29 18:43:13

by SF Markus Elfring

[permalink] [raw]
Subject: Re: [0/5] video-SMSC UFX: Adjustments for five function implementations

>> Delete an error message for a failed memory allocation in two functions
>
> This patch removes the information about the device for which the allocation fails.

Should a Linux allocation failure report be sufficient here?


>> Less checks in ufx_usb_probe() after error detection
>
> This patch depends on the earlier patch (which is not being merged)

Partly, yes.


> so please re-base it if you want it to be applied.

Would you dare to pick another change possibility up from a patch hunk?


>> Adjust three checks for null pointers
>
> This patch contains unrelated change ({} braces addition) which should be dropped.

I presented such an update approach so that warnings from the script “checkpatch.pl”
will be fixed together.

Regards,
Markus

2018-01-07 16:01:06

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH v3 0/3] video-SMSC UFX: Adjustments for two function implementations

From: Markus Elfring <[email protected]>
Date: Sun, 7 Jan 2018 16:54:32 +0100

Three update suggestions were taken into account
from static source code analysis.

Markus Elfring (3):
Less checks in ufx_usb_probe() after error detection
Return an error code only as a constant
in ufx_realloc_framebuffer()
Delete an error message for a failed memory allocation
in ufx_realloc_framebuffer()

---

v3:
Rebased on Linux next-20180105.

drivers/video/fbdev/smscufx.c | 59 ++++++++++++++++---------------------------
1 file changed, 22 insertions(+), 37 deletions(-)

--
2.15.1

2018-01-07 16:02:34

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH v3 1/3] video: smscufx: Less checks in ufx_usb_probe() after error detection

From: Markus Elfring <[email protected]>
Date: Sun, 7 Jan 2018 15:56:11 +0100

Up to four checks could be repeated by the ufx_usb_probe() function
during error handling even if the relevant properties can be determined
for the involved variables before by source code analysis.

* Return directly after a call of the function "kzalloc" failed
at the beginning.

* Adjust jump targets so that extra checks can be omitted at the end.

* Delete initialisations for the variables "info" and "retval"
which became unnecessary with this refactoring.

Signed-off-by: Markus Elfring <[email protected]>
---

v3:
This update suggestion was rebased on source files from the software
"Linux next-20180105".

v2:
A call of the function "fb_dealloc_cmap" was preserved for the exception
handling at the end.

drivers/video/fbdev/smscufx.c | 46 ++++++++++++++++++-------------------------
1 file changed, 19 insertions(+), 27 deletions(-)

diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index 8db7085e5d1a..893daeb1ffd9 100644
--- a/drivers/video/fbdev/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
@@ -1620,8 +1620,8 @@ static int ufx_usb_probe(struct usb_interface *interface,
{
struct usb_device *usbdev;
struct ufx_data *dev;
- struct fb_info *info = NULL;
- int retval = -ENOMEM;
+ struct fb_info *info;
+ int retval;
u32 id_rev, fpga_rev;

/* usb initialization */
@@ -1631,7 +1631,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
if (dev == NULL) {
dev_err(&usbdev->dev, "ufx_usb_probe: failed alloc of dev struct\n");
- goto error;
+ return -ENOMEM;
}

/* we need to wait for both usb and fbdev to spin down on disconnect */
@@ -1652,9 +1652,8 @@ static int ufx_usb_probe(struct usb_interface *interface,
dev_dbg(dev->gdev, "fb_defio enable=%d\n", fb_defio);

if (!ufx_alloc_urb_list(dev, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
- retval = -ENOMEM;
dev_err(dev->gdev, "ufx_alloc_urb_list failed\n");
- goto error;
+ goto e_nomem;
}

/* We don't register a new USB class. Our client interface is fbdev */
@@ -1662,9 +1661,8 @@ static int ufx_usb_probe(struct usb_interface *interface,
/* allocates framebuffer driver structure, not framebuffer memory */
info = framebuffer_alloc(0, &usbdev->dev);
if (!info) {
- retval = -ENOMEM;
dev_err(dev->gdev, "framebuffer_alloc failed\n");
- goto error;
+ goto e_nomem;
}

dev->info = info;
@@ -1675,7 +1673,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
retval = fb_alloc_cmap(&info->cmap, 256, 0);
if (retval < 0) {
dev_err(dev->gdev, "fb_alloc_cmap failed %x\n", retval);
- goto error;
+ goto destroy_modedb;
}

INIT_DELAYED_WORK(&dev->free_framebuffer_work,
@@ -1736,26 +1734,20 @@ static int ufx_usb_probe(struct usb_interface *interface,
return 0;

error:
- if (dev) {
- if (info) {
- if (info->cmap.len != 0)
- fb_dealloc_cmap(&info->cmap);
- if (info->monspecs.modedb)
- fb_destroy_modedb(info->monspecs.modedb);
- vfree(info->screen_base);
-
- fb_destroy_modelist(&info->modelist);
-
- framebuffer_release(info);
- }
-
- kref_put(&dev->kref, ufx_free); /* ref for framebuffer */
- kref_put(&dev->kref, ufx_free); /* last ref from kref_init */
-
- /* dev has been deallocated. Do not dereference */
- }
-
+ fb_dealloc_cmap(&info->cmap);
+destroy_modedb:
+ fb_destroy_modedb(info->monspecs.modedb);
+ vfree(info->screen_base);
+ fb_destroy_modelist(&info->modelist);
+ framebuffer_release(info);
+put_ref:
+ kref_put(&dev->kref, ufx_free); /* ref for framebuffer */
+ kref_put(&dev->kref, ufx_free); /* last ref from kref_init */
return retval;
+
+e_nomem:
+ retval = -ENOMEM;
+ goto put_ref;
}

static void ufx_usb_disconnect(struct usb_interface *interface)
--
2.15.1

2018-01-07 16:05:58

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH v3 2/3] video: smscufx: Return an error code only as a constant in ufx_realloc_framebuffer()

From: Markus Elfring <[email protected]>
Date: Sun, 7 Jan 2018 16:07:11 +0100

* Return an error code without storing it in an intermediate variable.

* Delete the label "error" and local variable "retval"
which became unnecessary with this refactoring.

Signed-off-by: Markus Elfring <[email protected]>
---

v3:
This update suggestion was rebased on source files from the software
"Linux next-20180105".

drivers/video/fbdev/smscufx.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index 893daeb1ffd9..abbded605d68 100644
--- a/drivers/video/fbdev/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
@@ -1293,7 +1293,6 @@ static struct fb_ops ufx_ops = {
* Assumes no active clients have framebuffer open */
static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
{
- int retval = -ENOMEM;
int old_len = info->fix.smem_len;
int new_len;
unsigned char *old_fb = info->screen_base;
@@ -1310,7 +1309,7 @@ static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
new_fb = vmalloc(new_len);
if (!new_fb) {
pr_err("Virtual framebuffer alloc failed");
- goto error;
+ return -ENOMEM;
}

if (info->screen_base) {
@@ -1323,11 +1322,7 @@ static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
info->fix.smem_start = (unsigned long) new_fb;
info->flags = smscufx_info_flags;
}
-
- retval = 0;
-
-error:
- return retval;
+ return 0;
}

/* sets up I2C Controller for 100 Kbps, std. speed, 7-bit addr, master,
--
2.15.1

2018-01-07 16:06:30

by SF Markus Elfring

[permalink] [raw]
Subject: [PATCH v3 3/3] video: smscufx: Delete an error message for a failed memory allocation in ufx_realloc_framebuffer()

From: Markus Elfring <[email protected]>
Date: Sun, 7 Jan 2018 16:12:40 +0100

Omit an extra message for a memory allocation failure in this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <[email protected]>
---

v3:
This update suggestion was rebased on source files from the software
"Linux next-20180105".

drivers/video/fbdev/smscufx.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index abbded605d68..22b606af0a87 100644
--- a/drivers/video/fbdev/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
@@ -1307,10 +1307,8 @@ static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
* Alloc system memory for virtual framebuffer
*/
new_fb = vmalloc(new_len);
- if (!new_fb) {
- pr_err("Virtual framebuffer alloc failed");
+ if (!new_fb)
return -ENOMEM;
- }

if (info->screen_base) {
memcpy(new_fb, old_fb, old_len);
--
2.15.1

Subject: Re: [PATCH v3 2/3] video: smscufx: Return an error code only as a constant in ufx_realloc_framebuffer()

On Sunday, January 07, 2018 05:04:04 PM SF Markus Elfring wrote:
> From: Markus Elfring <[email protected]>
> Date: Sun, 7 Jan 2018 16:07:11 +0100
>
> * Return an error code without storing it in an intermediate variable.
>
> * Delete the label "error" and local variable "retval"
> which became unnecessary with this refactoring.
>
> Signed-off-by: Markus Elfring <[email protected]>

Patch queued for 4.17, thanks.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


Subject: Re: [PATCH v3 3/3] video: smscufx: Delete an error message for a failed memory allocation in ufx_realloc_framebuffer()

On Sunday, January 07, 2018 05:06:13 PM SF Markus Elfring wrote:
> From: Markus Elfring <[email protected]>
> Date: Sun, 7 Jan 2018 16:12:40 +0100
>
> Omit an extra message for a memory allocation failure in this function.
>
> This issue was detected by using the Coccinelle software.
>
> Signed-off-by: Markus Elfring <[email protected]>

Patch queued for 4.17, thanks.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics


Subject: Re: [PATCH v3 1/3] video: smscufx: Less checks in ufx_usb_probe() after error detection

On Sunday, January 07, 2018 05:02:21 PM SF Markus Elfring wrote:
> From: Markus Elfring <[email protected]>
> Date: Sun, 7 Jan 2018 15:56:11 +0100
>
> Up to four checks could be repeated by the ufx_usb_probe() function
> during error handling even if the relevant properties can be determined
> for the involved variables before by source code analysis.
>
> * Return directly after a call of the function "kzalloc" failed
> at the beginning.
>
> * Adjust jump targets so that extra checks can be omitted at the end.
>
> * Delete initialisations for the variables "info" and "retval"
> which became unnecessary with this refactoring.
>
> Signed-off-by: Markus Elfring <[email protected]>

Patch queued for 4.17, thanks.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics