All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Drivers: hv: vmbus: Fix initialization of device object in vmbus_device_register()
@ 2022-03-11 13:37 Andrea Parri (Microsoft)
  2022-03-11 15:06 ` Michael Kelley (LINUX)
  0 siblings, 1 reply; 3+ messages in thread
From: Andrea Parri (Microsoft) @ 2022-03-11 13:37 UTC (permalink / raw)
  To: KY Srinivasan, Haiyang Zhang, Stephen Hemminger, Wei Liu,
	Dexuan Cui, Tianyu Lan, Michael Kelley, Long Li
  Cc: linux-hyperv, linux-kernel, Andrea Parri (Microsoft)

Initialize the device's dma_{mask,parms} pointers before invoking
device_register().  Address the following trace with 5.17-rc7:

[   49.646839] WARNING: CPU: 0 PID: 189 at include/linux/dma-mapping.h:543
	netvsc_probe+0x37a/0x3a0 [hv_netvsc]
[   49.646928] Call Trace:
[   49.646930]  <TASK>
[   49.646935]  vmbus_probe+0x40/0x60 [hv_vmbus]
[   49.646942]  really_probe+0x1ce/0x3b0
[   49.646948]  __driver_probe_device+0x109/0x180
[   49.646952]  driver_probe_device+0x23/0xa0
[   49.646955]  __device_attach_driver+0x76/0xe0
[   49.646958]  ? driver_allows_async_probing+0x50/0x50
[   49.646961]  bus_for_each_drv+0x84/0xd0
[   49.646964]  __device_attach+0xed/0x170
[   49.646967]  device_initial_probe+0x13/0x20
[   49.646970]  bus_probe_device+0x8f/0xa0
[   49.646973]  device_add+0x41a/0x8e0
[   49.646975]  ? hrtimer_init+0x28/0x80
[   49.646981]  device_register+0x1b/0x20
[   49.646983]  vmbus_device_register+0x5e/0xf0 [hv_vmbus]
[   49.646991]  vmbus_add_channel_work+0x12d/0x190 [hv_vmbus]
[   49.646999]  process_one_work+0x21d/0x3f0
[   49.647002]  worker_thread+0x4a/0x3b0
[   49.647005]  ? process_one_work+0x3f0/0x3f0
[   49.647007]  kthread+0xff/0x130
[   49.647011]  ? kthread_complete_and_exit+0x20/0x20
[   49.647015]  ret_from_fork+0x22/0x30
[   49.647020]  </TASK>
[   49.647021] ---[ end trace 0000000000000000 ]---

Fixes: 743b237c3a7b0 ("scsi: storvsc: Add Isolation VM support for storvsc driver")
Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com>
---
 drivers/hv/vmbus_drv.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 12a2b37e87f30..65db5048b1763 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -2097,6 +2097,9 @@ int vmbus_device_register(struct hv_device *child_device_obj)
 	child_device_obj->device.parent = &hv_acpi_dev->dev;
 	child_device_obj->device.release = vmbus_device_release;
 
+	child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
+	child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
+
 	/*
 	 * Register with the LDM. This will kick off the driver/device
 	 * binding...which will eventually call vmbus_match() and vmbus_probe()
@@ -2122,8 +2125,6 @@ int vmbus_device_register(struct hv_device *child_device_obj)
 	}
 	hv_debug_add_dev_dir(child_device_obj);
 
-	child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
-	child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
 	dma_set_mask(&child_device_obj->device, DMA_BIT_MASK(64));
 	return 0;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* RE: [PATCH] Drivers: hv: vmbus: Fix initialization of device object in vmbus_device_register()
  2022-03-11 13:37 [PATCH] Drivers: hv: vmbus: Fix initialization of device object in vmbus_device_register() Andrea Parri (Microsoft)
@ 2022-03-11 15:06 ` Michael Kelley (LINUX)
  2022-03-11 15:19   ` Andrea Parri
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Kelley (LINUX) @ 2022-03-11 15:06 UTC (permalink / raw)
  To: Andrea Parri (Microsoft),
	KY Srinivasan, Haiyang Zhang, Stephen Hemminger, Wei Liu,
	Dexuan Cui, Tianyu Lan, Long Li
  Cc: linux-hyperv, linux-kernel

From: Andrea Parri (Microsoft) <parri.andrea@gmail.com> Sent: Friday, March 11, 2022 5:38 AM
> 
> Initialize the device's dma_{mask,parms} pointers before invoking
> device_register().  Address the following trace with 5.17-rc7:
> 
> [   49.646839] WARNING: CPU: 0 PID: 189 at include/linux/dma-mapping.h:543
> 	netvsc_probe+0x37a/0x3a0 [hv_netvsc]
> [   49.646928] Call Trace:
> [   49.646930]  <TASK>
> [   49.646935]  vmbus_probe+0x40/0x60 [hv_vmbus]
> [   49.646942]  really_probe+0x1ce/0x3b0
> [   49.646948]  __driver_probe_device+0x109/0x180
> [   49.646952]  driver_probe_device+0x23/0xa0
> [   49.646955]  __device_attach_driver+0x76/0xe0
> [   49.646958]  ? driver_allows_async_probing+0x50/0x50
> [   49.646961]  bus_for_each_drv+0x84/0xd0
> [   49.646964]  __device_attach+0xed/0x170
> [   49.646967]  device_initial_probe+0x13/0x20
> [   49.646970]  bus_probe_device+0x8f/0xa0
> [   49.646973]  device_add+0x41a/0x8e0
> [   49.646975]  ? hrtimer_init+0x28/0x80
> [   49.646981]  device_register+0x1b/0x20
> [   49.646983]  vmbus_device_register+0x5e/0xf0 [hv_vmbus]
> [   49.646991]  vmbus_add_channel_work+0x12d/0x190 [hv_vmbus]
> [   49.646999]  process_one_work+0x21d/0x3f0
> [   49.647002]  worker_thread+0x4a/0x3b0
> [   49.647005]  ? process_one_work+0x3f0/0x3f0
> [   49.647007]  kthread+0xff/0x130
> [   49.647011]  ? kthread_complete_and_exit+0x20/0x20
> [   49.647015]  ret_from_fork+0x22/0x30
> [   49.647020]  </TASK>
> [   49.647021] ---[ end trace 0000000000000000 ]---
> 
> Fixes: 743b237c3a7b0 ("scsi: storvsc: Add Isolation VM support for storvsc driver")
> Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com>
> ---
>  drivers/hv/vmbus_drv.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
> index 12a2b37e87f30..65db5048b1763 100644
> --- a/drivers/hv/vmbus_drv.c
> +++ b/drivers/hv/vmbus_drv.c
> @@ -2097,6 +2097,9 @@ int vmbus_device_register(struct hv_device
> *child_device_obj)
>  	child_device_obj->device.parent = &hv_acpi_dev->dev;
>  	child_device_obj->device.release = vmbus_device_release;
> 
> +	child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
> +	child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
> +
>  	/*
>  	 * Register with the LDM. This will kick off the driver/device
>  	 * binding...which will eventually call vmbus_match() and vmbus_probe()
> @@ -2122,8 +2125,6 @@ int vmbus_device_register(struct hv_device
> *child_device_obj)
>  	}
>  	hv_debug_add_dev_dir(child_device_obj);
> 
> -	child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
> -	child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
>  	dma_set_mask(&child_device_obj->device, DMA_BIT_MASK(64));

Is there any reason to not move dma_set_mask() as well?  That call is
closely related to the previous two lines, so it is unexpected to have
them separated.

Michael

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Drivers: hv: vmbus: Fix initialization of device object in vmbus_device_register()
  2022-03-11 15:06 ` Michael Kelley (LINUX)
