Message ID | 20201201082730.24158-8-njavali@marvell.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | qla2xxx bug fixes | expand |
> On Dec 1, 2020, at 2:27 AM, Nilesh Javali <njavali@marvell.com> wrote: > > From: Arun Easi <aeasi@marvell.com> > > Crash stack: > [576544.715489] Unable to handle kernel paging request for data at address 0xd00000000f970000 > [576544.715497] Faulting instruction address: 0xd00000000f880f64 > [576544.715503] Oops: Kernel access of bad area, sig: 11 [#1] > [576544.715506] SMP NR_CPUS=2048 NUMA pSeries > : > [576544.715703] NIP [d00000000f880f64] .qla27xx_fwdt_template_valid+0x94/0x100 [qla2xxx] > [576544.715722] LR [d00000000f7952dc] .qla24xx_load_risc_flash+0x2fc/0x590 [qla2xxx] > [576544.715726] Call Trace: > [576544.715731] [c0000004d0ffb000] [c0000006fe02c350] 0xc0000006fe02c350 (unreliable) > [576544.715750] [c0000004d0ffb080] [d00000000f7952dc] .qla24xx_load_risc_flash+0x2fc/0x590 [qla2xxx] > [576544.715770] [c0000004d0ffb170] [d00000000f7aa034] .qla81xx_load_risc+0x84/0x1a0 [qla2xxx] > [576544.715789] [c0000004d0ffb210] [d00000000f79f7c8] .qla2x00_setup_chip+0xc8/0x910 [qla2xxx] > [576544.715808] [c0000004d0ffb300] [d00000000f7a631c] .qla2x00_initialize_adapter+0x4dc/0xb00 [qla2xxx] > [576544.715826] [c0000004d0ffb3e0] [d00000000f78ce28] .qla2x00_probe_one+0xf08/0x2200 [qla2xxx] > > Fixes: f73cb695d3ec ("[SCSI] qla2xxx: Add support for ISP2071.") > Signed-off-by: Arun Easi <aeasi@marvell.com> > Signed-off-by: Nilesh Javali <njavali@marvell.com> I think this needs stable tag as well. > --- > drivers/scsi/qla2xxx/qla_tmpl.c | 9 +++++---- > drivers/scsi/qla2xxx/qla_tmpl.h | 2 +- > 2 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c > index 84f4416d366f..a6bb1c0e2245 100644 > --- a/drivers/scsi/qla2xxx/qla_tmpl.c > +++ b/drivers/scsi/qla2xxx/qla_tmpl.c > @@ -928,7 +928,8 @@ qla27xx_template_checksum(void *p, ulong size) > static inline int > qla27xx_verify_template_checksum(struct qla27xx_fwdt_template *tmp) > { > - return qla27xx_template_checksum(tmp, tmp->template_size) == 0; > + return qla27xx_template_checksum(tmp, > + le32_to_cpu(tmp->template_size)) == 0; > } > > static inline int > @@ -944,7 +945,7 @@ qla27xx_execute_fwdt_template(struct scsi_qla_host *vha, > ulong len = 0; > > if (qla27xx_fwdt_template_valid(tmp)) { > - len = tmp->template_size; > + len = le32_to_cpu(tmp->template_size); > tmp = memcpy(buf, tmp, len); > ql27xx_edit_template(vha, tmp); > qla27xx_walk_template(vha, tmp, buf, &len); > @@ -960,7 +961,7 @@ qla27xx_fwdt_calculate_dump_size(struct scsi_qla_host *vha, void *p) > ulong len = 0; > > if (qla27xx_fwdt_template_valid(tmp)) { > - len = tmp->template_size; > + len = le32_to_cpu(tmp->template_size); > qla27xx_walk_template(vha, tmp, NULL, &len); > } > > @@ -972,7 +973,7 @@ qla27xx_fwdt_template_size(void *p) > { > struct qla27xx_fwdt_template *tmp = p; > > - return tmp->template_size; > + return le32_to_cpu(tmp->template_size); > } > > int > diff --git a/drivers/scsi/qla2xxx/qla_tmpl.h b/drivers/scsi/qla2xxx/qla_tmpl.h > index c47184db5081..6e0987edfceb 100644 > --- a/drivers/scsi/qla2xxx/qla_tmpl.h > +++ b/drivers/scsi/qla2xxx/qla_tmpl.h > @@ -12,7 +12,7 @@ > struct __packed qla27xx_fwdt_template { > __le32 template_type; > __le32 entry_offset; > - uint32_t template_size; > + __le32 template_size; > uint32_t count; /* borrow field for running/residual count */ > > __le32 entry_count; > -- > 2.19.0.rc0 > Otherwise.. Looks good Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> -- Himanshu Madhani Oracle Linux Engineering
diff --git a/drivers/scsi/qla2xxx/qla_tmpl.c b/drivers/scsi/qla2xxx/qla_tmpl.c index 84f4416d366f..a6bb1c0e2245 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.c +++ b/drivers/scsi/qla2xxx/qla_tmpl.c @@ -928,7 +928,8 @@ qla27xx_template_checksum(void *p, ulong size) static inline int qla27xx_verify_template_checksum(struct qla27xx_fwdt_template *tmp) { - return qla27xx_template_checksum(tmp, tmp->template_size) == 0; + return qla27xx_template_checksum(tmp, + le32_to_cpu(tmp->template_size)) == 0; } static inline int @@ -944,7 +945,7 @@ qla27xx_execute_fwdt_template(struct scsi_qla_host *vha, ulong len = 0; if (qla27xx_fwdt_template_valid(tmp)) { - len = tmp->template_size; + len = le32_to_cpu(tmp->template_size); tmp = memcpy(buf, tmp, len); ql27xx_edit_template(vha, tmp); qla27xx_walk_template(vha, tmp, buf, &len); @@ -960,7 +961,7 @@ qla27xx_fwdt_calculate_dump_size(struct scsi_qla_host *vha, void *p) ulong len = 0; if (qla27xx_fwdt_template_valid(tmp)) { - len = tmp->template_size; + len = le32_to_cpu(tmp->template_size); qla27xx_walk_template(vha, tmp, NULL, &len); } @@ -972,7 +973,7 @@ qla27xx_fwdt_template_size(void *p) { struct qla27xx_fwdt_template *tmp = p; - return tmp->template_size; + return le32_to_cpu(tmp->template_size); } int diff --git a/drivers/scsi/qla2xxx/qla_tmpl.h b/drivers/scsi/qla2xxx/qla_tmpl.h index c47184db5081..6e0987edfceb 100644 --- a/drivers/scsi/qla2xxx/qla_tmpl.h +++ b/drivers/scsi/qla2xxx/qla_tmpl.h @@ -12,7 +12,7 @@ struct __packed qla27xx_fwdt_template { __le32 template_type; __le32 entry_offset; - uint32_t template_size; + __le32 template_size; uint32_t count; /* borrow field for running/residual count */ __le32 entry_count;