.. otherwise people spend extra cycles looking for the
inner loop and wondering 'why j'?
This was an over-sight when initial work was rebased
so lets fix it here.
Fixes: 583fa5e71cae ("cxl/mem: Add basic IOCTL interface")
Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
---
drivers/cxl/mem.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/cxl/mem.c b/drivers/cxl/mem.c
index 244cb7d89678..2b8265b03b0d 100644
--- a/drivers/cxl/mem.c
+++ b/drivers/cxl/mem.c
@@ -698,7 +698,7 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
struct device *dev = &cxlmd->dev;
struct cxl_mem_command *cmd;
u32 n_commands;
- int j = 0;
+ int i = 0;
dev_dbg(dev, "Query IOCTL\n");
@@ -716,10 +716,10 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
cxl_for_each_cmd(cmd) {
const struct cxl_command_info *info = &cmd->info;
- if (copy_to_user(&q->commands[j++], info, sizeof(*info)))
+ if (copy_to_user(&q->commands[i++], info, sizeof(*info)))
return -EFAULT;
- if (j == n_commands)
+ if (i == n_commands)
break;
}
--
2.13.6
On Fri, Feb 26, 2021 at 03:45:52PM -0500, Konrad Rzeszutek Wilk wrote:
> .. otherwise people spend extra cycles looking for the
> inner loop and wondering 'why j'?
>
> This was an over-sight when initial work was rebased
> so lets fix it here.
>
> Fixes: 583fa5e71cae ("cxl/mem: Add basic IOCTL interface")
^^^^^
34 days too early; otherwise, that's a damn good contender...
On Fri, Feb 26, 2021 at 12:46 PM Konrad Rzeszutek Wilk
<[email protected]> wrote:
>
Hey, Konrad, thanks for fixing this up. Some more cosmetic changes to
fold in below...
> .. otherwise people spend extra cycles looking for the
> inner loop and wondering 'why j'?
>
> This was an over-sight when initial work was rebased
s/over-sight/oversight/
> so lets fix it here.
s/lets/let's/
> Fixes: 583fa5e71cae ("cxl/mem: Add basic IOCTL interface")
Since it's just cosmetic, I don't think it needs a "Fixes:". The
AUTOSEL-bot need not worry about this.
> Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
> ---
> drivers/cxl/mem.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/cxl/mem.c b/drivers/cxl/mem.c
> index 244cb7d89678..2b8265b03b0d 100644
> --- a/drivers/cxl/mem.c
> +++ b/drivers/cxl/mem.c
> @@ -698,7 +698,7 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
> struct device *dev = &cxlmd->dev;
> struct cxl_mem_command *cmd;
> u32 n_commands;
> - int j = 0;
> + int i = 0;
Let's move this initialization down to right before the loop. If this
ever gets refactored and @i gets reused this will break.
>
> dev_dbg(dev, "Query IOCTL\n");
>
> @@ -716,10 +716,10 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
> cxl_for_each_cmd(cmd) {
> const struct cxl_command_info *info = &cmd->info;
>
> - if (copy_to_user(&q->commands[j++], info, sizeof(*info)))
> + if (copy_to_user(&q->commands[i++], info, sizeof(*info)))
> return -EFAULT;
>
> - if (j == n_commands)
> + if (i == n_commands)
> break;
> }
>
> --
> 2.13.6
>
.. otherwise people spend extra cycles looking for the
inner loop and wondering 'why j'?
This was an oversight when initial work was rebased
so let's fix it here.
Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
---
v1: Initial posting
v2: Fix per Dan's request
---
drivers/cxl/mem.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/cxl/mem.c b/drivers/cxl/mem.c
index 244cb7d89678..d43197a193ce 100644
--- a/drivers/cxl/mem.c
+++ b/drivers/cxl/mem.c
@@ -698,7 +698,6 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
struct device *dev = &cxlmd->dev;
struct cxl_mem_command *cmd;
u32 n_commands;
- int j = 0;
dev_dbg(dev, "Query IOCTL\n");
@@ -715,11 +714,12 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
*/
cxl_for_each_cmd(cmd) {
const struct cxl_command_info *info = &cmd->info;
+ int i = 0;
- if (copy_to_user(&q->commands[j++], info, sizeof(*info)))
+ if (copy_to_user(&q->commands[i++], info, sizeof(*info)))
return -EFAULT;
- if (j == n_commands)
+ if (i == n_commands)
break;
}
--
2.13.6
.. otherwise people spend extra cycles looking for the
inner loop and wondering 'why j'?
This was an oversight when initial work was rebased
so let's fix it here.
Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
---
v1: Initial posting
v2: Fix per Dan's request
v3: Duh, don't initialize i in the loop, but do it outside of it.
---
drivers/cxl/mem.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/cxl/mem.c b/drivers/cxl/mem.c
index 244cb7d89678..e7246e585e62 100644
--- a/drivers/cxl/mem.c
+++ b/drivers/cxl/mem.c
@@ -698,7 +698,7 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
struct device *dev = &cxlmd->dev;
struct cxl_mem_command *cmd;
u32 n_commands;
- int j = 0;
+ int i;
dev_dbg(dev, "Query IOCTL\n");
@@ -713,13 +713,14 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
* otherwise, return max(n_commands, total commands) cxl_command_info
* structures.
*/
+ i = 0;
cxl_for_each_cmd(cmd) {
const struct cxl_command_info *info = &cmd->info;
- if (copy_to_user(&q->commands[j++], info, sizeof(*info)))
+ if (copy_to_user(&q->commands[i++], info, sizeof(*info)))
return -EFAULT;
- if (j == n_commands)
+ if (i == n_commands)
break;
}
--
2.29.2
From: Konrad Rzeszutek Wilk
> Sent: 26 February 2021 21:17
>
> .. otherwise people spend extra cycles looking for the
> inner loop and wondering 'why j'?
>
> This was an oversight when initial work was rebased
> so let's fix it here.
>
> Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
> ---
> v1: Initial posting
> v2: Fix per Dan's request
> ---
> drivers/cxl/mem.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/cxl/mem.c b/drivers/cxl/mem.c
> index 244cb7d89678..d43197a193ce 100644
> --- a/drivers/cxl/mem.c
> +++ b/drivers/cxl/mem.c
> @@ -698,7 +698,6 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
> struct device *dev = &cxlmd->dev;
> struct cxl_mem_command *cmd;
> u32 n_commands;
> - int j = 0;
>
> dev_dbg(dev, "Query IOCTL\n");
>
> @@ -715,11 +714,12 @@ static int cxl_query_cmd(struct cxl_memdev *cxlmd,
> */
> cxl_for_each_cmd(cmd) {
> const struct cxl_command_info *info = &cmd->info;
> + int i = 0;
>
> - if (copy_to_user(&q->commands[j++], info, sizeof(*info)))
> + if (copy_to_user(&q->commands[i++], info, sizeof(*info)))
> return -EFAULT;
>
> - if (j == n_commands)
> + if (i == n_commands)
> break;
Did you test this?
Looks badly broken to me.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
..snip..
> > cxl_for_each_cmd(cmd) {
> > const struct cxl_command_info *info = &cmd->info;
> > + int i = 0;
> >
> > - if (copy_to_user(&q->commands[j++], info, sizeof(*info)))
> > + if (copy_to_user(&q->commands[i++], info, sizeof(*info)))
> > return -EFAULT;
> >
> > - if (j == n_commands)
> > + if (i == n_commands)
> > break;
>
>
> Did you test this?
> Looks badly broken to me.
I sent out the v3 which had that fixed. See
https://lore.kernel.org/linux-cxl/[email protected]/T/#u