From: Marcelo Tosatti <mtosatti@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
Cam Macdonell <cam@cs.ualberta.ca>
Subject: Re: [PATCH 10/10] introduce qemu_ram_map
Date: Mon, 26 Apr 2010 15:50:55 -0300 [thread overview]
Message-ID: <20100426185055.GG21425@amt.cnet> (raw)
In-Reply-To: <4BD5DB72.3030707@codemonkey.ws>
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.
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);
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:51 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-26 17:58 [PATCH 00/10] [PULL] qemu-kvm.git uq/master queue Marcelo Tosatti
2010-04-26 17:58 ` [PATCH 01/10] KVM: x86: Add debug register saving and restoring Marcelo Tosatti
2010-04-26 17:58 ` [PATCH 02/10] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
2010-04-26 17:58 ` [PATCH 03/10] kvm: handle internal error Marcelo Tosatti
2010-04-26 17:59 ` [PATCH 04/10] kvm: allow qemu to set EPT identity mapping address Marcelo Tosatti
2010-04-26 17:59 ` [PATCH 05/10] kvm_init_vcpu requires global lock held Marcelo Tosatti
2010-04-26 17:59 ` [PATCH 06/10] kvm: remove explicit kvm_arch_reset_vcpu from kvm_init_vcpu Marcelo Tosatti
2010-04-28 15:39 ` Anthony Liguori
2010-04-28 16:22 ` [Qemu-devel] " Marcelo Tosatti
2010-04-28 16:42 ` Marcelo Tosatti
2010-04-28 16:46 ` Anthony Liguori
2010-04-26 17:59 ` [PATCH 07/10] vga: fix typo in length passed to kvm_log_stop Marcelo Tosatti
2010-04-26 17:59 ` [PATCH 08/10] introduce leul_to_cpu Marcelo Tosatti
2010-04-26 17:59 ` [PATCH 09/10] kvm: port qemu-kvm's bitmap scanning Marcelo Tosatti
2010-04-27 4:49 ` Yoshiaki Tamura
2010-04-27 14:42 ` Marcelo Tosatti
2010-04-27 23:09 ` Yoshiaki Tamura
2010-04-26 17:59 ` [PATCH 10/10] introduce qemu_ram_map Marcelo Tosatti
2010-04-26 18:27 ` 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 [this message]
2010-04-26 18:57 ` Anthony Liguori
2010-04-26 19:14 ` Marcelo Tosatti
2010-04-26 19:20 ` [Qemu-devel] " 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 ` [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=20100426185055.GG21425@amt.cnet \
--to=mtosatti@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=anthony@codemonkey.ws \
--cc=cam@cs.ualberta.ca \
--cc=kvm@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.