From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:56806) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1glg7c-0004QC-J7 for qemu-devel@nongnu.org; Mon, 21 Jan 2019 15:24:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1glg7V-0002oZ-6V for qemu-devel@nongnu.org; Mon, 21 Jan 2019 15:24:35 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57548) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1glg7O-0002gI-CB for qemu-devel@nongnu.org; Mon, 21 Jan 2019 15:24:29 -0500 Date: Mon, 21 Jan 2019 15:24:17 -0500 From: "Michael S. Tsirkin" Message-ID: <20190121152158-mutt-send-email-mst@kernel.org> References: <20190116105336-mutt-send-email-mst@kernel.org> <20190121063556.GA21693@tiger-server> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190121063556.GA21693@tiger-server> Subject: Re: [Qemu-devel] [PATCH V9 2/6] memory: use sparse feature define RAM_FLAG. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xiaoguangrong.eric@gmail.com, stefanha@redhat.com, pbonzini@redhat.com, pagupta@redhat.com, yu.c.zhang@linux.intel.com, ehabkost@redhat.com, qemu-devel@nongnu.org, imammedo@redhat.com, dan.j.williams@intel.com On Mon, Jan 21, 2019 at 02:35:57PM +0800, Yi Zhang wrote: > On 2019-01-16 at 10:55:33 -0500, Michael S. Tsirkin wrote: > > On Wed, Jan 16, 2019 at 04:10:29PM +0800, Zhang Yi wrote: > > > Signed-off-by: Zhang Yi > > > Signed-off-by: Michael S. Tsirkin > > > > OK so if you apply this patch, do you get > > any sparse warning at all? > Didn't get any sparse warning. The reason I find it strange is because you then go on to assign these flags to an untagged unint32_t. Did you forget to configure with sparse enabled maybe? > > > > If not how come? > > > > And we need to ask patchew maintainers to > > > > Overall I'd suggest that since you no longer need > > a new RAM flag, split this effort out and finish > > MAP_SYNC work first. > Ok, Will > > > > > > > --- > > > include/exec/memory.h | 12 ++++++------ > > > include/qemu/osdep.h | 9 +++++++++ > > > 2 files changed, 15 insertions(+), 6 deletions(-) > > > > > > diff --git a/include/exec/memory.h b/include/exec/memory.h > > > index 667466b..03824d9 100644 > > > --- a/include/exec/memory.h > > > +++ b/include/exec/memory.h > > > @@ -104,27 +104,27 @@ struct IOMMUNotifier { > > > typedef struct IOMMUNotifier IOMMUNotifier; > > > > > > /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */ > > > -#define RAM_PREALLOC (1 << 0) > > > +#define RAM_PREALLOC ((QEMU_FORCE QemuMmapFlags) (1 << 0)) > > > > > > /* RAM is mmap-ed with MAP_SHARED */ > > > -#define RAM_SHARED (1 << 1) > > > +#define RAM_SHARED ((QEMU_FORCE QemuMmapFlags) (1 << 1)) > > > > > > /* Only a portion of RAM (used_length) is actually used, and migrated. > > > * This used_length size can change across reboots. > > > */ > > > -#define RAM_RESIZEABLE (1 << 2) > > > +#define RAM_RESIZEABLE ((QEMU_FORCE QemuMmapFlags) (1 << 2)) > > > > > > /* UFFDIO_ZEROPAGE is available on this RAMBlock to atomically > > > * zero the page and wake waiting processes. > > > * (Set during postcopy) > > > */ > > > -#define RAM_UF_ZEROPAGE (1 << 3) > > > +#define RAM_UF_ZEROPAGE ((QEMU_FORCE QemuMmapFlags) (1 << 3)) > > > > > > /* RAM can be migrated */ > > > -#define RAM_MIGRATABLE (1 << 4) > > > +#define RAM_MIGRATABLE ((QEMU_FORCE QemuMmapFlags) (1 << 4)) > > > > > > /* RAM is a persistent kind memory */ > > > -#define RAM_PMEM (1 << 5) > > > +#define RAM_PMEM ((QEMU_FORCE QemuMmapFlags) (1 << 5)) > > > > > > static inline void iommu_notifier_init(IOMMUNotifier *n, IOMMUNotify fn, > > > IOMMUNotifierFlag flags, > > > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h > > > index 3bf48bc..457d24e 100644 > > > --- a/include/qemu/osdep.h > > > +++ b/include/qemu/osdep.h > > > @@ -185,6 +185,15 @@ extern int daemon(int, int); > > > #define ESHUTDOWN 4099 > > > #endif > > > > > > +#ifdef __CHECKER__ > > > +#define QEMU_BITWISE __attribute__((bitwise)) > > > +#define QEMU_FORCE __attribute__((force)) > > > +#else > > > +#define QEMU_BITWISE > > > +#define QEMU_FORCE > > > +#endif > > > + > > > +typedef unsigned QEMU_BITWISE QemuMmapFlags; > > > /* time_t may be either 32 or 64 bits depending on the host OS, and > > > * can be either signed or unsigned, so we can't just hardcode a > > > * specific maximum value. This is not a C preprocessor constant, > > > -- > > > 2.7.4