mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
s390/virtio: sort out physical vs virtual pointers usage
This does not fix a real bug, since virtual addresses are currently indentical to physical ones. Reviewed-by: Nico Boehr <nrb@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
This commit is contained in:
parent
1abb32697a
commit
5fc5b94a27
@ -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(vcdev, ccw, VIRTIO_CCW_DOING_SET_IND);
|
||||
if (ret)
|
||||
goto out;
|
||||
@ -697,7 +699,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
|
||||
ccw->cmd_code = CCW_CMD_SET_CONF_IND;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(indicators2(vcdev));
|
||||
ccw->cda = (__u32)(unsigned long) indicatorp;
|
||||
ccw->cda = (__u32)virt_to_phys(indicatorp);
|
||||
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_SET_CONF_IND);
|
||||
if (ret)
|
||||
goto out;
|
||||
@ -759,7 +761,7 @@ static u64 virtio_ccw_get_features(struct virtio_device *vdev)
|
||||
ccw->cmd_code = CCW_CMD_READ_FEAT;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(*features);
|
||||
ccw->cda = (__u32)(unsigned long)features;
|
||||
ccw->cda = (__u32)virt_to_phys(features);
|
||||
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_FEAT);
|
||||
if (ret) {
|
||||
rc = 0;
|
||||
@ -776,7 +778,7 @@ static u64 virtio_ccw_get_features(struct virtio_device *vdev)
|
||||
ccw->cmd_code = CCW_CMD_READ_FEAT;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(*features);
|
||||
ccw->cda = (__u32)(unsigned long)features;
|
||||
ccw->cda = (__u32)virt_to_phys(features);
|
||||
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_FEAT);
|
||||
if (ret == 0)
|
||||
rc |= (u64)le32_to_cpu(features->features) << 32;
|
||||
@ -829,7 +831,7 @@ static int virtio_ccw_finalize_features(struct virtio_device *vdev)
|
||||
ccw->cmd_code = CCW_CMD_WRITE_FEAT;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(*features);
|
||||
ccw->cda = (__u32)(unsigned long)features;
|
||||
ccw->cda = (__u32)virt_to_phys(features);
|
||||
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_FEAT);
|
||||
if (ret)
|
||||
goto out_free;
|
||||
@ -843,7 +845,7 @@ static int virtio_ccw_finalize_features(struct virtio_device *vdev)
|
||||
ccw->cmd_code = CCW_CMD_WRITE_FEAT;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(*features);
|
||||
ccw->cda = (__u32)(unsigned long)features;
|
||||
ccw->cda = (__u32)virt_to_phys(features);
|
||||
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_FEAT);
|
||||
|
||||
out_free:
|
||||
@ -875,7 +877,7 @@ static void virtio_ccw_get_config(struct virtio_device *vdev,
|
||||
ccw->cmd_code = CCW_CMD_READ_CONF;
|
||||
ccw->flags = 0;
|
||||
ccw->count = offset + len;
|
||||
ccw->cda = (__u32)(unsigned long)config_area;
|
||||
ccw->cda = (__u32)virt_to_phys(config_area);
|
||||
ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_CONFIG);
|
||||
if (ret)
|
||||
goto out_free;
|
||||
@ -922,7 +924,7 @@ static void virtio_ccw_set_config(struct virtio_device *vdev,
|
||||
ccw->cmd_code = CCW_CMD_WRITE_CONF;
|
||||
ccw->flags = 0;
|
||||
ccw->count = offset + len;
|
||||
ccw->cda = (__u32)(unsigned long)config_area;
|
||||
ccw->cda = (__u32)virt_to_phys(config_area);
|
||||
ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_WRITE_CONFIG);
|
||||
|
||||
out_free:
|
||||
@ -946,7 +948,7 @@ static u8 virtio_ccw_get_status(struct virtio_device *vdev)
|
||||
ccw->cmd_code = CCW_CMD_READ_STATUS;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(vcdev->dma_area->status);
|
||||
ccw->cda = (__u32)(unsigned long)&vcdev->dma_area->status;
|
||||
ccw->cda = (__u32)virt_to_phys(&vcdev->dma_area->status);
|
||||
ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_STATUS);
|
||||
/*
|
||||
* If the channel program failed (should only happen if the device
|
||||
@ -975,7 +977,7 @@ static void virtio_ccw_set_status(struct virtio_device *vdev, u8 status)
|
||||
ccw->cmd_code = CCW_CMD_WRITE_STATUS;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(status);
|
||||
ccw->cda = (__u32)(unsigned long)&vcdev->dma_area->status;
|
||||
ccw->cda = (__u32)virt_to_phys(&vcdev->dma_area->status);
|
||||
/* We use ssch for setting the status which is a serializing
|
||||
* instruction that guarantees the memory writes have
|
||||
* completed before ssch.
|
||||
@ -1274,7 +1276,7 @@ static int virtio_ccw_set_transport_rev(struct virtio_ccw_device *vcdev)
|
||||
ccw->cmd_code = CCW_CMD_SET_VIRTIO_REV;
|
||||
ccw->flags = 0;
|
||||
ccw->count = sizeof(*rev);
|
||||
ccw->cda = (__u32)(unsigned long)rev;
|
||||
ccw->cda = (__u32)virt_to_phys(rev);
|
||||
|
||||
vcdev->revision = VIRTIO_CCW_REV_MAX;
|
||||
do {
|
||||
|
Loading…
Reference in New Issue
Block a user