From: Anthony Liguori <anthony@codemonkey.ws>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
Cam Macdonell <cam@cs.ualberta.ca>,
qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: [Qemu-devel] Re: [PATCH 10/10] introduce qemu_ram_map
Date: Mon, 26 Apr 2010 13:57:37 -0500 [thread overview]
Message-ID: <4BD5E221.9080105@codemonkey.ws> (raw)
In-Reply-To: <20100426185055.GG21425@amt.cnet>
On 04/26/2010 01:50 PM, Marcelo Tosatti wrote:
> On Mon, Apr 26, 2010 at 01:29:06PM -0500, Anthony Liguori wrote:
>
>> On 04/26/2010 12:59 PM, Marcelo Tosatti wrote:
>>
>>> Which allows drivers to register an mmaped region into ram block mappings.
>>> To be used by device assignment driver.
>>>
>>>
>> This is not kvm specific and not required by this pull request so it
>> shouldn't really be part of the pull. Something like this should
>> only be added when there's an actual consumer.
>>
> The user will be hw/device-assignment.c in qemu-kvm. And also Cam has
> the need for a similar interface for shared memory drivers.
>
It should be part of one of those submissions.
> Index: qemu-kvm/hw/device-assignment.c
> ===================================================================
> --- qemu-kvm.orig/hw/device-assignment.c 2010-04-22 16:21:30.000000000 -0400
> +++ qemu-kvm/hw/device-assignment.c 2010-04-22 17:36:57.000000000 -0400
> @@ -256,10 +256,7 @@
> AssignedDevice *r_dev = container_of(pci_dev, AssignedDevice, dev);
> AssignedDevRegion *region =&r_dev->v_addrs[region_num];
> PCIRegion *real_region =&r_dev->real_device.regions[region_num];
> - pcibus_t old_ephys = region->e_physbase;
> - pcibus_t old_esize = region->e_size;
> - int first_map = (region->e_size == 0);
> - int ret = 0;
> + int ret = 0, flags = 0;
>
> DEBUG("e_phys=%08" FMT_PCIBUS " r_virt=%p type=%d len=%08" FMT_PCIBUS " region_num=%d \n",
> e_phys, region->u.r_virtbase, type, e_size, region_num);
> @@ -267,30 +264,22 @@
> region->e_physbase = e_phys;
> region->e_size = e_size;
>
> - if (!first_map)
> - kvm_destroy_phys_mem(kvm_context, old_ephys,
> - TARGET_PAGE_ALIGN(old_esize));
> -
> if (e_size> 0) {
> +
> + if (region_num == PCI_ROM_SLOT)
> + flags |= IO_MEM_ROM;
> +
> + cpu_register_physical_memory(e_phys, e_size, region->memory_index | flags);
> +
> /* deal with MSI-X MMIO page */
> if (real_region->base_addr<= r_dev->msix_table_addr&&
> real_region->base_addr + real_region->size>=
> r_dev->msix_table_addr) {
> int offset = r_dev->msix_table_addr - real_region->base_addr;
> - ret = munmap(region->u.r_virtbase + offset, TARGET_PAGE_SIZE);
> - if (ret == 0)
> - DEBUG("munmap done, virt_base 0x%p\n",
> - region->u.r_virtbase + offset);
> - else {
> - fprintf(stderr, "%s: fail munmap msix table!\n", __func__);
> - exit(1);
> - }
> +
> cpu_register_physical_memory(e_phys + offset,
> TARGET_PAGE_SIZE, r_dev->mmio_index);
> }
> - ret = kvm_register_phys_mem(kvm_context, e_phys,
> - region->u.r_virtbase,
> - TARGET_PAGE_ALIGN(e_size), 0);
> }
>
> if (ret != 0) {
> @@ -539,6 +528,15 @@
> pci_dev->v_addrs[i].u.r_virtbase +=
> (cur_region->base_addr& 0xFFF);
>
> +
> + if (!slow_map) {
> + void *virtbase = pci_dev->v_addrs[i].u.r_virtbase;
> +
> + pci_dev->v_addrs[i].memory_index = qemu_ram_map(cur_region->size,
> + virtbase);
> + } else
> + pci_dev->v_addrs[i].memory_index = 0;
> +
> pci_register_bar((PCIDevice *) pci_dev, i,
> cur_region->size, t,
> slow_map ? assigned_dev_iomem_map_slow
> @@ -726,10 +724,6 @@
> kvm_remove_ioperm_data(region->u.r_baseport, region->r_size);
> continue;
> } else if (pci_region->type& IORESOURCE_MEM) {
> - if (region->e_size> 0)
> - kvm_destroy_phys_mem(kvm_context, region->e_physbase,
> - TARGET_PAGE_ALIGN(region->e_size));
> -
> if (region->u.r_virtbase) {
> int ret = munmap(region->u.r_virtbase,
> (pci_region->size + 0xFFF)& 0xFFFFF000);
>
How does hot unplug get dealt with?
Regards,
Anthony Liguori
> Index: qemu-kvm/hw/device-assignment.h
> ===================================================================
> --- qemu-kvm.orig/hw/device-assignment.h 2010-04-22 16:21:30.000000000 -0400
> +++ qemu-kvm/hw/device-assignment.h 2010-04-22 16:24:32.000000000 -0400
> @@ -63,7 +63,7 @@
>
> typedef struct {
> pcibus_t e_physbase;
> - uint32_t memory_index;
> + ram_addr_t memory_index;
> union {
> void *r_virtbase; /* mmapped access address for memory regions */
> uint32_t r_baseport; /* the base guest port for I/O regions */
>
next prev parent reply other threads:[~2010-04-26 18:57 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-26 17:58 [Qemu-devel] [PATCH 00/10] [PULL] qemu-kvm.git uq/master queue Marcelo Tosatti
2010-04-26 17:58 ` [Qemu-devel] [PATCH 01/10] KVM: x86: Add debug register saving and restoring Marcelo Tosatti
2010-04-26 17:58 ` [Qemu-devel] [PATCH 02/10] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
2010-04-26 17:58 ` [Qemu-devel] [PATCH 03/10] kvm: handle internal error Marcelo Tosatti
2010-04-26 17:59 ` [Qemu-devel] [PATCH 04/10] kvm: allow qemu to set EPT identity mapping address Marcelo Tosatti
2010-04-26 17:59 ` [Qemu-devel] [PATCH 05/10] kvm_init_vcpu requires global lock held Marcelo Tosatti
2010-04-26 17:59 ` [Qemu-devel] [PATCH 06/10] kvm: remove explicit kvm_arch_reset_vcpu from kvm_init_vcpu Marcelo Tosatti
2010-04-28 15:39 ` [Qemu-devel] " Anthony Liguori
2010-04-28 16:22 ` Marcelo Tosatti
2010-04-28 16:42 ` Marcelo Tosatti
2010-04-28 16:46 ` Anthony Liguori
2010-04-26 17:59 ` [Qemu-devel] [PATCH 07/10] vga: fix typo in length passed to kvm_log_stop Marcelo Tosatti
2010-04-26 17:59 ` [Qemu-devel] [PATCH 08/10] introduce leul_to_cpu Marcelo Tosatti
2010-04-26 17:59 ` [Qemu-devel] [PATCH 09/10] kvm: port qemu-kvm's bitmap scanning Marcelo Tosatti
2010-04-27 4:49 ` [Qemu-devel] " Yoshiaki Tamura
2010-04-27 14:42 ` Marcelo Tosatti
2010-04-27 23:09 ` Yoshiaki Tamura
2010-04-26 17:59 ` [Qemu-devel] [PATCH 10/10] introduce qemu_ram_map Marcelo Tosatti
2010-04-26 18:27 ` [Qemu-devel] " Anthony Liguori
2010-04-26 18:49 ` Marcelo Tosatti
2010-04-26 18:54 ` Anthony Liguori
2010-04-27 14:28 ` Cam Macdonell
2010-04-27 14:49 ` Marcelo Tosatti
2010-04-26 18:29 ` Anthony Liguori
2010-04-26 18:50 ` Marcelo Tosatti
2010-04-26 18:57 ` Anthony Liguori [this message]
2010-04-26 19:14 ` Marcelo Tosatti
2010-04-26 19:20 ` Anthony Liguori
2010-04-26 19:45 ` Marcelo Tosatti
2010-04-27 14:32 ` Cam Macdonell
2010-04-27 14:50 ` Marcelo Tosatti
2010-05-03 13:02 ` [Qemu-devel] Re: [PATCH 00/10] [PULL] qemu-kvm.git uq/master queue Anthony Liguori
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=4BD5E221.9080105@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=aliguori@us.ibm.com \
--cc=cam@cs.ualberta.ca \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@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).