On 7/16/22 06:35, Sreekanth Reddy wrote:
Hi Guenter,
Please check the changes below. I hope this change will work with
32-bit pointers as well. If it looks good then I will post this
change as a patch.
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 0901bc932d5c..0bba19c0f984 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -386,7 +386,7 @@ static void mpi3mr_queue_qd_reduction_event(struct
mpi3mr_ioc *mrioc,
ioc_warn(mrioc, "failed to queue TG QD reduction event\n");
return;
}
- *(__le64 *)fwevt->event_data = (__le64)tg;
+ memcpy(fwevt->event_data, (char *)&tg, sizeof(void *)); > fwevt->mrioc = mrioc;
fwevt->event_id = MPI3MR_DRIVER_EVENT_TG_QD_REDUCTION;
fwevt->send_ack = 0;
@@ -1660,8 +1660,7 @@ static void mpi3mr_fwevt_bh(struct mpi3mr_ioc *mrioc,
{
struct mpi3mr_throttle_group_info *tg;
- tg = (struct mpi3mr_throttle_group_info *)
- (*(__le64 *)fwevt->event_data);
+ memcpy((char *)&tg, fwevt->event_data, sizeof(void *));
dprint_event_bh(mrioc,
"qd reduction event processed for tg_id(%d)
reduction_needed(%d)\n",
tg->id, tg->need_qd_reduction);
If I understand correctly, you want to pass the pointer to tg along. If so,
the following seems cleaner and less confusing to me.
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 6a47f8c77256..f581c07c2665 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -386,7 +386,7 @@ static void mpi3mr_queue_qd_reduction_event(struct mpi3mr_ioc *mrioc,
ioc_warn(mrioc, "failed to queue TG QD reduction event\n");
return;
}
- *(__le64 *)fwevt->event_data = (__le64)tg;
+ *(struct mpi3mr_throttle_group_info **)fwevt->event_data = tg;
fwevt->mrioc = mrioc;
fwevt->event_id = MPI3MR_DRIVER_EVENT_TG_QD_REDUCTION;
fwevt->send_ack = 0;
@@ -1652,8 +1652,7 @@ static void mpi3mr_fwevt_bh(struct mpi3mr_ioc *mrioc,
{
struct mpi3mr_throttle_group_info *tg;
- tg = (struct mpi3mr_throttle_group_info *)
- (*(__le64 *)fwevt->event_data);
+ tg = *(struct mpi3mr_throttle_group_info **)fwevt->event_data;
dprint_event_bh(mrioc,
"qd reduction event processed for tg_id(%d) reduction_needed(%d)\n",
tg->id, tg->need_qd_reduction);
or simply
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 6a47f8c77256..cc93b41dd428 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -386,7 +386,7 @@ static void mpi3mr_queue_qd_reduction_event(struct mpi3mr_ioc *mrioc,
ioc_warn(mrioc, "failed to queue TG QD reduction event\n");
return;
}
- *(__le64 *)fwevt->event_data = (__le64)tg;
+ *(void **)fwevt->event_data = tg;
fwevt->mrioc = mrioc;
fwevt->event_id = MPI3MR_DRIVER_EVENT_TG_QD_REDUCTION;
fwevt->send_ack = 0;
@@ -1652,8 +1652,7 @@ static void mpi3mr_fwevt_bh(struct mpi3mr_ioc *mrioc,
{
struct mpi3mr_throttle_group_info *tg;
- tg = (struct mpi3mr_throttle_group_info *)
- (*(__le64 *)fwevt->event_data);
+ tg = *(void **)fwevt->event_data;
dprint_event_bh(mrioc,
"qd reduction event processed for tg_id(%d) reduction_needed(%d)\n",
tg->id, tg->need_qd_reduction);
Thanks,
Guenter
Thanks,
Sreekanth
On Fri, Jul 15, 2022 at 10:19 PM Guenter Roeck <linux@xxxxxxxxxxxx> wrote:
On 7/15/22 08:02, Sreekanth Reddy wrote:
Fix below compilation errors observed on i386 ARCH,
cast from pointer to integer of different size
[-Werror=pointer-to-int-cast]
Fixes: c196bc4dce ("scsi: mpi3mr: Reduce VD queue depth on detecting throttling")
Reported-by: Guenter Roeck <linux@xxxxxxxxxxxx>
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@xxxxxxxxxxxx>
---
drivers/scsi/mpi3mr/mpi3mr_os.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 0901bc932d5c..d8013576d863 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -386,7 +386,7 @@ static void mpi3mr_queue_qd_reduction_event(struct mpi3mr_ioc *mrioc,
ioc_warn(mrioc, "failed to queue TG QD reduction event\n");
return;
}
- *(__le64 *)fwevt->event_data = (__le64)tg;
+ memcpy(fwevt->event_data, (char *)&tg, sizeof(u64));
fwevt->mrioc = mrioc;
fwevt->event_id = MPI3MR_DRIVER_EVENT_TG_QD_REDUCTION;
fwevt->send_ack = 0;
@@ -1660,8 +1660,7 @@ static void mpi3mr_fwevt_bh(struct mpi3mr_ioc *mrioc,
{
struct mpi3mr_throttle_group_info *tg;
- tg = (struct mpi3mr_throttle_group_info *)
- (*(__le64 *)fwevt->event_data);
+ memcpy((char *)&tg, fwevt->event_data, sizeof(u64));
How is this expected to work on a system with 32-bit pointers ?
Guenter
dprint_event_bh(mrioc,
"qd reduction event processed for tg_id(%d) reduction_needed(%d)\n",
tg->id, tg->need_qd_reduction);