qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration
Date: Wed, 27 May 2009 17:33:37 -0500	[thread overview]
Message-ID: <4A1DBFC1.6060603@codemonkey.ws> (raw)
In-Reply-To: <4A1D5B44.3040207@redhat.com>

Avi Kivity wrote:
> Anthony Liguori wrote:
>> Avi Kivity wrote:
>>
>> That's because it's an internal performance hack.  We should just 
>> avoid the PCI routines for that device, if we can, although that 
>> suggests we need a map hook which is ugly.  Clever ideas are welcome.
>
> My original proposal.  Note it uses ram addresses, not cpu physical 
> addresses.

I've thought about it, and I think what I find confusing about your API 
is that pci_register_physical_memory includes the phrase "physical 
memory".  A PIO IO region on x86 is definitely not physical memory though.

It overloads the term physical memory and still requires separate APIs 
for IO regions and MEM regions.  I know you mentioned that ram_addr_t 
could be overloaded to also support IO regions but IMHO that's rather 
confusing.  If the new code looked like:

    s->rtl8139_mmio_io_addr =
    cpu_register_io_memory(0, rtl8139_mmio_read, rtl8139_mmio_write, s);

    s->rtl8139_io_io_addr =
    cpu_register_io_memory(0, rtl8139_ioport_read, rtl8139_ioport_write, s);

    pci_register_io_region(&d->dev, 0, 0x100,
                           PCI_ADDRESS_SPACE_IO,  s->rtl8139_io_io_addr);

    pci_register_io_region(&d->dev, 1, 0x100,
                           PCI_ADDRESS_SPACE_MEM, s->rtl8139_mmio_addr);

I think it would be more understandable.  However, I think that the 
normal case is exactly this work flow so I think it makes sense to 
collapse it into two function calls.  So it could look like:

    pci_register_io_region(&d->dev, 0, 0x100,
                           PCI_ADDRESS_SPACE_IO, rtl8139_ioport_read, 
rtl8139_ioport_write, s);

    pci_register_io_region(&d->dev, 1, 0x100,
                           PCI_ADDRESS_SPACE_MEM, rtl8139_mmio_read, 
rtl8139_mmio_write, s);

Moreover, you could probably drop the opaque parameter and and just use 
d->dev.  I hope it's possible to get from one to the other.

You could still have a two step process for where it's absolutely 
required (like VGA optimization).

I think it's worth looking at changing the signatures of the mem 
read/write functions.  Introducing a size parameter would greatly 
simplify adding 64-bit IO support, for instance.

I would argue that ram_addr_t is the wrong thing to overload for PIO but 
as long as it's not exposed in the common API, it doesn't matter that 
much to me.

Regards,

Anthony Liguori

  reply	other threads:[~2009-05-27 22:33 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-24  9:29 [Qemu-devel] [PATCH 0/3] Object-based physical memory management Avi Kivity
2009-05-24  9:29 ` [Qemu-devel] [PATCH 1/3] Add PhysicalMemoryRegion type Avi Kivity
2009-05-27 14:16   ` Christoph Hellwig
2009-05-27 15:07     ` Avi Kivity
2009-05-24  9:29 ` [Qemu-devel] [PATCH 2/3] Add PCI memory region registration Avi Kivity
2009-05-27 14:08   ` Anthony Liguori
2009-05-27 15:02     ` Avi Kivity
2009-05-27 15:11       ` Anthony Liguori
2009-05-27 15:24         ` Avi Kivity
2009-05-27 22:33           ` Anthony Liguori [this message]
2009-05-31 11:02             ` Christoph Hellwig
2009-05-31 11:50               ` Avi Kivity
2009-05-31 11:47             ` Avi Kivity
2009-05-31 13:52               ` Anthony Liguori
2009-05-31 13:03             ` Avi Kivity
2009-05-24  9:29 ` [Qemu-devel] [PATCH 3/3] Convert RTL8139 to use PCI memory regitration facility Avi Kivity
2009-05-27 14:08 ` [Qemu-devel] [PATCH 0/3] Object-based physical memory management Anthony Liguori
2009-05-27 14:54   ` 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=4A1DBFC1.6060603@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --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).