All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vijay Khemka <vijaykhemka@fb.com>
To: Andrew Jeffery <andrew@aj.id.au>, Arnd Bergmann <arnd@arndb.de>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	Joel Stanley <joel@jms.id.au>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-aspeed@lists.ozlabs.org" <linux-aspeed@lists.ozlabs.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "openbmc @ lists . ozlabs . org" <openbmc@lists.ozlabs.org>
Subject: Re: [PATCH v2] misc: aspeed-lpc-ctrl: make parameter optional
Date: Fri, 18 Jan 2019 20:12:07 +0000	[thread overview]
Message-ID: <DCD8D2E5-DB18-427C-AA8F-18289E9AB0AB@fb.com> (raw)
In-Reply-To: <1547787502.2061444.1637712576.1F1E21B4@webmail.messagingengine.com>

Hi Andrew,
Thanks for this review, I will have a follow up patch for this return values.

Regards
-Vijay

On 1/17/19, 8:58 PM, "Andrew Jeffery" <andrew@aj.id.au> wrote:

    Hi Vijay,
    
    Thanks for doing the work to fix the driver. Some minor queries/points
    below.
    
    On Thu, 17 Jan 2019, at 08:31, Vijay Khemka wrote:
    > Makiing memory-region and flash as optional parameter in device
    > tree if user needs to use these parameter through ioctl then
    > need to define in devicetree.
    > 
    > Signed-off-by: Vijay Khemka <vijaykhemka@fb.com>
    > ---
    >  drivers/misc/aspeed-lpc-ctrl.c | 58 +++++++++++++++++++++-------------
    >  1 file changed, 36 insertions(+), 22 deletions(-)
    > 
    > diff --git a/drivers/misc/aspeed-lpc-ctrl.c b/drivers/misc/aspeed-lpc-
    > ctrl.c
    > index a024f8042259..332210e06e98 100644
    > --- a/drivers/misc/aspeed-lpc-ctrl.c
    > +++ b/drivers/misc/aspeed-lpc-ctrl.c
    > @@ -68,6 +68,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, 
    > unsigned int cmd,
    >  		unsigned long param)
    >  {
    >  	struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file);
    > +	struct device *dev = file->private_data;
    >  	void __user *p = (void __user *)param;
    >  	struct aspeed_lpc_ctrl_mapping map;
    >  	u32 addr;
    > @@ -90,6 +91,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, 
    > unsigned int cmd,
    >  		if (map.window_id != 0)
    >  			return -EINVAL;
    >  
    > +		/* If memory-region is not described in device tree */
    > +		if (!lpc_ctrl->mem_size) {
    > +			dev_err(dev, "Didn't find reserved memory\n");
    > +			return -EINVAL;
    
    I feel like EINVAL isn't quite right - it's pretty generic, and the parameter
    value changes its validity with the devicetree context. My gut instinct
    would be to use EINVAL for parameter values that violate assumptions
    of the driver rather than violate configuration of the driver. Maybe ENXIO
    ("No such device or address") is an improvement: "I can't map that device
    because there's no such device or address"?
    
    > +		}
    > +
    >  		map.size = lpc_ctrl->mem_size;
    >  
    >  		return copy_to_user(p, &map, sizeof(map)) ? -EFAULT : 0;
    > @@ -126,9 +133,18 @@ static long aspeed_lpc_ctrl_ioctl(struct file 
    > *file, unsigned int cmd,
    >  			return -EINVAL;
    >  
    >  		if (map.window_type == ASPEED_LPC_CTRL_WINDOW_FLASH) {
    > +			if (!lpc_ctrl->pnor_size) {
    > +				dev_err(dev, "Didn't find host pnor flash\n");
    > +				return -EINVAL;
    
    See the error code discussion above. Also, this is userspace's error not 
    the kernel's, so I think dev_err() is a bit harsh. Probably best to just let
    userspace log the error if it thinks the it is concerning.
    
    > +			}
    >  			addr = lpc_ctrl->pnor_base;
    >  			size = lpc_ctrl->pnor_size;
    >  		} else if (map.window_type == ASPEED_LPC_CTRL_WINDOW_MEMORY) {
    > +			/* If memory-region is not described in device tree */
    > +			if (!lpc_ctrl->mem_size) {
    > +				dev_err(dev, "Didn't find reserved memory\n");
    > +				return -EINVAL;
    
    as above.
    
    > +			}
    >  			addr = lpc_ctrl->mem_base;
    >  			size = lpc_ctrl->mem_size;
    >  		} else {
    > @@ -196,17 +212,17 @@ static int aspeed_lpc_ctrl_probe(struct 
    > platform_device *pdev)
    >  	if (!lpc_ctrl)
    >  		return -ENOMEM;
    >  
    > +	/* If flash is described in device tree then store */
    >  	node = of_parse_phandle(dev->of_node, "flash", 0);
    >  	if (!node) {
    > -		dev_err(dev, "Didn't find host pnor flash node\n");
    > -		return -ENODEV;
    > -	}
    > -
    > -	rc = of_address_to_resource(node, 1, &resm);
    > -	of_node_put(node);
    > -	if (rc) {
    > -		dev_err(dev, "Couldn't address to resource for flash\n");
    > -		return rc;
    > +		dev_dbg(dev, "Didn't find host pnor flash node\n");
    > +	} else {
    > +		rc = of_address_to_resource(node, 1, &resm);
    > +		of_node_put(node);
    > +		if (rc) {
    > +			dev_err(dev, "Couldn't address to resource for flash\n");
    > +			return rc;
    > +		}
    >  	}
    >  
    >  	lpc_ctrl->pnor_size = resource_size(&resm);
    > @@ -214,22 +230,22 @@ static int aspeed_lpc_ctrl_probe(struct 
    > platform_device *pdev)
    >  
    >  	dev_set_drvdata(&pdev->dev, lpc_ctrl);
    >  
    > +	/* If memory-region is described in device tree then store */
    >  	node = of_parse_phandle(dev->of_node, "memory-region", 0);
    >  	if (!node) {
    > -		dev_err(dev, "Didn't find reserved memory\n");
    > -		return -EINVAL;
    > -	}
    > +		dev_dbg(dev, "Didn't find reserved memory\n");
    > +	} else {
    > +		rc = of_address_to_resource(node, 0, &resm);
    > +		of_node_put(node);
    > +		if (rc) {
    > +			dev_err(dev, "Couldn't address to resource for reserved memory\n");
    > +			return -ENOMEM;
    
    Wow, I think this is an abuse of ENOMEM. Its description is "Out of memory"
    which doesn't really reflect the problem here.
    
    Not really your fault though, maybe we'll fix that with some follow-up patches.
    
    Cheers,
    
    Andrew
    
    > +		}
    >  
    > -	rc = of_address_to_resource(node, 0, &resm);
    > -	of_node_put(node);
    > -	if (rc) {
    > -		dev_err(dev, "Couldn't address to resource for reserved memory\n");
    > -		return -ENOMEM;
    > +		lpc_ctrl->mem_size = resource_size(&resm);
    > +		lpc_ctrl->mem_base = resm.start;
    >  	}
    >  
    > -	lpc_ctrl->mem_size = resource_size(&resm);
    > -	lpc_ctrl->mem_base = resm.start;
    > -
    >  	lpc_ctrl->regmap = syscon_node_to_regmap(
    >  			pdev->dev.parent->of_node);
    >  	if (IS_ERR(lpc_ctrl->regmap)) {
    > @@ -258,8 +274,6 @@ static int aspeed_lpc_ctrl_probe(struct 
    > platform_device *pdev)
    >  		goto err;
    >  	}
    >  
    > -	dev_info(dev, "Loaded at %pr\n", &resm);
    > -
    >  	return 0;
    >  
    >  err:
    > -- 
    > 2.17.1
    > 
    


WARNING: multiple messages have this Message-ID (diff)
From: Vijay Khemka <vijaykhemka@fb.com>
To: Andrew Jeffery <andrew@aj.id.au>, Arnd Bergmann <arnd@arndb.de>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	Joel Stanley <joel@jms.id.au>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"linux-aspeed@lists.ozlabs.org" <linux-aspeed@lists.ozlabs.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "openbmc @ lists . ozlabs . org" <openbmc@lists.ozlabs.org>
Subject: Re: [PATCH v2] misc: aspeed-lpc-ctrl: make parameter optional
Date: Fri, 18 Jan 2019 20:12:07 +0000	[thread overview]
Message-ID: <DCD8D2E5-DB18-427C-AA8F-18289E9AB0AB@fb.com> (raw)
In-Reply-To: <1547787502.2061444.1637712576.1F1E21B4@webmail.messagingengine.com>

Hi Andrew,
Thanks for this review, I will have a follow up patch for this return values.

Regards
-Vijay

On 1/17/19, 8:58 PM, "Andrew Jeffery" <andrew@aj.id.au> wrote:

    Hi Vijay,
    
    Thanks for doing the work to fix the driver. Some minor queries/points
    below.
    
    On Thu, 17 Jan 2019, at 08:31, Vijay Khemka wrote:
    > Makiing memory-region and flash as optional parameter in device
    > tree if user needs to use these parameter through ioctl then
    > need to define in devicetree.
    > 
    > Signed-off-by: Vijay Khemka <vijaykhemka@fb.com>
    > ---
    >  drivers/misc/aspeed-lpc-ctrl.c | 58 +++++++++++++++++++++-------------
    >  1 file changed, 36 insertions(+), 22 deletions(-)
    > 
    > diff --git a/drivers/misc/aspeed-lpc-ctrl.c b/drivers/misc/aspeed-lpc-
    > ctrl.c
    > index a024f8042259..332210e06e98 100644
    > --- a/drivers/misc/aspeed-lpc-ctrl.c
    > +++ b/drivers/misc/aspeed-lpc-ctrl.c
    > @@ -68,6 +68,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, 
    > unsigned int cmd,
    >  		unsigned long param)
    >  {
    >  	struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file);
    > +	struct device *dev = file->private_data;
    >  	void __user *p = (void __user *)param;
    >  	struct aspeed_lpc_ctrl_mapping map;
    >  	u32 addr;
    > @@ -90,6 +91,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, 
    > unsigned int cmd,
    >  		if (map.window_id != 0)
    >  			return -EINVAL;
    >  
    > +		/* If memory-region is not described in device tree */
    > +		if (!lpc_ctrl->mem_size) {
    > +			dev_err(dev, "Didn't find reserved memory\n");
    > +			return -EINVAL;
    
    I feel like EINVAL isn't quite right - it's pretty generic, and the parameter
    value changes its validity with the devicetree context. My gut instinct
    would be to use EINVAL for parameter values that violate assumptions
    of the driver rather than violate configuration of the driver. Maybe ENXIO
    ("No such device or address") is an improvement: "I can't map that device
    because there's no such device or address"?
    
    > +		}
    > +
    >  		map.size = lpc_ctrl->mem_size;
    >  
    >  		return copy_to_user(p, &map, sizeof(map)) ? -EFAULT : 0;
    > @@ -126,9 +133,18 @@ static long aspeed_lpc_ctrl_ioctl(struct file 
    > *file, unsigned int cmd,
    >  			return -EINVAL;
    >  
    >  		if (map.window_type == ASPEED_LPC_CTRL_WINDOW_FLASH) {
    > +			if (!lpc_ctrl->pnor_size) {
    > +				dev_err(dev, "Didn't find host pnor flash\n");
    > +				return -EINVAL;
    
    See the error code discussion above. Also, this is userspace's error not 
    the kernel's, so I think dev_err() is a bit harsh. Probably best to just let
    userspace log the error if it thinks the it is concerning.
    
    > +			}
    >  			addr = lpc_ctrl->pnor_base;
    >  			size = lpc_ctrl->pnor_size;
    >  		} else if (map.window_type == ASPEED_LPC_CTRL_WINDOW_MEMORY) {
    > +			/* If memory-region is not described in device tree */
    > +			if (!lpc_ctrl->mem_size) {
    > +				dev_err(dev, "Didn't find reserved memory\n");
    > +				return -EINVAL;
    
    as above.
    
    > +			}
    >  			addr = lpc_ctrl->mem_base;
    >  			size = lpc_ctrl->mem_size;
    >  		} else {
    > @@ -196,17 +212,17 @@ static int aspeed_lpc_ctrl_probe(struct 
    > platform_device *pdev)
    >  	if (!lpc_ctrl)
    >  		return -ENOMEM;
    >  
    > +	/* If flash is described in device tree then store */
    >  	node = of_parse_phandle(dev->of_node, "flash", 0);
    >  	if (!node) {
    > -		dev_err(dev, "Didn't find host pnor flash node\n");
    > -		return -ENODEV;
    > -	}
    > -
    > -	rc = of_address_to_resource(node, 1, &resm);
    > -	of_node_put(node);
    > -	if (rc) {
    > -		dev_err(dev, "Couldn't address to resource for flash\n");
    > -		return rc;
    > +		dev_dbg(dev, "Didn't find host pnor flash node\n");
    > +	} else {
    > +		rc = of_address_to_resource(node, 1, &resm);
    > +		of_node_put(node);
    > +		if (rc) {
    > +			dev_err(dev, "Couldn't address to resource for flash\n");
    > +			return rc;
    > +		}
    >  	}
    >  
    >  	lpc_ctrl->pnor_size = resource_size(&resm);
    > @@ -214,22 +230,22 @@ static int aspeed_lpc_ctrl_probe(struct 
    > platform_device *pdev)
    >  
    >  	dev_set_drvdata(&pdev->dev, lpc_ctrl);
    >  
    > +	/* If memory-region is described in device tree then store */
    >  	node = of_parse_phandle(dev->of_node, "memory-region", 0);
    >  	if (!node) {
    > -		dev_err(dev, "Didn't find reserved memory\n");
    > -		return -EINVAL;
    > -	}
    > +		dev_dbg(dev, "Didn't find reserved memory\n");
    > +	} else {
    > +		rc = of_address_to_resource(node, 0, &resm);
    > +		of_node_put(node);
    > +		if (rc) {
    > +			dev_err(dev, "Couldn't address to resource for reserved memory\n");
    > +			return -ENOMEM;
    
    Wow, I think this is an abuse of ENOMEM. Its description is "Out of memory"
    which doesn't really reflect the problem here.
    
    Not really your fault though, maybe we'll fix that with some follow-up patches.
    
    Cheers,
    
    Andrew
    
    > +		}
    >  
    > -	rc = of_address_to_resource(node, 0, &resm);
    > -	of_node_put(node);
    > -	if (rc) {
    > -		dev_err(dev, "Couldn't address to resource for reserved memory\n");
    > -		return -ENOMEM;
    > +		lpc_ctrl->mem_size = resource_size(&resm);
    > +		lpc_ctrl->mem_base = resm.start;
    >  	}
    >  
    > -	lpc_ctrl->mem_size = resource_size(&resm);
    > -	lpc_ctrl->mem_base = resm.start;
    > -
    >  	lpc_ctrl->regmap = syscon_node_to_regmap(
    >  			pdev->dev.parent->of_node);
    >  	if (IS_ERR(lpc_ctrl->regmap)) {
    > @@ -258,8 +274,6 @@ static int aspeed_lpc_ctrl_probe(struct 
    > platform_device *pdev)
    >  		goto err;
    >  	}
    >  
    > -	dev_info(dev, "Loaded at %pr\n", &resm);
    > -
    >  	return 0;
    >  
    >  err:
    > -- 
    > 2.17.1
    > 
    

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-01-18 20:12 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-16 22:01 [PATCH v2] misc: aspeed-lpc-ctrl: make parameter optional Vijay Khemka
2019-01-16 22:01 ` Vijay Khemka
2019-01-17  6:17 ` Joel Stanley
2019-01-17  6:17   ` Joel Stanley
2019-01-17  6:17   ` Joel Stanley
2019-01-17 18:53   ` Vijay Khemka
2019-01-17 18:53     ` Vijay Khemka
2019-01-18  4:58 ` Andrew Jeffery
2019-01-18  4:58   ` Andrew Jeffery
2019-01-18 20:12   ` Vijay Khemka [this message]
2019-01-18 20:12     ` Vijay Khemka
2019-01-18 20:12     ` Vijay Khemka
2019-05-01  5:55     ` Joel Stanley
2019-05-01  5:55       ` Joel Stanley
2019-05-01  5:55       ` Joel Stanley
2019-05-01  6:45       ` Greg Kroah-Hartman
2019-05-01  6:45         ` Greg Kroah-Hartman
2019-05-01  6:45         ` Greg Kroah-Hartman
2019-05-01 22:22         ` Vijay Khemka
2019-05-01 22:22           ` Vijay Khemka
2019-05-01 22:22           ` Vijay Khemka

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=DCD8D2E5-DB18-427C-AA8F-18289E9AB0AB@fb.com \
    --to=vijaykhemka@fb.com \
    --cc=andrew@aj.id.au \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=joel@jms.id.au \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-aspeed@lists.ozlabs.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=openbmc@lists.ozlabs.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.