Re: [PATCH AUTOSEL 6.2 05/16] s390/virtio: sort out physical vs virtual pointers usage

2023-03-14 Thread Sasha Levin

On Mon, Mar 06, 2023 at 11:26:40AM +0100, Nico Boehr wrote:

Hi Sasha, s390 maintainers,

Quoting Sasha Levin (2023-03-05 14:51:56)

From: Alexander Gordeev 

[ Upstream commit 5fc5b94a273655128159186c87662105db8afeb5 ]

This does not fix a real bug, since virtual addresses
are currently indentical to physical ones.


not sure if it is appropriate to pick for stable, since it does not fix a bug 
currently.

Alexander, Janosch, your opinion?


I'll drop it, thanks!

--
Thanks,
Sasha
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


[PATCH AUTOSEL 6.2 05/16] s390/virtio: sort out physical vs virtual pointers usage

2023-03-05 Thread Sasha Levin
From: Alexander Gordeev 

[ Upstream commit 5fc5b94a273655128159186c87662105db8afeb5 ]

This does not fix a real bug, since virtual addresses
are currently indentical to physical ones.

Reviewed-by: Nico Boehr 
Signed-off-by: Alexander Gordeev 
Signed-off-by: Janosch Frank 
Signed-off-by: Sasha Levin 
---
 drivers/s390/virtio/virtio_ccw.c | 46 +---
 1 file changed, 24 insertions(+), 22 deletions(-)

diff --git a/drivers/s390/virtio/virtio_ccw.c b/drivers/s390/virtio/virtio_ccw.c
index a10dbe632ef9b..954fc31b4bc74 100644
--- a/drivers/s390/virtio/virtio_ccw.c
+++ b/drivers/s390/virtio/virtio_ccw.c
@@ -363,7 +363,7 @@ static void virtio_ccw_drop_indicator(struct 
virtio_ccw_device *vcdev,
thinint_area->isc = VIRTIO_AIRQ_ISC;
ccw->cmd_code = CCW_CMD_SET_IND_ADAPTER;
ccw->count = sizeof(*thinint_area);
-   ccw->cda = (__u32)(unsigned long) thinint_area;
+   ccw->cda = (__u32)virt_to_phys(thinint_area);
} else {
/* payload is the address of the indicators */
indicatorp = ccw_device_dma_zalloc(vcdev->cdev,
@@ -373,7 +373,7 @@ static void virtio_ccw_drop_indicator(struct 
virtio_ccw_device *vcdev,
*indicatorp = 0;
ccw->cmd_code = CCW_CMD_SET_IND;
ccw->count = sizeof(indicators(vcdev));
-   ccw->cda = (__u32)(unsigned long) indicatorp;
+   ccw->cda = (__u32)virt_to_phys(indicatorp);
}
/* Deregister indicators from host. */
*indicators(vcdev) = 0;
@@ -417,7 +417,7 @@ static int virtio_ccw_read_vq_conf(struct virtio_ccw_device 
*vcdev,
ccw->cmd_code = CCW_CMD_READ_VQ_CONF;
ccw->flags = 0;
ccw->count = sizeof(struct vq_config_block);
-   ccw->cda = (__u32)(unsigned long)(&vcdev->dma_area->config_block);
+   ccw->cda = (__u32)virt_to_phys(&vcdev->dma_area->config_block);
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_VQ_CONF);
if (ret)
return ret;
@@ -454,7 +454,7 @@ static void virtio_ccw_del_vq(struct virtqueue *vq, struct 
ccw1 *ccw)
}
ccw->cmd_code = CCW_CMD_SET_VQ;
ccw->flags = 0;
-   ccw->cda = (__u32)(unsigned long)(info->info_block);
+   ccw->cda = (__u32)virt_to_phys(info->info_block);
ret = ccw_io_helper(vcdev, ccw,
VIRTIO_CCW_DOING_SET_VQ | index);
/*
@@ -556,7 +556,7 @@ static struct virtqueue *virtio_ccw_setup_vq(struct 
virtio_device *vdev,
}
ccw->cmd_code = CCW_CMD_SET_VQ;
ccw->flags = 0;
-   ccw->cda = (__u32)(unsigned long)(info->info_block);
+   ccw->cda = (__u32)virt_to_phys(info->info_block);
err = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_VQ | i);
if (err) {
dev_warn(&vcdev->cdev->dev, "SET_VQ failed\n");
@@ -590,6 +590,7 @@ static int virtio_ccw_register_adapter_ind(struct 
virtio_ccw_device *vcdev,
 {
int ret;
struct virtio_thinint_area *thinint_area = NULL;
+   unsigned long indicator_addr;
struct airq_info *info;
 
thinint_area = ccw_device_dma_zalloc(vcdev->cdev,
@@ -599,21 +600,22 @@ static int virtio_ccw_register_adapter_ind(struct 
virtio_ccw_device *vcdev,
goto out;
}
/* Try to get an indicator. */
-   thinint_area->indicator = get_airq_indicator(vqs, nvqs,
-&thinint_area->bit_nr,
-&vcdev->airq_info);
-   if (!thinint_area->indicator) {
+   indicator_addr = get_airq_indicator(vqs, nvqs,
+   &thinint_area->bit_nr,
+   &vcdev->airq_info);
+   if (!indicator_addr) {
ret = -ENOSPC;
goto out;
}
+   thinint_area->indicator = virt_to_phys((void *)indicator_addr);
info = vcdev->airq_info;
thinint_area->summary_indicator =
-   (unsigned long) get_summary_indicator(info);
+   virt_to_phys(get_summary_indicator(info));
thinint_area->isc = VIRTIO_AIRQ_ISC;
ccw->cmd_code = CCW_CMD_SET_IND_ADAPTER;
ccw->flags = CCW_FLAG_SLI;
ccw->count = sizeof(*thinint_area);
-   ccw->cda = (__u32)(unsigned long)thinint_area;
+   ccw->cda = (__u32)virt_to_phys(thinint_area);
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_IND_ADAPTER);
if (ret) {
if (ret == -EOPNOTSUPP) {
@@ -686,7 +688,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, 
unsigned nvqs,
ccw->cmd_code = CCW_CMD_SET_IND;
ccw->flags = 0;
ccw->count = sizeof(indicators(vcdev));
-   ccw->cda = (__u32)(unsigned long) indicatorp;
+   ccw->cda = (__u32)virt_to_phys(indicatorp);
ret = ccw_io_helper