From: Anthony Liguori <anthony@codemonkey.ws>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/5] Add map client retry notification
Date: Thu, 22 Jan 2009 12:51:29 -0600 [thread overview]
Message-ID: <4978C031.5080306@codemonkey.ws> (raw)
In-Reply-To: <18808.26322.736884.264358@mariner.uk.xensource.com>
Ian Jackson wrote:
> Avi Kivity writes ("[Qemu-devel] [PATCH 2/5] Add map client retry notification"):
>
>> The target memory mapping API may fail if the bounce buffer resources
>> are exhausted. Add a notification mechanism to allow clients to retry
>> the mapping operation when resources become available again.
>>
>
> Does this API not suffer from the potential deadlock described by
> Anthony ?
>
> Imagine that for some reason bounce buffers are in use. If we have a
> client which wants to do a single writev on a tap device it will even
> deadlock by itself:
>
> map(<block 0>) succeeds
> map(<block 1>) fails, NULL
> register_map_client
>
> but the callback will never happen because the client is effectively
> waiting for itself to release its own mapping.
>
Yes, a client is not allowed to do this. To put it another way (and
perhaps this needs to be documented), register_map_client can only be
used safely if a client unmaps all of it's existing mappings.
> Since callers cannot assume that they can map more than one range at
> once (since there's only one bounce buffer), any caller which needs to
> do scatter-gather (like a tap device, as Anthony points out) needs to
> invent its own bounce buffers. That seems like a waste of effort.
>
It needs to be able to fall back to something like cpu_physical_memory_rw.
> There should be a single bounce buffer fallback mechanism, and it
> should be sufficiently powerful that it can be used for tap devices,
> which means that the calling device emulation must present a single
> scatter-gather list to the API all in one go.
>
You could have an API like:
try_to_map_or_bounce(list-of-phys-iovecs, buffer-to-bounce-to, callback,
opaque);
That would be a nice addition for packet IO devices. Better yet, it
should be:
try_to_map_or_bounce(map-func, unmap-func, iofunc, opaque,
list-of-phys-iovecs, buffer-to-bounce-to)
If you go back and look at my previous mails about packet helpers and
stream helpers, that's just about the signature of my proposed packet
helper. Like I mentioned earlier, I definitely think we should have
such a thing.
Regards,
Anthony Liguori
> Ian.
>
>
>
next prev parent reply other threads:[~2009-01-22 18:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-22 10:36 [Qemu-devel] [PATCH 0/5] Direct memory access for devices (v2) Avi Kivity
2009-01-22 10:36 ` [Qemu-devel] [PATCH 1/5] Add target memory mapping API Avi Kivity
2009-01-22 12:24 ` Ian Jackson
2009-01-22 10:36 ` [Qemu-devel] [PATCH 2/5] Add map client retry notification Avi Kivity
2009-01-22 12:30 ` Ian Jackson
2009-01-22 18:51 ` Anthony Liguori [this message]
2009-01-22 10:36 ` [Qemu-devel] [PATCH 3/5] I/O vector helpers Avi Kivity
2009-01-22 10:36 ` [Qemu-devel] [PATCH 4/5] Vectored block device API Avi Kivity
2009-01-22 10:36 ` [Qemu-devel] [PATCH 5/5] Convert IDE to directly access guest memory Avi Kivity
2009-01-22 16:59 ` [Qemu-devel] Re: [PATCH 0/5] Direct memory access for devices (v2) Anthony Liguori
-- strict thread matches above, loose matches on Subject: below --
2009-01-18 19:53 [Qemu-devel] [PATCH 0/5] Direct memory access for devices Avi Kivity
2009-01-18 19:53 ` [Qemu-devel] [PATCH 2/5] Add map client retry notification Avi Kivity
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4978C031.5080306@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).