mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
s390/virtio_ccw: Fix dma_parm pointer not set up
At least since commit334304ac2b
("dma-mapping: don't return errors from dma_set_max_seg_size") setting up device.dma_parms is basically mandated by the DMA API. As of now Channel (CCW) I/O in general does not utilize the DMA API, except for virtio. For virtio-ccw however the common virtio DMA infrastructure is such that most of the DMA stuff hinges on the virtio parent device, which is a CCW device. So lets set up the dma_parms pointer for the CCW parent device and hope for the best! Fixes:334304ac2b
("dma-mapping: don't return errors from dma_set_max_seg_size") Reported-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Eric Farman <farman@linux.ibm.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Tested-by: Marc Hartmayer <mhartmay@linux.ibm.com> Link: https://lore.kernel.org/r/20241007201030.204028-1-pasic@linux.ibm.com Signed-off-by: Halil Pasic <pasic@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
61997c1e94
commit
14c7579376
@ -58,6 +58,8 @@ struct virtio_ccw_device {
|
||||
struct virtio_device vdev;
|
||||
__u8 config[VIRTIO_CCW_CONFIG_SIZE];
|
||||
struct ccw_device *cdev;
|
||||
/* we make cdev->dev.dma_parms point to this */
|
||||
struct device_dma_parameters dma_parms;
|
||||
__u32 curr_io;
|
||||
int err;
|
||||
unsigned int revision; /* Transport revision */
|
||||
@ -1303,6 +1305,7 @@ static int virtio_ccw_offline(struct ccw_device *cdev)
|
||||
unregister_virtio_device(&vcdev->vdev);
|
||||
spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
|
||||
dev_set_drvdata(&cdev->dev, NULL);
|
||||
cdev->dev.dma_parms = NULL;
|
||||
spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);
|
||||
return 0;
|
||||
}
|
||||
@ -1366,6 +1369,7 @@ static int virtio_ccw_online(struct ccw_device *cdev)
|
||||
}
|
||||
vcdev->vdev.dev.parent = &cdev->dev;
|
||||
vcdev->cdev = cdev;
|
||||
cdev->dev.dma_parms = &vcdev->dma_parms;
|
||||
vcdev->dma_area = ccw_device_dma_zalloc(vcdev->cdev,
|
||||
sizeof(*vcdev->dma_area),
|
||||
&vcdev->dma_area_addr);
|
||||
|
Loading…
Reference in New Issue
Block a user