qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 */
>    

  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).