Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758509AbcDHPFf (ORCPT ); Fri, 8 Apr 2016 11:05:35 -0400 Received: from mail-pf0-f177.google.com ([209.85.192.177]:34449 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758422AbcDHPFc (ORCPT ); Fri, 8 Apr 2016 11:05:32 -0400 From: Sudip Mukherjee To: Greg Kroah-Hartman , Felipe Balbi Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Sudip Mukherjee Subject: [PATCH] usb: renesas_usbhs: fix signed-unsigned return Date: Fri, 8 Apr 2016 20:35:18 +0530 Message-Id: <1460127918-27400-1-git-send-email-sudipm.mukherjee@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2395 Lines: 91 The return type of usbhsp_setup_pipecfg() was u16 but it was returning a negative value (-EINVAL). Instead lets return a pointer to u16 which will hold the value to be returned or in case of error, return the error code in ERR_PTR. Signed-off-by: Sudip Mukherjee --- drivers/usb/renesas_usbhs/pipe.c | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/drivers/usb/renesas_usbhs/pipe.c b/drivers/usb/renesas_usbhs/pipe.c index 78e9dba..00d595c 100644 --- a/drivers/usb/renesas_usbhs/pipe.c +++ b/drivers/usb/renesas_usbhs/pipe.c @@ -391,9 +391,9 @@ void usbhs_pipe_set_trans_count_if_bulk(struct usbhs_pipe *pipe, int len) /* * pipe setup */ -static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe, - int is_host, - int dir_in) +static u16 *usbhsp_setup_pipecfg(struct usbhs_pipe *pipe, + int is_host, + int dir_in) { u16 type = 0; u16 bfre = 0; @@ -407,9 +407,13 @@ static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe, [USB_ENDPOINT_XFER_INT] = TYPE_INT, [USB_ENDPOINT_XFER_ISOC] = TYPE_ISO, }; + u16 *result; if (usbhs_pipe_is_dcp(pipe)) - return -EINVAL; + return ERR_PTR(-EINVAL); + result = kmalloc(sizeof(u16), GFP_KERNEL); + if (!result) + return ERR_PTR(-ENOMEM); /* * PIPECFG @@ -451,14 +455,14 @@ static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe, /* EPNUM */ epnum = 0; /* see usbhs_pipe_config_update() */ - - return type | - bfre | - dblb | - cntmd | - dir | - shtnak | - epnum; + *result = type | + bfre | + dblb | + cntmd | + dir | + shtnak | + epnum; + return result; } static u16 usbhsp_setup_pipebuff(struct usbhs_pipe *pipe) @@ -683,6 +687,7 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv, int is_host = usbhs_mod_is_host(priv); int ret; u16 pipecfg, pipebuf; + u16 *result; pipe = usbhsp_get_pipe(priv, endpoint_type); if (!pipe) { @@ -702,7 +707,14 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv, return NULL; } - pipecfg = usbhsp_setup_pipecfg(pipe, is_host, dir_in); + result = usbhsp_setup_pipecfg(pipe, is_host, dir_in); + if (IS_ERR(result)) { + dev_err(dev, "can't setup pipe\n"); + return NULL; + } + pipecfg = *result; + kfree(result); + pipebuf = usbhsp_setup_pipebuff(pipe); usbhsp_pipe_select(pipe); -- 1.9.1