From mboxrd@z Thu Jan 1 00:00:00 1970 From: Auger Eric Subject: Re: [RFC PATCH 1/5] vfio/quirks: Add common quirk alloc helper Date: Thu, 8 Feb 2018 12:10:35 +0100 Message-ID: References: <20180207001615.1156.10547.stgit@gimli.home> <20180207002615.1156.74568.stgit@gimli.home> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Alex Williamson , qemu-devel@nongnu.org Return-path: Received: from mx3-rdu2.redhat.com ([66.187.233.73]:57280 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751014AbeBHLKi (ORCPT ); Thu, 8 Feb 2018 06:10:38 -0500 In-Reply-To: <20180207002615.1156.74568.stgit@gimli.home> Sender: kvm-owner@vger.kernel.org List-ID: Hi Alex, On 07/02/18 01:26, Alex Williamson wrote: > This will later be used to include list initialization > > Signed-off-by: Alex Williamson > --- > hw/vfio/pci-quirks.c | 48 +++++++++++++++++++++--------------------------- > 1 file changed, 21 insertions(+), 27 deletions(-) > > diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c > index e5779a7ad35b..10af23217292 100644 > --- a/hw/vfio/pci-quirks.c > +++ b/hw/vfio/pci-quirks.c > @@ -275,6 +275,15 @@ static const MemoryRegionOps vfio_ati_3c3_quirk = { > .endianness = DEVICE_LITTLE_ENDIAN, > }; > > +static VFIOQuirk *vfio_quirk_alloc(int nr_mem) > +{ > + VFIOQuirk *quirk = g_malloc0(sizeof(*quirk)); nit: Peter advised the usage of g_new0 as well for that kind of alloc. > + quirk->mem = g_new0(MemoryRegion, nr_mem); > + quirk->nr_mem = nr_mem; > + > + return quirk; > +} > + > static void vfio_vga_probe_ati_3c3_quirk(VFIOPCIDevice *vdev) > { > VFIOQuirk *quirk; > @@ -288,9 +297,7 @@ static void vfio_vga_probe_ati_3c3_quirk(VFIOPCIDevice *vdev) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > - quirk->mem = g_new0(MemoryRegion, 1); > - quirk->nr_mem = 1; > + quirk = vfio_quirk_alloc(1); > > memory_region_init_io(quirk->mem, OBJECT(vdev), &vfio_ati_3c3_quirk, vdev, > "vfio-ati-3c3-quirk", 1); > @@ -323,9 +330,7 @@ static void vfio_probe_ati_bar4_quirk(VFIOPCIDevice *vdev, int nr) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > - quirk->mem = g_new0(MemoryRegion, 2); > - quirk->nr_mem = 2; > + quirk = vfio_quirk_alloc(2); > window = quirk->data = g_malloc0(sizeof(*window) + > sizeof(VFIOConfigWindowMatch)); > window->vdev = vdev; > @@ -371,10 +376,9 @@ static void vfio_probe_ati_bar2_quirk(VFIOPCIDevice *vdev, int nr) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > + quirk = vfio_quirk_alloc(1); > mirror = quirk->data = g_malloc0(sizeof(*mirror)); > - mirror->mem = quirk->mem = g_new0(MemoryRegion, 1); > - quirk->nr_mem = 1; > + mirror->mem = quirk->mem; > mirror->vdev = vdev; > mirror->offset = 0x4000; > mirror->bar = nr; > @@ -548,10 +552,8 @@ static void vfio_vga_probe_nvidia_3d0_quirk(VFIOPCIDevice *vdev) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > + quirk = vfio_quirk_alloc(2); > quirk->data = data = g_malloc0(sizeof(*data)); > - quirk->mem = g_new0(MemoryRegion, 2); > - quirk->nr_mem = 2; > data->vdev = vdev; > > memory_region_init_io(&quirk->mem[0], OBJECT(vdev), &vfio_nvidia_3d4_quirk, > @@ -667,9 +669,7 @@ static void vfio_probe_nvidia_bar5_quirk(VFIOPCIDevice *vdev, int nr) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > - quirk->mem = g_new0(MemoryRegion, 4); > - quirk->nr_mem = 4; > + quirk = vfio_quirk_alloc(4); > bar5 = quirk->data = g_malloc0(sizeof(*bar5) + > (sizeof(VFIOConfigWindowMatch) * 2)); > window = &bar5->window; > @@ -762,10 +762,9 @@ static void vfio_probe_nvidia_bar0_quirk(VFIOPCIDevice *vdev, int nr) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > + quirk = vfio_quirk_alloc(1); > mirror = quirk->data = g_malloc0(sizeof(*mirror)); > - mirror->mem = quirk->mem = g_new0(MemoryRegion, 1); > - quirk->nr_mem = 1; > + mirror->mem = quirk->mem; > mirror->vdev = vdev; > mirror->offset = 0x88000; > mirror->bar = nr; > @@ -781,10 +780,9 @@ static void vfio_probe_nvidia_bar0_quirk(VFIOPCIDevice *vdev, int nr) > > /* The 0x1800 offset mirror only seems to get used by legacy VGA */ > if (vdev->vga) { > - quirk = g_malloc0(sizeof(*quirk)); > + quirk = vfio_quirk_alloc(1); > mirror = quirk->data = g_malloc0(sizeof(*mirror)); > - mirror->mem = quirk->mem = g_new0(MemoryRegion, 1); > - quirk->nr_mem = 1; > + mirror->mem = quirk->mem; > mirror->vdev = vdev; > mirror->offset = 0x1800; > mirror->bar = nr; > @@ -945,9 +943,7 @@ static void vfio_probe_rtl8168_bar2_quirk(VFIOPCIDevice *vdev, int nr) > return; > } > > - quirk = g_malloc0(sizeof(*quirk)); > - quirk->mem = g_new0(MemoryRegion, 2); > - quirk->nr_mem = 2; > + quirk = vfio_quirk_alloc(2); > quirk->data = rtl = g_malloc0(sizeof(*rtl)); > rtl->vdev = vdev; > > @@ -1507,9 +1503,7 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr) > } > > /* Setup our quirk to munge GTT addresses to the VM allocated buffer */ > - quirk = g_malloc0(sizeof(*quirk)); > - quirk->mem = g_new0(MemoryRegion, 2); > - quirk->nr_mem = 2; > + quirk = vfio_quirk_alloc(2); > igd = quirk->data = g_malloc0(sizeof(*igd)); > igd->vdev = vdev; > igd->index = ~0; > Reviewed-by: Eric Auger Thanks Eric