mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 13:34:10 +08:00
Drivers: hv: vmbus: Fix initialization of device object in vmbus_device_register()
Initialize the device's dma_{mask,parms} pointers and the device's
dma_mask value 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: 743b237c3a
("scsi: storvsc: Add Isolation VM support for storvsc driver")
Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/20220315141053.3223-1-parri.andrea@gmail.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
This commit is contained in:
parent
9f8b577f7b
commit
3a5469582c
@ -2103,6 +2103,10 @@ int vmbus_device_register(struct hv_device *child_device_obj)
|
|||||||
child_device_obj->device.parent = &hv_acpi_dev->dev;
|
child_device_obj->device.parent = &hv_acpi_dev->dev;
|
||||||
child_device_obj->device.release = vmbus_device_release;
|
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;
|
||||||
|
dma_set_mask(&child_device_obj->device, DMA_BIT_MASK(64));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register with the LDM. This will kick off the driver/device
|
* Register with the LDM. This will kick off the driver/device
|
||||||
* binding...which will eventually call vmbus_match() and vmbus_probe()
|
* binding...which will eventually call vmbus_match() and vmbus_probe()
|
||||||
@ -2128,9 +2132,6 @@ int vmbus_device_register(struct hv_device *child_device_obj)
|
|||||||
}
|
}
|
||||||
hv_debug_add_dev_dir(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;
|
return 0;
|
||||||
|
|
||||||
err_kset_unregister:
|
err_kset_unregister:
|
||||||
|
Loading…
Reference in New Issue
Block a user