From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LUoNY-000239-GM for qemu-devel@nongnu.org; Wed, 04 Feb 2009 15:29:48 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LUoNX-00022n-2q for qemu-devel@nongnu.org; Wed, 04 Feb 2009 15:29:48 -0500 Received: from [199.232.76.173] (port=47472 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LUoNW-00022k-Rk for qemu-devel@nongnu.org; Wed, 04 Feb 2009 15:29:46 -0500 Received: from mx2.redhat.com ([66.187.237.31]:37706) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LUoNW-0004pB-EE for qemu-devel@nongnu.org; Wed, 04 Feb 2009 15:29:46 -0500 Message-ID: <4989FACD.6090309@redhat.com> Date: Wed, 04 Feb 2009 22:30:05 +0200 From: Avi Kivity MIME-Version: 1.0 References: <1233750314-23301-1-git-send-email-avi@redhat.com> <1233750314-23301-2-git-send-email-avi@redhat.com> <4989EC29.9050705@us.ibm.com> In-Reply-To: <4989EC29.9050705@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 1/4] Add a scatter-gather list type and accessors Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: qemu-devel@nongnu.org Anthony Liguori wrote: > Avi Kivity wrote: >> Scatter-gather lists are used extensively in dma-capable devices; a >> single data structure allows more code reuse later on. >> >> diff --git a/dma-helpers.c b/dma-helpers.c >> new file mode 100644 >> index 0000000..315834e >> --- /dev/null >> +++ b/dma-helpers.c >> @@ -0,0 +1,29 @@ >> > > Needs copyright/license. Sure. Is it possible to have a blanket license for files which don't have explicit terms? I don't much like boilerplate. > >> +#include "dma.h" >> + >> + >> +void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint) >> +{ >> + qsg->sg = qemu_malloc(alloc_hint * sizeof(ScatterGatherEntry)); >> > > Would be nice to check for malloc failures and fail gracefully at least. Do you mean an exit(1)? If so we could just put it in qemu_malloc(). Propagation is usually not possible since hardware is not expected to run out of memory. It will also be a never-tested code path. >> >> +void qemu_sglist_add(QEMUSGList *qsg, target_phys_addr_t base, >> + target_phys_addr_t len) >> +{ >> + if (qsg->nsg == qsg->nalloc) { >> + qsg->nalloc = 2 * qsg->nalloc + 1; >> > > Do you really want exponential growth verses linear growth? The sg > lists should be relatively small so linear growth should be fine. > I expect this to trigger rarely since the allocation hint should suffice nearly 100% of the time. But in case we miss, it's better to reallocate as little as possible. (what I really want is std::vector<>) -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.