qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration


From: Avi Kivity
Subject: Re: [Qemu-devel] [PATCH 2/3] Add PCI memory region registration
Date: Wed, 27 May 2009 18:02:28 +0300
User-agent: Thunderbird 2.0.0.21 (X11/20090320)

Anthony Liguori wrote:

+PCIIORegionComponent *pci_register_physical_memory(PCIDevice *pci_dev,
+                                                   int region_num,
+ target_phys_addr_t size, + ram_addr_t ram_addr);

PCI devices should not care about physical memory. They should only care about IO regions. It ought to look something like:

enum {
  PCI_REGION_IO,
  PCI_REGION_MEM,
};

typedef struct PCIIOFunction
{
  uint32_t (*read)(void *opaque, uint64_t offset, int size);
  void (*write)(void *opaque, uint64_t offset, int size, uint64_t value);
} PCIIOFunction;

That doesn't work for direct-mapped memory like the cirrus framebuffer or host devices.

I also don't think we need to add another layer of indirection here (for traditional callback based regions), where the physical memory layer calls one set of callbacks which calls the PCIIOFunction callbacks.


pci_register_io_region(PCIDevice *pci_dev,
                                    int region_num,
                                    int region_type,
                                    int order,
                                    PCIIOFunction *io_func,
                                    void *opaque);

The current PCI map API goes away.

At the end of the conversion, yes.

Devices don't have to know anything about that. Special handling for PIO/MMIO for PCI devices also go away. Devices can register PCI_REGION_IO regions and they'll be automatically mapped to MMIO for non-x86 architectures. This means a lot of current PCI devices can be built once instead of being built for each architecture.

That too can be handled at the physical memory layer by allocating a dedicated ram address with callbacks to do the translation. That fixes non-pci too (ia64 does it in qemu-kvm.git).

If you want, we can setup a temporary branch in qemu to stage the conversion. I'm willing to help do the conversion too.

It's now memory-tracking in qemu-kvm.git (a rebasable branch, so don't branch off it). Patches welcome.

--
error compiling committee.c: too many arguments to function





reply via email to

[Prev in Thread] Current Thread [Next in Thread]