From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44889) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bwmac-0007Ot-ER for qemu-devel@nongnu.org; Wed, 19 Oct 2016 04:51:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bwmaX-0001fa-GS for qemu-devel@nongnu.org; Wed, 19 Oct 2016 04:51:10 -0400 Received: from smtp02.citrix.com ([66.165.176.63]:32861) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1bwmaX-0001eN-9m for qemu-devel@nongnu.org; Wed, 19 Oct 2016 04:51:05 -0400 Date: Wed, 19 Oct 2016 09:50:59 +0100 From: Wei Liu Message-ID: <20161019085059.GC2639@citrix.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Subject: Re: [Qemu-devel] [PATCH] xen-usb.c/usbif.h: fix ARM64 build issue List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefano Stabellini Cc: xen-devel@lists.xenproject.org, wei.liu2@citrix.com, jgross@suse.com, qemu-devel@nongnu.org, anthony.perard@citrix.com, julien.grall@arm.com On Tue, Oct 18, 2016 at 12:09:55PM -0700, Stefano Stabellini wrote: > Hi all, > > While I was investigating the recent libxl ARM64 build issue, I found > another ARM64 build problem. This one is in QEMU: > > > CC hw/usb/xen-usb.o > hw/usb/xen-usb.c: In function ‘usbback_gnttab_map’: > hw/usb/xen-usb.c:163:56: error: ‘PAGE_SIZE’ undeclared (first use in this function) > (unsigned)usbback_req->req.seg[i].length > PAGE_SIZE) { > ^ > hw/usb/xen-usb.c:163:56: note: each undeclared identifier is reported only once for each function it appears in > In file included from hw/usb/xen-usb.c:36:0: > hw/usb/xen-usb.c: In function ‘usbback_alloc’: > /users/stefanos/xen/tools/../tools/include/xen/io/usbif.h:229:56: error: ‘PAGE_SIZE’ undeclared (first use in this function) > #define USB_URB_RING_SIZE __CONST_RING_SIZE(usbif_urb, PAGE_SIZE) > ^ > /users/stefanos/xen/tools/../tools/include/xen/io/ring.h:45:23: note: in definition of macro ‘__RD32’ > #define __RD32(_x) (((_x) & 0xffff0000) ? __RD16((_x)>>16)<<16 : __RD16(_x)) > ^ > /users/stefanos/xen/tools/../tools/include/xen/io/usbif.h:229:27: note: in expansion of macro ‘__CONST_RING_SIZE’ > #define USB_URB_RING_SIZE __CONST_RING_SIZE(usbif_urb, PAGE_SIZE) > ^ > hw/usb/xen-usb.c:1029:51: note: in expansion of macro ‘USB_URB_RING_SIZE’ > max_grants = USBIF_MAX_SEGMENTS_PER_REQUEST * USB_URB_RING_SIZE + 2; > ^ > make: *** [hw/usb/xen-usb.o] Error 1 > > > It is caused by PAGE_SIZE being utilized in > xen/include/public/io/usbif.h, but undefined on ARM64 (in userspace). > QEMU includes xen/include/public/io/usbif.h directly, therefore > hw/usb/xen-usb.c doesn't build. > > I don't think we should be using "PAGE_SIZE" in public/io/usbif.h, but > that file is present in too many Xen releases to ignore now. So I am > going to work around the issue in QEMU. > Actually it was introduced in 4.7. > --- > > xen-usb.c does not build on ARM64 because it includes xen/io/usbif.h > which uses PAGE_SIZE without defining it. The header file has been > shipped with too many Xen releases to be able to solve the problem at > the source. > > This patch define PAGE_SIZE as XC_PAGE_SIZE when undefined. > > Signed-off-by: Stefano Stabellini > > diff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c > index 174d715..ca9df87 100644 > --- a/hw/usb/xen-usb.c > +++ b/hw/usb/xen-usb.c > @@ -34,6 +34,11 @@ > #include "qapi/qmp/qstring.h" > > #include > + > +/* xen/io/usbif.h references PAGE_SIZE without defining it */ > +#ifndef PAGE_SIZE > +#define PAGE_SIZE XC_PAGE_SIZE > +#endif > #include Can we just change the macro to #define USB_CONN_RING_SIZE(pg_size) __CONST_RING_SIZE(usbif_conn, (pg_size) ? I also found a similar issue in vscsiif.h. Wei. > > /*