As a result of backporting a bugfix, virtio_net started passing void * to page_address, assuming that it will get silently converted to struct page *. But this does not happen on architectures where page_address is a macro, the result is build failure as the macro tries to dereference void*. Fix by reordering code slightly, so we always pass struct page * to page_address. Reported-by: Guenter Roeck <linux@xxxxxxxxxxxx> Tested-by: Guenter Roeck <linux@xxxxxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: David Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> --- David, Greg asked that this be put in stable ASAP to avoid next release being broken. I still didn't Cc stable directly as I know you prefer to do this yourself. Sorry about creating this mess, could you help fast-path it there please? Thanks! drivers/net/virtio_net.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index b8665588..c8d5ee1 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -330,9 +330,9 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, void *buf, unsigned int len) { - struct skb_vnet_hdr *hdr = page_address(buf); - int num_buf = hdr->mhdr.num_buffers; struct page *page = buf; + struct skb_vnet_hdr *hdr = page_address(page); + int num_buf = hdr->mhdr.num_buffers; struct sk_buff *skb = page_to_skb(rq, page, len); int i; -- MST _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization