From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36431) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UiFHu-0008L7-1V for qemu-devel@nongnu.org; Thu, 30 May 2013 22:41:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UiFHt-0006qL-0h for qemu-devel@nongnu.org; Thu, 30 May 2013 22:41:53 -0400 Received: from [222.73.24.84] (port=55847 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UiFHs-0006qB-M6 for qemu-devel@nongnu.org; Thu, 30 May 2013 22:41:52 -0400 Date: Fri, 31 May 2013 10:41:03 +0800 From: Hu Tao Message-ID: <20130531024103.GG9509@localhost.localdomain> References: <1369911913-10934-1-git-send-email-mst@redhat.com> <1369911913-10934-2-git-send-email-mst@redhat.com> MIME-Version: 1.0 In-Reply-To: <1369911913-10934-2-git-send-email-mst@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Subject: Re: [Qemu-devel] [PATCH v2 1/5] range: add Range structure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: Peter Maydell , qemu-devel@nongnu.org On Thu, May 30, 2013 at 02:07:16PM +0300, Michael S. Tsirkin wrote: > Sometimes we need to pass ranges around, add a > handy structure for this purpose. > > Note: memory.c defines its own concept of AddrRange structure for > working with 128 addresses. It's necessary there for doing range math. > This is not needed for most users: struct Range is > much simpler, and is only used for passing the range around. > > Cc: Peter Maydell > Signed-off-by: Michael S. Tsirkin > --- > include/qemu/range.h | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/include/qemu/range.h b/include/qemu/range.h > index 3502372..b76cc0d 100644 > --- a/include/qemu/range.h > +++ b/include/qemu/range.h > @@ -1,6 +1,22 @@ > #ifndef QEMU_RANGE_H > #define QEMU_RANGE_H > > +#include > + > +/* > + * Operations on 64 bit address ranges. > + * Notes: > + * - ranges must not wrap around 0, but can include the last byte ~0x0LL. > + * - this can not represent a full 0 to ~0x0LL range. > + */ > + > +/* A structure representing a range of addresses. */ > +struct Range { > + uint64_t begin; /* First byte of the range, or 0 if empty. */ I don't understand, can't a range start from 0? > + uint64_t end; /* 1 + the last byte. 0 if range empty or ends at ~0x0LL. */ How to tell from the two? Instead I suggest this be a length field, whereas 0 means empty. > +}; > +typedef struct Range Range; > + > /* Get last byte of a range from offset + length. > * Undefined for ranges that wrap around 0. */ > static inline uint64_t range_get_last(uint64_t offset, uint64_t len) > -- > MST >