From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43994) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WrqJ4-0008Bk-9J for qemu-devel@nongnu.org; Tue, 03 Jun 2014 11:07:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WrqIy-0004ty-9U for qemu-devel@nongnu.org; Tue, 03 Jun 2014 11:07:18 -0400 Received: from lputeaux-656-01-25-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:38724 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WrqIy-0004td-06 for qemu-devel@nongnu.org; Tue, 03 Jun 2014 11:07:12 -0400 Date: Tue, 3 Jun 2014 17:07:10 +0200 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140603150710.GB21314@irqsave.net> References: <1401801062-9154-1-git-send-email-kwolf@redhat.com> <1401801062-9154-2-git-send-email-kwolf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1401801062-9154-2-git-send-email-kwolf@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v3 01/21] block: Introduce qemu_try_blockalign() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: benoit.canet@irqsave.net, mreitz@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, armbru@redhat.com The Tuesday 03 Jun 2014 =E0 15:10:42 (+0200), Kevin Wolf wrote : > This function returns NULL instead of aborting when an allocation fails= . >=20 > Signed-off-by: Kevin Wolf > --- > block.c | 13 +++++++++++++ > include/block/block.h | 1 + > include/qemu/osdep.h | 1 + > util/oslib-posix.c | 16 ++++++++++------ > util/oslib-win32.c | 9 +++++++-- > 5 files changed, 32 insertions(+), 8 deletions(-) >=20 > diff --git a/block.c b/block.c > index 310ea89..6179796 100644 > --- a/block.c > +++ b/block.c > @@ -5223,6 +5223,19 @@ void *qemu_blockalign(BlockDriverState *bs, size= _t size) > return qemu_memalign(bdrv_opt_mem_align(bs), size); > } > =20 > +void *qemu_try_blockalign(BlockDriverState *bs, size_t size) > +{ > + size_t align =3D bdrv_opt_mem_align(bs); > + > + /* Ensure that NULL is never returned on success */ > + assert(align > 0); > + if (size =3D=3D 0) { > + size =3D align; > + } > + > + return qemu_try_memalign(align, size); > +} > + > /* > * Check if all memory in this vector is sector aligned. > */ > diff --git a/include/block/block.h b/include/block/block.h > index faee3aa..c895e92 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -453,6 +453,7 @@ void bdrv_img_create(const char *filename, const ch= ar *fmt, > size_t bdrv_opt_mem_align(BlockDriverState *bs); > void bdrv_set_guest_block_size(BlockDriverState *bs, int align); > void *qemu_blockalign(BlockDriverState *bs, size_t size); > +void *qemu_try_blockalign(BlockDriverState *bs, size_t size); > bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); > =20 > struct HBitmapIter; > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h > index ffb2966..b0e3053 100644 > --- a/include/qemu/osdep.h > +++ b/include/qemu/osdep.h > @@ -95,6 +95,7 @@ typedef signed int int_fast16_t; > #define qemu_printf printf > =20 > int qemu_daemon(int nochdir, int noclose); > +void *qemu_try_memalign(size_t alignment, size_t size); > void *qemu_memalign(size_t alignment, size_t size); > void *qemu_anon_ram_alloc(size_t size); > void qemu_vfree(void *ptr); > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > index 8e9c770..16e6200 100644 > --- a/util/oslib-posix.c > +++ b/util/oslib-posix.c > @@ -90,7 +90,7 @@ void *qemu_oom_check(void *ptr) > return ptr; > } > =20 > -void *qemu_memalign(size_t alignment, size_t size) > +void *qemu_try_memalign(size_t alignment, size_t size) > { > void *ptr; > =20 > @@ -102,19 +102,23 @@ void *qemu_memalign(size_t alignment, size_t size= ) > int ret; > ret =3D posix_memalign(&ptr, alignment, size); > if (ret !=3D 0) { > - fprintf(stderr, "Failed to allocate %zu B: %s\n", > - size, strerror(ret)); > - abort(); > + errno =3D ret; > + ptr =3D NULL; > } > #elif defined(CONFIG_BSD) > - ptr =3D qemu_oom_check(valloc(size)); > + ptr =3D valloc(size); > #else > - ptr =3D qemu_oom_check(memalign(alignment, size)); > + ptr =3D memalign(alignment, size); > #endif > trace_qemu_memalign(alignment, size, ptr); > return ptr; > } > =20 > +void *qemu_memalign(size_t alignment, size_t size) > +{ > + return qemu_oom_check(qemu_try_memalign(alignment, size)); > +} > + > /* alloc shared memory pages */ > void *qemu_anon_ram_alloc(size_t size) > { > diff --git a/util/oslib-win32.c b/util/oslib-win32.c > index 69552f7..ddc823e 100644 > --- a/util/oslib-win32.c > +++ b/util/oslib-win32.c > @@ -46,18 +46,23 @@ void *qemu_oom_check(void *ptr) > return ptr; > } > =20 > -void *qemu_memalign(size_t alignment, size_t size) > +void *qemu_try_memalign(size_t alignment, size_t size) > { > void *ptr; > =20 > if (!size) { > abort(); > } > - ptr =3D qemu_oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_R= EADWRITE)); > + ptr =3D VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); > trace_qemu_memalign(alignment, size, ptr); > return ptr; > } > =20 > +void *qemu_memalign(size_t alignment, size_t size) > +{ > + return qemu_oom_check(qemu_try_memalign(alignment, size)); > +} > + > void *qemu_anon_ram_alloc(size_t size) > { > void *ptr; > --=20 > 1.8.3.1 >=20 Definitively simpler to use. Reviewed-by: Benoit Canet