* [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
@ 2015-03-10 13:32 Cornelia Huck
2015-03-10 14:12 ` Michael S. Tsirkin
0 siblings, 1 reply; 13+ messages in thread
From: Cornelia Huck @ 2015-03-10 13:32 UTC (permalink / raw)
To: mst; +Cc: Cornelia Huck, qemu-devel
Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
feature checking helpers") introduced a helper __virtio_has_feature.
We don't want to use reserved identifiers, though, so let's
rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
to virtio_vdev_has_feature.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
hw/block/virtio-blk.c | 5 +++--
hw/char/virtio-serial-bus.c | 2 +-
hw/net/virtio-net.c | 22 +++++++++++-----------
hw/scsi/virtio-scsi.c | 8 ++++----
hw/virtio/dataplane/vring.c | 10 +++++-----
hw/virtio/virtio-balloon.c | 2 +-
hw/virtio/virtio.c | 8 ++++----
include/hw/virtio/virtio.h | 7 ++++---
8 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 1e5b918..9423d4a 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -758,10 +758,11 @@ static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status)
*
* s->blk would erroneously be placed in writethrough mode.
*/
- if (!virtio_has_feature(vdev, VIRTIO_BLK_F_CONFIG_WCE)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_BLK_F_CONFIG_WCE)) {
aio_context_acquire(blk_get_aio_context(s->blk));
blk_set_enable_write_cache(s->blk,
- virtio_has_feature(vdev, VIRTIO_BLK_F_WCE));
+ virtio_vdev_has_feature(vdev,
+ VIRTIO_BLK_F_WCE));
aio_context_release(blk_get_aio_context(s->blk));
}
}
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index 9a029d2..b820e2c 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -75,7 +75,7 @@ static VirtIOSerialPort *find_port_by_name(char *name)
static bool use_multiport(VirtIOSerial *vser)
{
VirtIODevice *vdev = VIRTIO_DEVICE(vser);
- return virtio_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT);
+ return virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT);
}
static size_t write_to_port(VirtIOSerialPort *port,
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 1187ab8..ec25db5 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -86,7 +86,7 @@ static void virtio_net_set_config(VirtIODevice *vdev, const uint8_t *config)
memcpy(&netcfg, config, n->config_size);
- if (!virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_MAC_ADDR) &&
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_MAC_ADDR) &&
memcmp(netcfg.mac, n->mac, ETH_ALEN)) {
memcpy(n->mac, netcfg.mac, ETH_ALEN);
qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac);
@@ -305,7 +305,7 @@ static RxFilterInfo *virtio_net_query_rxfilter(NetClientState *nc)
info->multicast_table = str_list;
info->vlan_table = get_vlan_table(n);
- if (!virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VLAN)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VLAN)) {
info->vlan = RX_STATE_ALL;
} else if (!info->vlan_table) {
info->vlan = RX_STATE_NONE;
@@ -520,11 +520,11 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features)
int i;
virtio_net_set_multiqueue(n,
- __virtio_has_feature(features, VIRTIO_NET_F_MQ));
+ virtio_has_feature(features, VIRTIO_NET_F_MQ));
virtio_net_set_mrg_rx_bufs(n,
- __virtio_has_feature(features,
- VIRTIO_NET_F_MRG_RXBUF));
+ virtio_has_feature(features,
+ VIRTIO_NET_F_MRG_RXBUF));
if (n->has_vnet_hdr) {
n->curr_guest_offloads =
@@ -541,7 +541,7 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features)
vhost_net_ack_features(get_vhost_net(nc->peer), features);
}
- if (__virtio_has_feature(features, VIRTIO_NET_F_CTRL_VLAN)) {
+ if (virtio_has_feature(features, VIRTIO_NET_F_CTRL_VLAN)) {
memset(n->vlans, 0, MAX_VLAN >> 3);
} else {
memset(n->vlans, 0xff, MAX_VLAN >> 3);
@@ -588,7 +588,7 @@ static int virtio_net_handle_offloads(VirtIONet *n, uint8_t cmd,
uint64_t offloads;
size_t s;
- if (!virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
return VIRTIO_NET_ERR;
}
@@ -1381,7 +1381,7 @@ static void virtio_net_save_device(VirtIODevice *vdev, QEMUFile *f)
}
}
- if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
qemu_put_be64(f, n->curr_guest_offloads);
}
}
@@ -1489,7 +1489,7 @@ static int virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f,
}
}
- if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
n->curr_guest_offloads = qemu_get_be64(f);
} else {
n->curr_guest_offloads = virtio_net_supported_guest_offloads(n);
@@ -1516,8 +1516,8 @@ static int virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f,
qemu_get_subqueue(n->nic, i)->link_down = link_down;
}
- if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_ANNOUNCE) &&
- virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_GUEST_ANNOUNCE) &&
+ virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ)) {
n->announce_counter = SELF_ANNOUNCE_ROUNDS;
timer_mod(n->announce_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL));
}
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index cfb52e8..ca36cfe 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -145,7 +145,7 @@ static int virtio_scsi_parse_req(VirtIOSCSIReq *req,
*
* TODO: always disable this workaround for virtio 1.0 devices.
*/
- if (!virtio_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) {
req_size = req->elem.out_sg[0].iov_len;
resp_size = req->elem.in_sg[0].iov_len;
}
@@ -745,7 +745,7 @@ static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense)
VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
VirtIODevice *vdev = VIRTIO_DEVICE(s);
- if (virtio_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) &&
+ if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) &&
dev->type != TYPE_ROM) {
virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE,
sense.asc | (sense.ascq << 8));
@@ -769,7 +769,7 @@ static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev,
aio_context_release(s->ctx);
}
- if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
virtio_scsi_push_event(s, sd,
VIRTIO_SCSI_T_TRANSPORT_RESET,
VIRTIO_SCSI_EVT_RESET_RESCAN);
@@ -783,7 +783,7 @@ static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev,
VirtIOSCSI *s = VIRTIO_SCSI(vdev);
SCSIDevice *sd = SCSI_DEVICE(dev);
- if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
virtio_scsi_push_event(s, sd,
VIRTIO_SCSI_T_TRANSPORT_RESET,
VIRTIO_SCSI_EVT_RESET_REMOVED);
diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c
index 5c7b8c2..023ec83 100644
--- a/hw/virtio/dataplane/vring.c
+++ b/hw/virtio/dataplane/vring.c
@@ -105,7 +105,7 @@ void vring_teardown(Vring *vring, VirtIODevice *vdev, int n)
/* Disable guest->host notifies */
void vring_disable_notification(VirtIODevice *vdev, Vring *vring)
{
- if (!virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
vring_set_used_flags(vdev, vring, VRING_USED_F_NO_NOTIFY);
}
}
@@ -116,7 +116,7 @@ void vring_disable_notification(VirtIODevice *vdev, Vring *vring)
*/
bool vring_enable_notification(VirtIODevice *vdev, Vring *vring)
{
- if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
vring_avail_event(&vring->vr) = vring->vr.avail->idx;
} else {
vring_clear_used_flags(vdev, vring, VRING_USED_F_NO_NOTIFY);
@@ -135,12 +135,12 @@ bool vring_should_notify(VirtIODevice *vdev, Vring *vring)
* interrupts. */
smp_mb();
- if (virtio_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
+ if (virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
unlikely(!vring_more_avail(vdev, vring))) {
return true;
}
- if (!virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
return !(vring_get_avail_flags(vdev, vring) &
VRING_AVAIL_F_NO_INTERRUPT);
}
@@ -401,7 +401,7 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
/* On success, increment avail index. */
vring->last_avail_idx++;
- if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
vring_avail_event(&vring->vr) = vring->last_avail_idx;
}
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index 95b0643..912609c 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -70,7 +70,7 @@ static inline void reset_stats(VirtIOBalloon *dev)
static bool balloon_stats_supported(const VirtIOBalloon *s)
{
VirtIODevice *vdev = VIRTIO_DEVICE(s);
- return virtio_has_feature(vdev, VIRTIO_BALLOON_F_STATS_VQ);
+ return virtio_vdev_has_feature(vdev, VIRTIO_BALLOON_F_STATS_VQ);
}
static bool balloon_stats_enabled(const VirtIOBalloon *s)
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 3c6e430..a17920f 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -217,7 +217,7 @@ static inline void vring_set_avail_event(VirtQueue *vq, uint16_t val)
void virtio_queue_set_notification(VirtQueue *vq, int enable)
{
vq->notification = enable;
- if (virtio_has_feature(vq->vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (virtio_vdev_has_feature(vq->vdev, VIRTIO_RING_F_EVENT_IDX)) {
vring_set_avail_event(vq, vring_avail_idx(vq));
} else if (enable) {
vring_used_flags_unset_bit(vq, VRING_USED_F_NO_NOTIFY);
@@ -468,7 +468,7 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
max = vq->vring.num;
i = head = virtqueue_get_head(vq, vq->last_avail_idx++);
- if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
vring_set_avail_event(vq, vq->last_avail_idx);
}
@@ -826,12 +826,12 @@ static bool vring_notify(VirtIODevice *vdev, VirtQueue *vq)
/* We need to expose used array entries before checking used event. */
smp_mb();
/* Always notify when queue is empty (when feature acknowledge) */
- if (virtio_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
+ if (virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
!vq->inuse && vring_avail_idx(vq) == vq->last_avail_idx) {
return true;
}
- if (!virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
+ if (!virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
return !(vring_avail_flags(vq) & VRING_AVAIL_F_NO_INTERRUPT);
}
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index d95f8b6..28ffdd8 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -231,15 +231,16 @@ static inline void virtio_clear_feature(uint32_t *features, unsigned int fbit)
*features &= ~(1 << fbit);
}
-static inline bool __virtio_has_feature(uint32_t features, unsigned int fbit)
+static inline bool virtio_has_feature(uint32_t features, unsigned int fbit)
{
assert(fbit < 32);
return !!(features & (1 << fbit));
}
-static inline bool virtio_has_feature(VirtIODevice *vdev, unsigned int fbit)
+static inline bool virtio_vdev_has_feature(VirtIODevice *vdev,
+ unsigned int fbit)
{
- return __virtio_has_feature(vdev->guest_features, fbit);
+ return virtio_has_feature(vdev->guest_features, fbit);
}
static inline bool virtio_is_big_endian(VirtIODevice *vdev)
--
2.3.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
2015-03-10 13:32 [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers Cornelia Huck
@ 2015-03-10 14:12 ` Michael S. Tsirkin
2015-03-10 14:22 ` Cornelia Huck
0 siblings, 1 reply; 13+ messages in thread
From: Michael S. Tsirkin @ 2015-03-10 14:12 UTC (permalink / raw)
To: Cornelia Huck; +Cc: qemu-devel
On Tue, Mar 10, 2015 at 02:32:15PM +0100, Cornelia Huck wrote:
> Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
> feature checking helpers") introduced a helper __virtio_has_feature.
> We don't want to use reserved identifiers, though, so let's
> rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
> to virtio_vdev_has_feature.
I don't think it's urgent to fix in master.
Let's focus on getting virtio 1.0 branch merged instead.
>
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> ---
> hw/block/virtio-blk.c | 5 +++--
> hw/char/virtio-serial-bus.c | 2 +-
> hw/net/virtio-net.c | 22 +++++++++++-----------
> hw/scsi/virtio-scsi.c | 8 ++++----
> hw/virtio/dataplane/vring.c | 10 +++++-----
> hw/virtio/virtio-balloon.c | 2 +-
> hw/virtio/virtio.c | 8 ++++----
> include/hw/virtio/virtio.h | 7 ++++---
> 8 files changed, 33 insertions(+), 31 deletions(-)
>
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index 1e5b918..9423d4a 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -758,10 +758,11 @@ static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status)
> *
> * s->blk would erroneously be placed in writethrough mode.
> */
> - if (!virtio_has_feature(vdev, VIRTIO_BLK_F_CONFIG_WCE)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_BLK_F_CONFIG_WCE)) {
> aio_context_acquire(blk_get_aio_context(s->blk));
> blk_set_enable_write_cache(s->blk,
> - virtio_has_feature(vdev, VIRTIO_BLK_F_WCE));
> + virtio_vdev_has_feature(vdev,
> + VIRTIO_BLK_F_WCE));
> aio_context_release(blk_get_aio_context(s->blk));
> }
> }
> diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> index 9a029d2..b820e2c 100644
> --- a/hw/char/virtio-serial-bus.c
> +++ b/hw/char/virtio-serial-bus.c
> @@ -75,7 +75,7 @@ static VirtIOSerialPort *find_port_by_name(char *name)
> static bool use_multiport(VirtIOSerial *vser)
> {
> VirtIODevice *vdev = VIRTIO_DEVICE(vser);
> - return virtio_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT);
> + return virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT);
> }
>
> static size_t write_to_port(VirtIOSerialPort *port,
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index 1187ab8..ec25db5 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -86,7 +86,7 @@ static void virtio_net_set_config(VirtIODevice *vdev, const uint8_t *config)
>
> memcpy(&netcfg, config, n->config_size);
>
> - if (!virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_MAC_ADDR) &&
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_MAC_ADDR) &&
> memcmp(netcfg.mac, n->mac, ETH_ALEN)) {
> memcpy(n->mac, netcfg.mac, ETH_ALEN);
> qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac);
> @@ -305,7 +305,7 @@ static RxFilterInfo *virtio_net_query_rxfilter(NetClientState *nc)
> info->multicast_table = str_list;
> info->vlan_table = get_vlan_table(n);
>
> - if (!virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VLAN)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VLAN)) {
> info->vlan = RX_STATE_ALL;
> } else if (!info->vlan_table) {
> info->vlan = RX_STATE_NONE;
> @@ -520,11 +520,11 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features)
> int i;
>
> virtio_net_set_multiqueue(n,
> - __virtio_has_feature(features, VIRTIO_NET_F_MQ));
> + virtio_has_feature(features, VIRTIO_NET_F_MQ));
>
> virtio_net_set_mrg_rx_bufs(n,
> - __virtio_has_feature(features,
> - VIRTIO_NET_F_MRG_RXBUF));
> + virtio_has_feature(features,
> + VIRTIO_NET_F_MRG_RXBUF));
>
> if (n->has_vnet_hdr) {
> n->curr_guest_offloads =
> @@ -541,7 +541,7 @@ static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features)
> vhost_net_ack_features(get_vhost_net(nc->peer), features);
> }
>
> - if (__virtio_has_feature(features, VIRTIO_NET_F_CTRL_VLAN)) {
> + if (virtio_has_feature(features, VIRTIO_NET_F_CTRL_VLAN)) {
> memset(n->vlans, 0, MAX_VLAN >> 3);
> } else {
> memset(n->vlans, 0xff, MAX_VLAN >> 3);
> @@ -588,7 +588,7 @@ static int virtio_net_handle_offloads(VirtIONet *n, uint8_t cmd,
> uint64_t offloads;
> size_t s;
>
> - if (!virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
> return VIRTIO_NET_ERR;
> }
>
> @@ -1381,7 +1381,7 @@ static void virtio_net_save_device(VirtIODevice *vdev, QEMUFile *f)
> }
> }
>
> - if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
> qemu_put_be64(f, n->curr_guest_offloads);
> }
> }
> @@ -1489,7 +1489,7 @@ static int virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f,
> }
> }
>
> - if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) {
> n->curr_guest_offloads = qemu_get_be64(f);
> } else {
> n->curr_guest_offloads = virtio_net_supported_guest_offloads(n);
> @@ -1516,8 +1516,8 @@ static int virtio_net_load_device(VirtIODevice *vdev, QEMUFile *f,
> qemu_get_subqueue(n->nic, i)->link_down = link_down;
> }
>
> - if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_ANNOUNCE) &&
> - virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_GUEST_ANNOUNCE) &&
> + virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ)) {
> n->announce_counter = SELF_ANNOUNCE_ROUNDS;
> timer_mod(n->announce_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL));
> }
> diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> index cfb52e8..ca36cfe 100644
> --- a/hw/scsi/virtio-scsi.c
> +++ b/hw/scsi/virtio-scsi.c
> @@ -145,7 +145,7 @@ static int virtio_scsi_parse_req(VirtIOSCSIReq *req,
> *
> * TODO: always disable this workaround for virtio 1.0 devices.
> */
> - if (!virtio_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_F_ANY_LAYOUT)) {
> req_size = req->elem.out_sg[0].iov_len;
> resp_size = req->elem.in_sg[0].iov_len;
> }
> @@ -745,7 +745,7 @@ static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense)
> VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
> VirtIODevice *vdev = VIRTIO_DEVICE(s);
>
> - if (virtio_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) &&
> + if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_CHANGE) &&
> dev->type != TYPE_ROM) {
> virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE,
> sense.asc | (sense.ascq << 8));
> @@ -769,7 +769,7 @@ static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev,
> aio_context_release(s->ctx);
> }
>
> - if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
> virtio_scsi_push_event(s, sd,
> VIRTIO_SCSI_T_TRANSPORT_RESET,
> VIRTIO_SCSI_EVT_RESET_RESCAN);
> @@ -783,7 +783,7 @@ static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev,
> VirtIOSCSI *s = VIRTIO_SCSI(vdev);
> SCSIDevice *sd = SCSI_DEVICE(dev);
>
> - if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
> virtio_scsi_push_event(s, sd,
> VIRTIO_SCSI_T_TRANSPORT_RESET,
> VIRTIO_SCSI_EVT_RESET_REMOVED);
> diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c
> index 5c7b8c2..023ec83 100644
> --- a/hw/virtio/dataplane/vring.c
> +++ b/hw/virtio/dataplane/vring.c
> @@ -105,7 +105,7 @@ void vring_teardown(Vring *vring, VirtIODevice *vdev, int n)
> /* Disable guest->host notifies */
> void vring_disable_notification(VirtIODevice *vdev, Vring *vring)
> {
> - if (!virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> vring_set_used_flags(vdev, vring, VRING_USED_F_NO_NOTIFY);
> }
> }
> @@ -116,7 +116,7 @@ void vring_disable_notification(VirtIODevice *vdev, Vring *vring)
> */
> bool vring_enable_notification(VirtIODevice *vdev, Vring *vring)
> {
> - if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> vring_avail_event(&vring->vr) = vring->vr.avail->idx;
> } else {
> vring_clear_used_flags(vdev, vring, VRING_USED_F_NO_NOTIFY);
> @@ -135,12 +135,12 @@ bool vring_should_notify(VirtIODevice *vdev, Vring *vring)
> * interrupts. */
> smp_mb();
>
> - if (virtio_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
> + if (virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
> unlikely(!vring_more_avail(vdev, vring))) {
> return true;
> }
>
> - if (!virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> return !(vring_get_avail_flags(vdev, vring) &
> VRING_AVAIL_F_NO_INTERRUPT);
> }
> @@ -401,7 +401,7 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
>
> /* On success, increment avail index. */
> vring->last_avail_idx++;
> - if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> vring_avail_event(&vring->vr) = vring->last_avail_idx;
> }
>
> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
> index 95b0643..912609c 100644
> --- a/hw/virtio/virtio-balloon.c
> +++ b/hw/virtio/virtio-balloon.c
> @@ -70,7 +70,7 @@ static inline void reset_stats(VirtIOBalloon *dev)
> static bool balloon_stats_supported(const VirtIOBalloon *s)
> {
> VirtIODevice *vdev = VIRTIO_DEVICE(s);
> - return virtio_has_feature(vdev, VIRTIO_BALLOON_F_STATS_VQ);
> + return virtio_vdev_has_feature(vdev, VIRTIO_BALLOON_F_STATS_VQ);
> }
>
> static bool balloon_stats_enabled(const VirtIOBalloon *s)
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 3c6e430..a17920f 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -217,7 +217,7 @@ static inline void vring_set_avail_event(VirtQueue *vq, uint16_t val)
> void virtio_queue_set_notification(VirtQueue *vq, int enable)
> {
> vq->notification = enable;
> - if (virtio_has_feature(vq->vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (virtio_vdev_has_feature(vq->vdev, VIRTIO_RING_F_EVENT_IDX)) {
> vring_set_avail_event(vq, vring_avail_idx(vq));
> } else if (enable) {
> vring_used_flags_unset_bit(vq, VRING_USED_F_NO_NOTIFY);
> @@ -468,7 +468,7 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
> max = vq->vring.num;
>
> i = head = virtqueue_get_head(vq, vq->last_avail_idx++);
> - if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> vring_set_avail_event(vq, vq->last_avail_idx);
> }
>
> @@ -826,12 +826,12 @@ static bool vring_notify(VirtIODevice *vdev, VirtQueue *vq)
> /* We need to expose used array entries before checking used event. */
> smp_mb();
> /* Always notify when queue is empty (when feature acknowledge) */
> - if (virtio_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
> + if (virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFY_ON_EMPTY) &&
> !vq->inuse && vring_avail_idx(vq) == vq->last_avail_idx) {
> return true;
> }
>
> - if (!virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> + if (!virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
> return !(vring_avail_flags(vq) & VRING_AVAIL_F_NO_INTERRUPT);
> }
>
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index d95f8b6..28ffdd8 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -231,15 +231,16 @@ static inline void virtio_clear_feature(uint32_t *features, unsigned int fbit)
> *features &= ~(1 << fbit);
> }
>
> -static inline bool __virtio_has_feature(uint32_t features, unsigned int fbit)
> +static inline bool virtio_has_feature(uint32_t features, unsigned int fbit)
> {
> assert(fbit < 32);
> return !!(features & (1 << fbit));
> }
>
> -static inline bool virtio_has_feature(VirtIODevice *vdev, unsigned int fbit)
> +static inline bool virtio_vdev_has_feature(VirtIODevice *vdev,
> + unsigned int fbit)
> {
> - return __virtio_has_feature(vdev->guest_features, fbit);
> + return virtio_has_feature(vdev->guest_features, fbit);
> }
>
> static inline bool virtio_is_big_endian(VirtIODevice *vdev)
> --
> 2.3.2
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
2015-03-10 14:12 ` Michael S. Tsirkin
@ 2015-03-10 14:22 ` Cornelia Huck
2015-03-10 14:27 ` Michael S. Tsirkin
0 siblings, 1 reply; 13+ messages in thread
From: Cornelia Huck @ 2015-03-10 14:22 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: qemu-devel
On Tue, 10 Mar 2015 15:12:14 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Tue, Mar 10, 2015 at 02:32:15PM +0100, Cornelia Huck wrote:
> > Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
> > feature checking helpers") introduced a helper __virtio_has_feature.
> > We don't want to use reserved identifiers, though, so let's
> > rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
> > to virtio_vdev_has_feature.
>
> I don't think it's urgent to fix in master.
> Let's focus on getting virtio 1.0 branch merged instead.
I stumbled over this actually when trying to update my virtio-1 branch.
I already did that change there (as promised in
<20141212110701.0c6d879b.cornelia.huck@de.ibm.com>), but it got lost
somewhere in my moving chaos.
What's the status of your virtio-1.0 branch? Would it be worthwile for
me to rebase on top of it so I can figure out which changes I have not
yet sent out?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
2015-03-10 14:22 ` Cornelia Huck
@ 2015-03-10 14:27 ` Michael S. Tsirkin
2015-03-10 16:03 ` Cornelia Huck
0 siblings, 1 reply; 13+ messages in thread
From: Michael S. Tsirkin @ 2015-03-10 14:27 UTC (permalink / raw)
To: Cornelia Huck; +Cc: qemu-devel
On Tue, Mar 10, 2015 at 03:22:29PM +0100, Cornelia Huck wrote:
> On Tue, 10 Mar 2015 15:12:14 +0100
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
>
> > On Tue, Mar 10, 2015 at 02:32:15PM +0100, Cornelia Huck wrote:
> > > Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
> > > feature checking helpers") introduced a helper __virtio_has_feature.
> > > We don't want to use reserved identifiers, though, so let's
> > > rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
> > > to virtio_vdev_has_feature.
> >
> > I don't think it's urgent to fix in master.
> > Let's focus on getting virtio 1.0 branch merged instead.
>
> I stumbled over this actually when trying to update my virtio-1 branch.
> I already did that change there (as promised in
> <20141212110701.0c6d879b.cornelia.huck@de.ibm.com>), but it got lost
> somewhere in my moving chaos.
>
> What's the status of your virtio-1.0 branch?
virtio pci works there too now, so I started looking at upstreaming
stuff from that branch. Already did some.
> Would it be worthwile for
> me to rebase on top of it so I can figure out which changes I have not
> yet sent out?
Absolutely.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
2015-03-10 14:27 ` Michael S. Tsirkin
@ 2015-03-10 16:03 ` Cornelia Huck
2015-03-10 16:34 ` Michael S. Tsirkin
0 siblings, 1 reply; 13+ messages in thread
From: Cornelia Huck @ 2015-03-10 16:03 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: qemu-devel
On Tue, 10 Mar 2015 15:27:24 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Tue, Mar 10, 2015 at 03:22:29PM +0100, Cornelia Huck wrote:
> > On Tue, 10 Mar 2015 15:12:14 +0100
> > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> >
> > > On Tue, Mar 10, 2015 at 02:32:15PM +0100, Cornelia Huck wrote:
> > > > Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
> > > > feature checking helpers") introduced a helper __virtio_has_feature.
> > > > We don't want to use reserved identifiers, though, so let's
> > > > rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
> > > > to virtio_vdev_has_feature.
> > >
> > > I don't think it's urgent to fix in master.
> > > Let's focus on getting virtio 1.0 branch merged instead.
> >
> > I stumbled over this actually when trying to update my virtio-1 branch.
> > I already did that change there (as promised in
> > <20141212110701.0c6d879b.cornelia.huck@de.ibm.com>), but it got lost
> > somewhere in my moving chaos.
> >
> > What's the status of your virtio-1.0 branch?
>
> virtio pci works there too now, so I started looking at upstreaming
> stuff from that branch. Already did some.
>
> > Would it be worthwile for
> > me to rebase on top of it so I can figure out which changes I have not
> > yet sent out?
>
> Absolutely.
OK, it's actually not that much:
- this change :)
- All ccw accesses are BE (see
<20150121133922.1b3e7ceb.cornelia.huck@de.ibm.com>). I'll do two
patches: One for the existing ccws which will go via my tree and one
for the new set-revision ccw which should be squashed into that patch.
- Use legacy/non-legacy feature bit getters instead of
revision-specific ones (see
<20150130151049.2e4c5331.cornelia.huck@de.ibm.com>). Should probably
replace the existing patches introducing get_features_rev and using it
in virtio-blk.
Also, it seems there are some r-bs that had been given for my patches
that are missing on your branch.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
2015-03-10 16:03 ` Cornelia Huck
@ 2015-03-10 16:34 ` Michael S. Tsirkin
2015-03-10 17:05 ` Cornelia Huck
0 siblings, 1 reply; 13+ messages in thread
From: Michael S. Tsirkin @ 2015-03-10 16:34 UTC (permalink / raw)
To: Cornelia Huck; +Cc: qemu-devel
On Tue, Mar 10, 2015 at 05:03:47PM +0100, Cornelia Huck wrote:
> On Tue, 10 Mar 2015 15:27:24 +0100
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
>
> > On Tue, Mar 10, 2015 at 03:22:29PM +0100, Cornelia Huck wrote:
> > > On Tue, 10 Mar 2015 15:12:14 +0100
> > > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > >
> > > > On Tue, Mar 10, 2015 at 02:32:15PM +0100, Cornelia Huck wrote:
> > > > > Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
> > > > > feature checking helpers") introduced a helper __virtio_has_feature.
> > > > > We don't want to use reserved identifiers, though, so let's
> > > > > rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
> > > > > to virtio_vdev_has_feature.
> > > >
> > > > I don't think it's urgent to fix in master.
> > > > Let's focus on getting virtio 1.0 branch merged instead.
> > >
> > > I stumbled over this actually when trying to update my virtio-1 branch.
> > > I already did that change there (as promised in
> > > <20141212110701.0c6d879b.cornelia.huck@de.ibm.com>), but it got lost
> > > somewhere in my moving chaos.
> > >
> > > What's the status of your virtio-1.0 branch?
> >
> > virtio pci works there too now, so I started looking at upstreaming
> > stuff from that branch. Already did some.
> >
> > > Would it be worthwile for
> > > me to rebase on top of it so I can figure out which changes I have not
> > > yet sent out?
> >
> > Absolutely.
>
> OK, it's actually not that much:
>
> - this change :)
> - All ccw accesses are BE (see
> <20150121133922.1b3e7ceb.cornelia.huck@de.ibm.com>). I'll do two
> patches: One for the existing ccws which will go via my tree and one
> for the new set-revision ccw which should be squashed into that patch.
Will rebasing virtio-1.0 on top of master after your patch
is upstream do the trick as well?
> - Use legacy/non-legacy feature bit getters instead of
> revision-specific ones (see
> <20150130151049.2e4c5331.cornelia.huck@de.ibm.com>). Should probably
> replace the existing patches introducing get_features_rev and using it
> in virtio-blk.
Right, but for that, let's get it all in working order using patches on
top, first. Then, re-split logically.
> Also, it seems there are some r-bs that had been given for my patches
> that are missing on your branch.
I might have missed some - can you hunt up the msg ids?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers
2015-03-10 16:34 ` Michael S. Tsirkin
@ 2015-03-10 17:05 ` Cornelia Huck
2015-03-10 17:22 ` [Qemu-devel] [PATCH] virtio: legacy features callback Cornelia Huck
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: Cornelia Huck @ 2015-03-10 17:05 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: qemu-devel
On Tue, 10 Mar 2015 17:34:27 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Tue, Mar 10, 2015 at 05:03:47PM +0100, Cornelia Huck wrote:
> > On Tue, 10 Mar 2015 15:27:24 +0100
> > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> >
> > > On Tue, Mar 10, 2015 at 03:22:29PM +0100, Cornelia Huck wrote:
> > > > On Tue, 10 Mar 2015 15:12:14 +0100
> > > > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > >
> > > > > On Tue, Mar 10, 2015 at 02:32:15PM +0100, Cornelia Huck wrote:
> > > > > > Commit ef546f1275f6563e8934dd5e338d29d9f9909ca6 ("virtio: add
> > > > > > feature checking helpers") introduced a helper __virtio_has_feature.
> > > > > > We don't want to use reserved identifiers, though, so let's
> > > > > > rename __virtio_has_feature to virtio_has_feature and virtio_has_feature
> > > > > > to virtio_vdev_has_feature.
> > > > >
> > > > > I don't think it's urgent to fix in master.
> > > > > Let's focus on getting virtio 1.0 branch merged instead.
> > > >
> > > > I stumbled over this actually when trying to update my virtio-1 branch.
> > > > I already did that change there (as promised in
> > > > <20141212110701.0c6d879b.cornelia.huck@de.ibm.com>), but it got lost
> > > > somewhere in my moving chaos.
> > > >
> > > > What's the status of your virtio-1.0 branch?
> > >
> > > virtio pci works there too now, so I started looking at upstreaming
> > > stuff from that branch. Already did some.
> > >
> > > > Would it be worthwile for
> > > > me to rebase on top of it so I can figure out which changes I have not
> > > > yet sent out?
> > >
> > > Absolutely.
> >
> > OK, it's actually not that much:
> >
> > - this change :)
> > - All ccw accesses are BE (see
> > <20150121133922.1b3e7ceb.cornelia.huck@de.ibm.com>). I'll do two
> > patches: One for the existing ccws which will go via my tree and one
> > for the new set-revision ccw which should be squashed into that patch.
>
> Will rebasing virtio-1.0 on top of master after your patch
> is upstream do the trick as well?
set-revision needs to merge the change, I did not introduce generic
helpers.
>
> > - Use legacy/non-legacy feature bit getters instead of
> > revision-specific ones (see
> > <20150130151049.2e4c5331.cornelia.huck@de.ibm.com>). Should probably
> > replace the existing patches introducing get_features_rev and using it
> > in virtio-blk.
>
> Right, but for that, let's get it all in working order using patches on
> top, first. Then, re-split logically.
I'll prepare a patch for review.
>
> > Also, it seems there are some r-bs that had been given for my patches
> > that are missing on your branch.
>
> I might have missed some - can you hunt up the msg ids?
There are at least:
<20150120110021.GH17631@stefanha-thinkpad.redhat.com>
<20150120111947.GM17631@stefanha-thinkpad.redhat.com>
<20150120111555.GL17631@stefanha-thinkpad.redhat.com>
<20141212122547.511baafd@oc7435384737.ibm.com>
<20150122021522.GK27371@voom.fritz.box>
<20150120110603.GI17631@stefanha-thinkpad.redhat.com>
<20150120102936.GE17631@stefanha-thinkpad.redhat.com>
...and some for the virtio patches that are already upstream :(
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH] virtio: legacy features callback
2015-03-10 17:05 ` Cornelia Huck
@ 2015-03-10 17:22 ` Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 0/2] virtio-ccw: be accesses Cornelia Huck
` (2 subsequent siblings)
3 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2015-03-10 17:22 UTC (permalink / raw)
To: mst; +Cc: Cornelia Huck, qemu-devel
Use a "legacy features" instead of a "revision specific" callback.
Updates "virtio: support revision-specific features" and
"virtio-blk: revision specific feature bits" as currently in
git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git virtio-1.0
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
hw/9pfs/virtio-9p-device.c | 5 +++--
hw/block/virtio-blk.c | 14 ++++----------
hw/char/virtio-serial-bus.c | 22 +++++++++++++++++-----
hw/net/virtio-net.c | 31 +++++++++++++++++++++++++++----
hw/s390x/s390-virtio-bus.c | 4 ++--
hw/s390x/virtio-ccw.c | 12 ++++++------
hw/s390x/virtio-ccw.h | 4 ++--
hw/scsi/virtio-scsi.c | 8 ++++++++
hw/virtio/virtio-balloon.c | 5 +++--
hw/virtio/virtio-bus.c | 28 ++++++++++++++++++----------
hw/virtio/virtio-mmio.c | 4 ++--
hw/virtio/virtio-pci.c | 4 ++--
hw/virtio/virtio-rng.c | 7 +++++++
hw/virtio/virtio.c | 12 ++++++++++++
include/hw/virtio/virtio-bus.h | 5 ++---
include/hw/virtio/virtio.h | 6 +++---
16 files changed, 118 insertions(+), 53 deletions(-)
diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c
index 60f9ff9..5f0aa99 100644
--- a/hw/9pfs/virtio-9p-device.c
+++ b/hw/9pfs/virtio-9p-device.c
@@ -21,7 +21,8 @@
#include "virtio-9p-coth.h"
#include "hw/virtio/virtio-access.h"
-static uint64_t virtio_9p_get_features(VirtIODevice *vdev, uint64_t features)
+static uint64_t virtio_9p_get_features_legacy(VirtIODevice *vdev,
+ uint64_t features)
{
virtio_add_feature(&features, VIRTIO_9P_MOUNT_TAG);
return features;
@@ -152,7 +153,7 @@ static void virtio_9p_class_init(ObjectClass *klass, void *data)
dc->props = virtio_9p_properties;
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
vdc->realize = virtio_9p_device_realize;
- vdc->get_features = virtio_9p_get_features;
+ vdc->get_features_legacy = virtio_9p_get_features_legacy;
vdc->get_config = virtio_9p_get_config;
}
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index fdc236a..f8abf40 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -564,7 +564,8 @@ static void virtio_blk_set_config(VirtIODevice *vdev, const uint8_t *config)
aio_context_release(blk_get_aio_context(s->blk));
}
-static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features)
+static uint64_t virtio_blk_get_features_legacy(VirtIODevice *vdev,
+ uint64_t features)
{
VirtIOBlock *s = VIRTIO_BLK(vdev);
@@ -587,15 +588,8 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features)
return features;
}
-static uint64_t virtio_blk_get_features_rev(VirtIODevice *vdev,
- uint64_t features,
- unsigned int revision)
+static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features)
{
- if (revision == 0) {
- /* legacy */
- virtio_clear_feature(&features, VIRTIO_F_VERSION_1);
- return virtio_blk_get_features(vdev, features);
- }
/* virtio 1.0 or later */
virtio_clear_feature(&features, VIRTIO_BLK_F_SCSI);
virtio_clear_feature(&features, VIRTIO_BLK_F_CONFIG_WCE);
@@ -839,7 +833,7 @@ static void virtio_blk_class_init(ObjectClass *klass, void *data)
vdc->get_config = virtio_blk_update_config;
vdc->set_config = virtio_blk_set_config;
vdc->get_features = virtio_blk_get_features;
- vdc->get_features_rev = virtio_blk_get_features_rev;
+ vdc->get_features_legacy = virtio_blk_get_features_legacy;
vdc->set_status = virtio_blk_set_status;
vdc->reset = virtio_blk_reset;
vdc->save = virtio_blk_save_device;
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index 2d2ed9c..7119f97 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -467,18 +467,29 @@ static void handle_input(VirtIODevice *vdev, VirtQueue *vq)
{
}
-static uint64_t get_features(VirtIODevice *vdev, uint64_t features)
+static uint64_t get_features_common(VirtIOSerial *vser, uint64_t features)
{
- VirtIOSerial *vser;
-
- vser = VIRTIO_SERIAL(vdev);
-
if (vser->bus.max_nr_ports > 1) {
virtio_add_feature(&features, VIRTIO_CONSOLE_F_MULTIPORT);
}
return features;
}
+static uint64_t get_features(VirtIODevice *vdev, uint64_t features)
+{
+ VirtIOSerial *vser = VIRTIO_SERIAL(vdev);
+
+ /* virtio_add_feature(&features, VIRTIO_F_VERSION_1); */
+ return get_features_common(vser, features);
+}
+
+static uint64_t get_features_legacy(VirtIODevice *vdev, uint64_t features)
+{
+ VirtIOSerial *vser = VIRTIO_SERIAL(vdev);
+
+ return get_features_common(vser, features);
+}
+
/* Guest requested config info */
static void get_config(VirtIODevice *vdev, uint8_t *config_data)
{
@@ -1076,6 +1087,7 @@ static void virtio_serial_class_init(ObjectClass *klass, void *data)
vdc->realize = virtio_serial_device_realize;
vdc->unrealize = virtio_serial_device_unrealize;
vdc->get_features = get_features;
+ vdc->get_features_legacy = get_features_legacy;
vdc->get_config = get_config;
vdc->set_status = set_status;
vdc->reset = vser_reset;
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 5fff769..0f6d283 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -448,11 +448,9 @@ static void virtio_net_set_queues(VirtIONet *n)
static void virtio_net_set_multiqueue(VirtIONet *n, int multiqueue);
-static uint64_t virtio_net_get_features(VirtIODevice *vdev, uint64_t features)
+static uint64_t virtio_net_get_features_common(VirtIONet *n,
+ uint64_t features)
{
- VirtIONet *n = VIRTIO_NET(vdev);
- NetClientState *nc = qemu_get_queue(n->nic);
-
virtio_add_feature(&features, VIRTIO_NET_F_MAC);
if (!peer_has_vnet_hdr(n)) {
@@ -472,6 +470,16 @@ static uint64_t virtio_net_get_features(VirtIODevice *vdev, uint64_t features)
virtio_clear_feature(&features, VIRTIO_NET_F_HOST_UFO);
}
+ return features;
+}
+
+static uint64_t virtio_net_get_features(VirtIODevice *vdev, uint64_t features)
+{
+ VirtIONet *n = VIRTIO_NET(vdev);
+ NetClientState *nc = qemu_get_queue(n->nic);
+
+ features = virtio_net_get_features_common(n, features);
+
if (!get_vhost_net(nc->peer)) {
virtio_add_feature(&features, VIRTIO_F_VERSION_1);
return features;
@@ -479,6 +487,20 @@ static uint64_t virtio_net_get_features(VirtIODevice *vdev, uint64_t features)
return vhost_net_get_features(get_vhost_net(nc->peer), features);
}
+static uint64_t virtio_net_get_features_legacy(VirtIODevice *vdev,
+ uint64_t features)
+{
+ VirtIONet *n = VIRTIO_NET(vdev);
+ NetClientState *nc = qemu_get_queue(n->nic);
+
+ features = virtio_net_get_features_common(n, features);
+
+ if (!get_vhost_net(nc->peer)) {
+ return features;
+ }
+ return vhost_net_get_features(get_vhost_net(nc->peer), features);
+}
+
static uint64_t virtio_net_bad_features(VirtIODevice *vdev)
{
uint64_t features = 0;
@@ -1753,6 +1775,7 @@ static void virtio_net_class_init(ObjectClass *klass, void *data)
vdc->get_config = virtio_net_get_config;
vdc->set_config = virtio_net_set_config;
vdc->get_features = virtio_net_get_features;
+ vdc->get_features_legacy = virtio_net_get_features_legacy;
vdc->set_features = virtio_net_set_features;
vdc->bad_features = virtio_net_bad_features;
vdc->reset = virtio_net_reset;
diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 3635909..74cc2ad 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -128,8 +128,8 @@ static int s390_virtio_device_init(VirtIOS390Device *dev, VirtIODevice *vdev)
bus->dev_offs += dev_len;
- dev->host_features = virtio_bus_get_vdev_features(&dev->bus,
- dev->host_features);
+ dev->host_features =
+ virtio_bus_get_vdev_features_legacy(&dev->bus, dev->host_features);
s390_virtio_device_sync(dev);
s390_virtio_reset_idx(dev);
if (dev->qdev.hotplugged) {
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 8b6b2ab..7359e01 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -693,16 +693,16 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
}
cpu_physical_memory_read(ccw.cda, &revinfo, len);
if (dev->revision >= 0 ||
- revinfo.revision > virtio_ccw_rev_max(dev)) {
+ revinfo.revision > virtio_ccw_rev_max(dev, vdev)) {
ret = -ENOSYS;
break;
}
ret = 0;
dev->revision = revinfo.revision;
/* Re-evaluate which features the device wants to offer. */
- dev->host_features =
- virtio_bus_get_vdev_features_rev(&dev->bus, dev->host_features,
- dev->revision >= 1 ? 1 : 0);
+ dev->host_features = dev->revision >= 1 ?
+ virtio_bus_get_vdev_features(&dev->bus, dev->host_features) :
+ virtio_bus_get_vdev_features_legacy(&dev->bus, dev->host_features);
break;
default:
ret = -ENOSYS;
@@ -718,7 +718,7 @@ static void virtio_sch_disable_cb(SubchDev *sch)
dev->revision = -1;
/* Reset the device's features to legacy. */
dev->host_features =
- virtio_bus_get_vdev_features_rev(&dev->bus, dev->host_features, 0);
+ virtio_bus_get_vdev_features_legacy(&dev->bus, dev->host_features);
}
static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
@@ -862,7 +862,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
/* All devices start in legacy mode. */
dev->host_features =
- virtio_bus_get_vdev_features_rev(&dev->bus, dev->host_features, 0);
+ virtio_bus_get_vdev_features_legacy(&dev->bus, dev->host_features);
css_generate_sch_crws(sch->cssid, sch->ssid, sch->schid,
parent->hotplugged, 1);
diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
index 37a9840..89f7685 100644
--- a/hw/s390x/virtio-ccw.h
+++ b/hw/s390x/virtio-ccw.h
@@ -102,9 +102,9 @@ struct VirtioCcwDevice {
};
/* The maximum virtio revision we support. */
-static inline int virtio_ccw_rev_max(VirtioCcwDevice *dev)
+static inline int virtio_ccw_rev_max(VirtioCcwDevice *dev, VirtIODevice *vdev)
{
- return dev->host_features & (1ULL << VIRTIO_F_VERSION_1) ? 1 : 0;
+ return virtio_version_1_capable(vdev, dev->host_features) ? 1 : 0;
}
/* virtual css bus type */
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index 1e7427e..77c451b 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -630,6 +630,13 @@ static void virtio_scsi_set_config(VirtIODevice *vdev,
static uint64_t virtio_scsi_get_features(VirtIODevice *vdev,
uint64_t requested_features)
{
+ /* virtio_add_feature(&requested_features, VIRTIO_F_VERSION_1); */
+ return requested_features;
+}
+
+static uint64_t virtio_scsi_get_features_legacy(VirtIODevice *vdev,
+ uint64_t requested_features)
+{
return requested_features;
}
@@ -961,6 +968,7 @@ static void virtio_scsi_class_init(ObjectClass *klass, void *data)
vdc->unrealize = virtio_scsi_device_unrealize;
vdc->set_config = virtio_scsi_set_config;
vdc->get_features = virtio_scsi_get_features;
+ vdc->get_features_legacy = virtio_scsi_get_features_legacy;
vdc->reset = virtio_scsi_reset;
hc->plug = virtio_scsi_hotplug;
hc->unplug = virtio_scsi_hotunplug;
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index d2d7c3e..e33b93f 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -303,7 +303,8 @@ static void virtio_balloon_set_config(VirtIODevice *vdev,
}
}
-static uint64_t virtio_balloon_get_features(VirtIODevice *vdev, uint64_t f)
+static uint64_t virtio_balloon_get_features_legacy(VirtIODevice *vdev,
+ uint64_t f)
{
f |= (1 << VIRTIO_BALLOON_F_STATS_VQ);
return f;
@@ -423,7 +424,7 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data)
vdc->unrealize = virtio_balloon_device_unrealize;
vdc->get_config = virtio_balloon_get_config;
vdc->set_config = virtio_balloon_set_config;
- vdc->get_features = virtio_balloon_get_features;
+ vdc->get_features_legacy = virtio_balloon_get_features_legacy;
vdc->save = virtio_balloon_save_device;
vdc->load = virtio_balloon_load_device;
}
diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
index 927fa11..e4ab736 100644
--- a/hw/virtio/virtio-bus.c
+++ b/hw/virtio/virtio-bus.c
@@ -97,26 +97,34 @@ size_t virtio_bus_get_vdev_config_len(VirtioBusState *bus)
}
/* Get the features of the plugged device. */
-uint64_t virtio_bus_get_vdev_features_rev(VirtioBusState *bus,
- uint64_t requested_features,
- unsigned int revision)
+uint64_t virtio_bus_get_vdev_features(VirtioBusState *bus,
+ uint64_t requested_features)
{
VirtIODevice *vdev = virtio_bus_get_device(bus);
VirtioDeviceClass *k;
assert(vdev != NULL);
k = VIRTIO_DEVICE_GET_CLASS(vdev);
- if (revision > 0 && k->get_features_rev) {
- return k->get_features_rev(vdev, requested_features, revision);
+ assert((k->get_features != NULL) || (k->get_features_legacy != NULL));
+ if (k->get_features) {
+ return k->get_features(vdev, requested_features);
}
- assert(k->get_features != NULL);
- return k->get_features(vdev, requested_features);
+ /* ensure version_1 is cleared on unsupported devices */
+ virtio_clear_feature(&requested_features, VIRTIO_F_VERSION_1);
+ return k->get_features_legacy(vdev, requested_features);
}
-uint64_t virtio_bus_get_vdev_features(VirtioBusState *bus,
- uint64_t requested_features)
+uint64_t virtio_bus_get_vdev_features_legacy(VirtioBusState *bus,
+ uint64_t requested_features)
{
- return virtio_bus_get_vdev_features_rev(bus, requested_features, 0);
+ VirtIODevice *vdev = virtio_bus_get_device(bus);
+ VirtioDeviceClass *k;
+
+ assert(vdev != NULL);
+ k = VIRTIO_DEVICE_GET_CLASS(vdev);
+ assert(k->get_features_legacy != NULL);
+ virtio_clear_feature(&requested_features, VIRTIO_F_VERSION_1);
+ return k->get_features_legacy(vdev, requested_features);
}
/* Get bad features of the plugged device. */
diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
index 0c9b63b..3389b18 100644
--- a/hw/virtio/virtio-mmio.c
+++ b/hw/virtio/virtio-mmio.c
@@ -353,8 +353,8 @@ static void virtio_mmio_device_plugged(DeviceState *opaque)
VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
virtio_add_feature(&proxy->host_features, VIRTIO_F_NOTIFY_ON_EMPTY);
- proxy->host_features = virtio_bus_get_vdev_features(&proxy->bus,
- proxy->host_features);
+ proxy->host_features =
+ virtio_bus_get_vdev_features_legacy(&proxy->bus, proxy->host_features);
}
static void virtio_mmio_realizefn(DeviceState *d, Error **errp)
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index e6b0df4..07a8890 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1414,8 +1414,8 @@ static void virtio_pci_device_plugged(DeviceState *d)
virtio_add_feature(&proxy->host_features, VIRTIO_F_NOTIFY_ON_EMPTY);
virtio_add_feature(&proxy->host_features, VIRTIO_F_BAD_FEATURE);
- proxy->host_features = virtio_bus_get_vdev_features(bus,
- proxy->host_features);
+ proxy->host_features =
+ virtio_bus_get_vdev_features_legacy(bus, proxy->host_features);
}
static void virtio_pci_device_unplugged(DeviceState *d)
diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c
index edd39cc..4634286 100644
--- a/hw/virtio/virtio-rng.c
+++ b/hw/virtio/virtio-rng.c
@@ -101,6 +101,12 @@ static void handle_input(VirtIODevice *vdev, VirtQueue *vq)
static uint64_t get_features(VirtIODevice *vdev, uint64_t f)
{
+ /* virtio_add_feature(&f, VIRTIO_F_VERSION_1); */
+ return f;
+}
+
+static uint64_t get_features_legacy(VirtIODevice *vdev, uint64_t f)
+{
return f;
}
@@ -233,6 +239,7 @@ static void virtio_rng_class_init(ObjectClass *klass, void *data)
vdc->realize = virtio_rng_device_realize;
vdc->unrealize = virtio_rng_device_unrealize;
vdc->get_features = get_features;
+ vdc->get_features_legacy = get_features_legacy;
}
static void virtio_rng_initfn(Object *obj)
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index b098f44..5f13598 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -1122,6 +1122,18 @@ int virtio_set_features(VirtIODevice *vdev, uint64_t val)
return __virtio_set_features(vdev, val);
}
+bool virtio_version_1_capable(VirtIODevice *vdev, uint64_t host_features)
+{
+ VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
+ uint64_t features;
+
+ if (!k->get_features) {
+ return 0;
+ }
+ features = k->get_features(vdev, host_features);
+ return __virtio_has_feature(features, VIRTIO_F_VERSION_1) ? 1 : 0;
+}
+
int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
{
int i, ret;
diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h
index f0916ef..46721f6 100644
--- a/include/hw/virtio/virtio-bus.h
+++ b/include/hw/virtio/virtio-bus.h
@@ -84,9 +84,8 @@ size_t virtio_bus_get_vdev_config_len(VirtioBusState *bus);
/* Get the features of the plugged device. */
uint64_t virtio_bus_get_vdev_features(VirtioBusState *bus,
uint64_t requested_features);
-uint64_t virtio_bus_get_vdev_features_rev(VirtioBusState *bus,
- uint64_t requested_features,
- unsigned int revision);
+uint64_t virtio_bus_get_vdev_features_legacy(VirtioBusState *bus,
+ uint64_t requested_features);
/* Get bad features of the plugged device. */
uint64_t virtio_bus_get_vdev_bad_features(VirtioBusState *bus);
/* Get config of the plugged device. */
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 7a6a9d1..2dc9ad7 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -148,9 +148,8 @@ typedef struct VirtioDeviceClass {
DeviceRealize realize;
DeviceUnrealize unrealize;
uint64_t (*get_features)(VirtIODevice *vdev, uint64_t requested_features);
- uint64_t (*get_features_rev)(VirtIODevice *vdev,
- uint64_t requested_features,
- unsigned int revision);
+ uint64_t (*get_features_legacy)(VirtIODevice *vdev,
+ uint64_t requested_features);
uint64_t (*bad_features)(VirtIODevice *vdev);
void (*set_features)(VirtIODevice *vdev, uint64_t val);
int (*validate_features)(VirtIODevice *vdev);
@@ -248,6 +247,7 @@ int virtio_set_status(VirtIODevice *vdev, uint8_t val);
void virtio_reset(void *opaque);
void virtio_update_irq(VirtIODevice *vdev);
int virtio_set_features(VirtIODevice *vdev, uint64_t val);
+bool virtio_version_1_capable(VirtIODevice *vdev, uint64_t host_features);
/* Base devices. */
typedef struct VirtIOBlkConf VirtIOBlkConf;
--
2.3.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 0/2] virtio-ccw: be accesses
2015-03-10 17:05 ` Cornelia Huck
2015-03-10 17:22 ` [Qemu-devel] [PATCH] virtio: legacy features callback Cornelia Huck
@ 2015-03-11 9:57 ` Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 1/2] virtio-ccw: assure BE accesses Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 2/2] virtio-ccw: assure be accesses for set-revision Cornelia Huck
3 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2015-03-11 9:57 UTC (permalink / raw)
To: mst; +Cc: Cornelia Huck, thuth, qemu-devel
OK, here's what I have for the virtio-ccw be stuff. Patch 1 will go
via s390-next with my next pull request, patch 2 is on top of your
current virtio-1.0 branch and should possibly be merged into the
patch introducing set-revision.
Cornelia Huck (2):
virtio-ccw: assure BE accesses
virtio-ccw: assure be accesses for set-revision
hw/s390x/virtio-ccw.c | 37 ++++++++++++++++++++++++++-----------
1 file changed, 26 insertions(+), 11 deletions(-)
--
2.1.4
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 1/2] virtio-ccw: assure BE accesses
2015-03-10 17:05 ` Cornelia Huck
2015-03-10 17:22 ` [Qemu-devel] [PATCH] virtio: legacy features callback Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 0/2] virtio-ccw: be accesses Cornelia Huck
@ 2015-03-11 9:57 ` Cornelia Huck
2015-03-13 9:44 ` Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 2/2] virtio-ccw: assure be accesses for set-revision Cornelia Huck
3 siblings, 1 reply; 13+ messages in thread
From: Cornelia Huck @ 2015-03-11 9:57 UTC (permalink / raw)
To: mst; +Cc: Cornelia Huck, thuth, qemu-devel
All fields in structures transmitted by ccws are big endian; assure
we handle them as such.
Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
hw/s390x/virtio-ccw.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 8b6b2ab..60f8a14 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -589,7 +589,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
if (!ccw.cda) {
ret = -EFAULT;
} else {
- indicators = ldq_phys(&address_space_memory, ccw.cda);
+ indicators = ldq_be_phys(&address_space_memory, ccw.cda);
dev->indicators = get_indicator(indicators, sizeof(uint64_t));
sch->curr_status.scsw.count = ccw.count - sizeof(indicators);
ret = 0;
@@ -609,7 +609,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
if (!ccw.cda) {
ret = -EFAULT;
} else {
- indicators = ldq_phys(&address_space_memory, ccw.cda);
+ indicators = ldq_be_phys(&address_space_memory, ccw.cda);
dev->indicators2 = get_indicator(indicators, sizeof(uint64_t));
sch->curr_status.scsw.count = ccw.count - sizeof(indicators);
ret = 0;
@@ -629,11 +629,11 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
if (!ccw.cda) {
ret = -EFAULT;
} else {
- vq_config.index = lduw_phys(&address_space_memory, ccw.cda);
+ vq_config.index = lduw_be_phys(&address_space_memory, ccw.cda);
vq_config.num_max = virtio_queue_get_num(vdev,
vq_config.index);
- stw_phys(&address_space_memory,
- ccw.cda + sizeof(vq_config.index), vq_config.num_max);
+ stw_be_phys(&address_space_memory,
+ ccw.cda + sizeof(vq_config.index), vq_config.num_max);
sch->curr_status.scsw.count = ccw.count - sizeof(vq_config);
ret = 0;
}
@@ -661,13 +661,17 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
if (!thinint) {
ret = -EFAULT;
} else {
+ uint64_t ind_bit = ldq_be_p(&thinint->ind_bit);
+
len = hw_len;
dev->summary_indicator =
- get_indicator(thinint->summary_indicator, sizeof(uint8_t));
- dev->indicators = get_indicator(thinint->device_indicator,
- thinint->ind_bit / 8 + 1);
+ get_indicator(ldq_be_p(&thinint->summary_indicator),
+ sizeof(uint8_t));
+ dev->indicators =
+ get_indicator(ldq_be_p(&thinint->device_indicator),
+ ind_bit / 8 + 1);
dev->thinint_isc = thinint->isc;
- dev->routes.adapter.ind_offset = thinint->ind_bit;
+ dev->routes.adapter.ind_offset = ind_bit;
dev->routes.adapter.summary_offset = 7;
cpu_physical_memory_unmap(thinint, hw_len, 0, hw_len);
ret = css_register_io_adapter(CSS_IO_ADAPTER_VIRTIO,
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 2/2] virtio-ccw: assure be accesses for set-revision
2015-03-10 17:05 ` Cornelia Huck
` (2 preceding siblings ...)
2015-03-11 9:57 ` [Qemu-devel] [PATCH 1/2] virtio-ccw: assure BE accesses Cornelia Huck
@ 2015-03-11 9:57 ` Cornelia Huck
2015-03-11 12:39 ` Thomas Huth
3 siblings, 1 reply; 13+ messages in thread
From: Cornelia Huck @ 2015-03-11 9:57 UTC (permalink / raw)
To: mst; +Cc: Cornelia Huck, thuth, qemu-devel
All fields in structures transmitted by ccws are big endian; assure
we handle them as such for the set-revision ccw as well.
Should be merged into "s390x/virtio-ccw: add virtio set-revision call".
CC: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
hw/s390x/virtio-ccw.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 60f8a14..a64f116 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -687,7 +687,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
break;
case CCW_CMD_SET_VIRTIO_REV:
len = sizeof(revinfo);
- if (ccw.count < len || (check_len && ccw.count > len)) {
+ if (ccw.count < sizeof(revinfo)) {
ret = -EINVAL;
break;
}
@@ -695,7 +695,18 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
ret = -EFAULT;
break;
}
- cpu_physical_memory_read(ccw.cda, &revinfo, len);
+ revinfo.revision = lduw_be_phys(&address_space_memory, ccw.cda);
+ revinfo.length = lduw_be_phys(&address_space_memory,
+ ccw.cda + sizeof(revinfo.revision));
+ if (ccw.count < len + revinfo.length ||
+ (check_len && ccw.count > len + revinfo.length)) {
+ ret = -EINVAL;
+ break;
+ }
+ /*
+ * Once we start to support revisions with additional data, we'll
+ * need to fetch it here. Nothing to do for now, though.
+ */
if (dev->revision >= 0 ||
revinfo.revision > virtio_ccw_rev_max(dev)) {
ret = -ENOSYS;
--
2.1.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] virtio-ccw: assure be accesses for set-revision
2015-03-11 9:57 ` [Qemu-devel] [PATCH 2/2] virtio-ccw: assure be accesses for set-revision Cornelia Huck
@ 2015-03-11 12:39 ` Thomas Huth
0 siblings, 0 replies; 13+ messages in thread
From: Thomas Huth @ 2015-03-11 12:39 UTC (permalink / raw)
To: Cornelia Huck; +Cc: qemu-devel, mst
On Wed, 11 Mar 2015 10:57:51 +0100
Cornelia Huck <cornelia.huck@de.ibm.com> wrote:
> All fields in structures transmitted by ccws are big endian; assure
> we handle them as such for the set-revision ccw as well.
>
> Should be merged into "s390x/virtio-ccw: add virtio set-revision call".
>
> CC: Thomas Huth <thuth@linux.vnet.ibm.com>
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> ---
> hw/s390x/virtio-ccw.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index 60f8a14..a64f116 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -687,7 +687,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
> break;
> case CCW_CMD_SET_VIRTIO_REV:
> len = sizeof(revinfo);
> - if (ccw.count < len || (check_len && ccw.count > len)) {
> + if (ccw.count < sizeof(revinfo)) {
> ret = -EINVAL;
> break;
> }
> @@ -695,7 +695,18 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
> ret = -EFAULT;
> break;
> }
> - cpu_physical_memory_read(ccw.cda, &revinfo, len);
> + revinfo.revision = lduw_be_phys(&address_space_memory, ccw.cda);
> + revinfo.length = lduw_be_phys(&address_space_memory,
> + ccw.cda + sizeof(revinfo.revision));
> + if (ccw.count < len + revinfo.length ||
> + (check_len && ccw.count > len + revinfo.length)) {
> + ret = -EINVAL;
> + break;
> + }
> + /*
> + * Once we start to support revisions with additional data, we'll
> + * need to fetch it here. Nothing to do for now, though.
> + */
> if (dev->revision >= 0 ||
> revinfo.revision > virtio_ccw_rev_max(dev)) {
> ret = -ENOSYS;
Looks fine to me.
Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] virtio-ccw: assure BE accesses
2015-03-11 9:57 ` [Qemu-devel] [PATCH 1/2] virtio-ccw: assure BE accesses Cornelia Huck
@ 2015-03-13 9:44 ` Cornelia Huck
0 siblings, 0 replies; 13+ messages in thread
From: Cornelia Huck @ 2015-03-13 9:44 UTC (permalink / raw)
To: Cornelia Huck; +Cc: qemu-devel, thuth, mst
On Wed, 11 Mar 2015 10:57:50 +0100
Cornelia Huck <cornelia.huck@de.ibm.com> wrote:
> All fields in structures transmitted by ccws are big endian; assure
> we handle them as such.
>
> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> ---
> hw/s390x/virtio-ccw.c | 22 +++++++++++++---------
> 1 file changed, 13 insertions(+), 9 deletions(-)
Applied to my s390-next branch.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2015-03-13 9:44 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-10 13:32 [Qemu-devel] [PATCH] virtio: avoid leading underscores for helpers Cornelia Huck
2015-03-10 14:12 ` Michael S. Tsirkin
2015-03-10 14:22 ` Cornelia Huck
2015-03-10 14:27 ` Michael S. Tsirkin
2015-03-10 16:03 ` Cornelia Huck
2015-03-10 16:34 ` Michael S. Tsirkin
2015-03-10 17:05 ` Cornelia Huck
2015-03-10 17:22 ` [Qemu-devel] [PATCH] virtio: legacy features callback Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 0/2] virtio-ccw: be accesses Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 1/2] virtio-ccw: assure BE accesses Cornelia Huck
2015-03-13 9:44 ` Cornelia Huck
2015-03-11 9:57 ` [Qemu-devel] [PATCH 2/2] virtio-ccw: assure be accesses for set-revision Cornelia Huck
2015-03-11 12:39 ` Thomas Huth
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.