@ 2022-03-11 15:19   ` Andrea Parri
  0 siblings, 0 replies; 3+ messages in thread
From: Andrea Parri @ 2022-03-11 15:19 UTC (permalink / raw)
  To: Michael Kelley (LINUX)
  Cc: KY Srinivasan, Haiyang Zhang, Stephen Hemminger, Wei Liu,
	Dexuan Cui, Tianyu Lan, Long Li, linux-hyperv, linux-kernel

> > ---
> >  drivers/hv/vmbus_drv.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
> > index 12a2b37e87f30..65db5048b1763 100644
> > --- a/drivers/hv/vmbus_drv.c
> > +++ b/drivers/hv/vmbus_drv.c
> > @@ -2097,6 +2097,9 @@ int vmbus_device_register(struct hv_device
> > *child_device_obj)
> >  	child_device_obj->device.parent = &hv_acpi_dev->dev;
> >  	child_device_obj->device.release = vmbus_device_release;
> > 
> > +	child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
> > +	child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
> > +
> >  	/*
> >  	 * Register with the LDM. This will kick off the driver/device
> >  	 * binding...which will eventually call vmbus_match() and vmbus_probe()
> > @@ -2122,8 +2125,6 @@ int vmbus_device_register(struct hv_device
> > *child_device_obj)
> >  	}
> >  	hv_debug_add_dev_dir(child_device_obj);
> > 
> > -	child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
> > -	child_device_obj->device.dma_mask = &child_device_obj->dma_mask;
> >  	dma_set_mask(&child_device_obj->device, DMA_BIT_MASK(64));
> 
> Is there any reason to not move dma_set_mask() as well?  That call is
> closely related to the previous two lines, so it is unexpected to have
> them separated.

The only reason was "minimize diff"; sounds like I'll move it in v2.  ;-)

Thanks,
  Andrea 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-03-11 15:20 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-11 13:37 [PATCH] Drivers: hv: vmbus: Fix initialization of device object in vmbus_device_register() Andrea Parri (Microsoft)
2022-03-11 15:06 ` Michael Kelley (LINUX)
2022-03-11 15:19   ` Andrea Parri

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.