Message ID | 154445465027.866316.3631489273007908874.stgit@bahia.lan (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | ocxl: Fix endiannes bug in read_afu_name() | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | next/apply_patch Successfully applied |
snowpatch_ozlabs/build-ppc64le | warning | build succeeded but added 1 new sparse warning(s) |
snowpatch_ozlabs/build-ppc64be | warning | build succeeded but added 6 new sparse warning(s) |
snowpatch_ozlabs/build-ppc64e | success | build succeded & removed 0 sparse warning(s) |
snowpatch_ozlabs/build-pmac32 | success | build succeded & removed 0 sparse warning(s) |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 8 lines checked |
Le 10/12/2018 à 16:10, Greg Kurz a écrit : > The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains > four characters of the AFU name, read from the PCI config space, hence > with a little-endian ordering. When composing the string, a big-endian > system must swap the bytes so that the characters appear in the right > order. > > Do this with le32_to_cpu(). > > Signed-off-by: Greg Kurz <groug@kaod.org> > --- Thanks! Acked-by: Frederic Barrat <fbarrat@linux.ibm.com> > drivers/misc/ocxl/config.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c > index 57a6bb1fd3c9..b76198ba8630 100644 > --- a/drivers/misc/ocxl/config.c > +++ b/drivers/misc/ocxl/config.c > @@ -318,7 +318,7 @@ static int read_afu_name(struct pci_dev *dev, struct ocxl_fn_config *fn, > if (rc) > return rc; > ptr = (u32 *) &afu->name[i]; > - *ptr = val; > + *ptr = le32_to_cpu(val); > } > afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */ > return 0; >
On 11/12/18 2:10 am, Greg Kurz wrote: > The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains > four characters of the AFU name, read from the PCI config space, hence > with a little-endian ordering. When composing the string, a big-endian > system must swap the bytes so that the characters appear in the right > order. > > Do this with le32_to_cpu(). > > Signed-off-by: Greg Kurz <groug@kaod.org> snowpatch reports the following sparse warning: +drivers/misc/ocxl/config.c:321:24: warning: cast to restricted __le32 You probably need to change val from a u32 to a __le32. > --- > drivers/misc/ocxl/config.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c > index 57a6bb1fd3c9..b76198ba8630 100644 > --- a/drivers/misc/ocxl/config.c > +++ b/drivers/misc/ocxl/config.c > @@ -318,7 +318,7 @@ static int read_afu_name(struct pci_dev *dev, struct ocxl_fn_config *fn, > if (rc) > return rc; > ptr = (u32 *) &afu->name[i]; > - *ptr = val; > + *ptr = le32_to_cpu(val); > } > afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */ > return 0; >
On 11/12/18 11:05 am, Andrew Donnellan wrote: > On 11/12/18 2:10 am, Greg Kurz wrote: >> The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains >> four characters of the AFU name, read from the PCI config space, hence >> with a little-endian ordering. When composing the string, a big-endian >> system must swap the bytes so that the characters appear in the right >> order. >> >> Do this with le32_to_cpu(). >> >> Signed-off-by: Greg Kurz <groug@kaod.org> > > snowpatch reports the following sparse warning: > > +drivers/misc/ocxl/config.c:321:24: warning: cast to restricted __le32 > > You probably need to change val from a u32 to a __le32. Also does this need to go to stable?
On Tue, 11 Dec 2018 11:24:08 +1100 Andrew Donnellan <andrew.donnellan@au1.ibm.com> wrote: > On 11/12/18 11:05 am, Andrew Donnellan wrote: > > On 11/12/18 2:10 am, Greg Kurz wrote: > >> The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains > >> four characters of the AFU name, read from the PCI config space, hence > >> with a little-endian ordering. When composing the string, a big-endian > >> system must swap the bytes so that the characters appear in the right > >> order. > >> > >> Do this with le32_to_cpu(). > >> > >> Signed-off-by: Greg Kurz <groug@kaod.org> > > > > snowpatch reports the following sparse warning: > > > > +drivers/misc/ocxl/config.c:321:24: warning: cast to restricted __le32 > > > > You probably need to change val from a u32 to a __le32. > You might be right, I'll look into this. > Also does this need to go to stable? > Oops... this bug has been there since the beginning, so yes it does. I simply forgot to add the Cc: stable tag... :-\ Cheers, -- Greg
diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c index 57a6bb1fd3c9..b76198ba8630 100644 --- a/drivers/misc/ocxl/config.c +++ b/drivers/misc/ocxl/config.c @@ -318,7 +318,7 @@ static int read_afu_name(struct pci_dev *dev, struct ocxl_fn_config *fn, if (rc) return rc; ptr = (u32 *) &afu->name[i]; - *ptr = val; + *ptr = le32_to_cpu(val); } afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */ return 0;
The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains four characters of the AFU name, read from the PCI config space, hence with a little-endian ordering. When composing the string, a big-endian system must swap the bytes so that the characters appear in the right order. Do this with le32_to_cpu(). Signed-off-by: Greg Kurz <groug@kaod.org> --- drivers/misc/ocxl/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)