From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LOxDU-0004Nv-GD for qemu-devel@nongnu.org; Mon, 19 Jan 2009 11:43:12 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LOxDS-0004N0-Tj for qemu-devel@nongnu.org; Mon, 19 Jan 2009 11:43:12 -0500 Received: from [199.232.76.173] (port=39299 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LOxDS-0004Ms-Os for qemu-devel@nongnu.org; Mon, 19 Jan 2009 11:43:10 -0500 Received: from mx2.redhat.com ([66.187.237.31]:40252) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LOxDS-0005NA-6R for qemu-devel@nongnu.org; Mon, 19 Jan 2009 11:43:10 -0500 Message-ID: <4974ACD0.601@redhat.com> Date: Mon, 19 Jan 2009 18:39:44 +0200 From: Avi Kivity MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 1/5] Add target memory mapping API References: <1232308399-21679-1-git-send-email-avi@redhat.com> <4974943B.4020507@redhat.com> <49749EC5.3080704@codemonkey.ws> <200901191618.10082.paul@codesourcery.com> <4974AB48.1070301@codemonkey.ws> In-Reply-To: <4974AB48.1070301@codemonkey.ws> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: Ian Jackson , Paul Brook , qemu-devel@nongnu.org Anthony Liguori wrote: > Paul Brook wrote: >> It looks like what you're actually doing is pushing the bounce buffer >> allocation into the individual packet consumers. >> >> Maybe a solution to this is a 'do IO on IOVEC' actor, with an >> additional flag that says whether it is acceptable to split the >> allocation. That way both block and packet interfaces use the same >> API, and avoids proliferation of manual bounce buffers in packet >> devices. >> > > I think there may be utility in having packet devices provide the > bounce buffers, in which case, you could probably unique both into a > single function with a flag. But why not just have two separate > functions? > > Those two functions can live in exec.c too. The nice thing about > using map() is that it's easily overriden and chained. So what I'm > proposing. > > cpu_physical_memory_map() > cpu_physical_memory_unmap() This should be the baseline API with the rest using it. > do_streaming_IO(map, unmap, ioworker, opaque); Why pass map and unmap? grant based devices needn't go through this at all, since you never mix grants and physical addresses, and since grants never need bouncing. > do_packet_IO(map, unmap, buffer, size, ioworker, opaque); If you pass the buffer then the device needs to allocate large amounts of bounce memory. -- error compiling committee.c: too many arguments to function