vdpa: Allow VDPA to work on big-endian machine
After commit0caed25cd1vhost_vdpa_net_load_vlan() started seeing VIRTIO_NET_F_CTRL_VLAN flag and making 4096 calls to the kernel with VIRTIO_NET_CTRL_VLAN_ADD command. However, it forgot to convert the 16-bit VLAN IDs to LE format. On BE machine, the kernel calls failed when they saw "VLAN IDs" greater than 4095, and QEMU then said: "unable to start vhost net: 5: falling back on userspace virtio", and VDPA became disabled. Convert the VLAN ID to LE before putting it into virtio queue. Fixes:8f7e996748("vdpa: Restore vlan filtering state") Signed-off-by: Konstantin Shkolnyy <kshk@linux.ibm.com> Acked-by: Jason Wang <jasowang@redhat.com> Acked-by: Eugenio Pérez <eperezma@redhat.com> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Message-ID: <20260427144746.1498-1-kshk@linux.ibm.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
committed by
Philippe Mathieu-Daudé
parent
f5120a21e4
commit
ecbebe2a19
@@ -1200,9 +1200,10 @@ static int vhost_vdpa_net_load_single_vlan(VhostVDPAState *s,
|
||||
struct iovec *in_cursor,
|
||||
uint16_t vid)
|
||||
{
|
||||
uint16_t vid_le = cpu_to_le16(vid);
|
||||
const struct iovec data = {
|
||||
.iov_base = &vid,
|
||||
.iov_len = sizeof(vid),
|
||||
.iov_base = &vid_le,
|
||||
.iov_len = sizeof(vid_le),
|
||||
};
|
||||
ssize_t r = vhost_vdpa_net_load_cmd(s, out_cursor, in_cursor,
|
||||
VIRTIO_NET_CTRL_VLAN,
|
||||
|
||||
Reference in New Issue
Block a user