All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Vivier <lvivier@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: Michael Roth <mdroth@linux.vnet.ibm.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH v3] pci: allow 0 address for PCI IO/MEM regions
Date: Thu, 6 Aug 2015 10:08:03 +0200	[thread overview]
Message-ID: <55C315E3.60701@redhat.com> (raw)
In-Reply-To: <55B5E99F.5090901@redhat.com>

Ping ?

On 27/07/2015 10:19, Laurent Vivier wrote:
> Alex,
> 
> could you ACK this patch ?
> 
> It's not perfect and it will be removed later, but for the moment it
> allows to hotplug PCI card in pseries.
> 
> Laurent
> 
> On 24/07/2015 10:35, Laurent Vivier wrote:
>> Some kernels program a 0 address for io regions. PCI 3.0 spec
>> section 6.2.5.1 doesn't seem to disallow this.
>>
>> based on patch by Michael Roth <mdroth@linux.vnet.ibm.com>
>>
>> Add pci_allow_0_addr in MachineClass to conditionally
>> allow addr 0 for pseries, as this can break other architectures.
>>
>> This patch allows to hotplug PCI card in pseries machine, as the first
>> added card BAR0 is always set to 0 address.
>>
>> This as a temporary hack, waiting to fix PCI memory priorities for more
>> machine types...
>>
>> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
>> ---
>> v2: move flag from PCIBus to MachineClass, rename it pci_allow_0_address
>> v3: change author, update commit message.
>>  hw/pci/pci.c        | 12 +++++++++---
>>  hw/ppc/spapr.c      |  1 +
>>  include/hw/boards.h |  3 ++-
>>  3 files changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
>> index a017614..9f57aea 100644
>> --- a/hw/pci/pci.c
>> +++ b/hw/pci/pci.c
>> @@ -38,6 +38,7 @@
>>  #include "hw/pci/msix.h"
>>  #include "exec/address-spaces.h"
>>  #include "hw/hotplug.h"
>> +#include "hw/boards.h"
>>  
>>  //#define DEBUG_PCI
>>  #ifdef DEBUG_PCI
>> @@ -1065,6 +1066,10 @@ static pcibus_t pci_bar_address(PCIDevice *d,
>>      pcibus_t new_addr, last_addr;
>>      int bar = pci_bar(d, reg);
>>      uint16_t cmd = pci_get_word(d->config + PCI_COMMAND);
>> +    Object *machine = qdev_get_machine();
>> +    ObjectClass *oc = object_get_class(machine);
>> +    MachineClass *mc = MACHINE_CLASS(oc);
>> +    bool allow_0_address = mc->pci_allow_0_address;
>>  
>>      if (type & PCI_BASE_ADDRESS_SPACE_IO) {
>>          if (!(cmd & PCI_COMMAND_IO)) {
>> @@ -1075,7 +1080,8 @@ static pcibus_t pci_bar_address(PCIDevice *d,
>>          /* Check if 32 bit BAR wraps around explicitly.
>>           * TODO: make priorities correct and remove this work around.
>>           */
>> -        if (last_addr <= new_addr || new_addr == 0 || last_addr >= UINT32_MAX) {
>> +        if (last_addr <= new_addr || last_addr >= UINT32_MAX ||
>> +            (!allow_0_address && new_addr == 0)) {
>>              return PCI_BAR_UNMAPPED;
>>          }
>>          return new_addr;
>> @@ -1099,8 +1105,8 @@ static pcibus_t pci_bar_address(PCIDevice *d,
>>      /* XXX: as we cannot support really dynamic
>>         mappings, we handle specific values as invalid
>>         mappings. */
>> -    if (last_addr <= new_addr || new_addr == 0 ||
>> -        last_addr == PCI_BAR_UNMAPPED) {
>> +    if (last_addr <= new_addr || last_addr == PCI_BAR_UNMAPPED ||
>> +        (!allow_0_address && new_addr == 0)) {
>>          return PCI_BAR_UNMAPPED;
>>      }
>>  
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index a6f1947..bf0c64f 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
>> @@ -1835,6 +1835,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
>>      mc->default_ram_size = 512 * M_BYTE;
>>      mc->kvm_type = spapr_kvm_type;
>>      mc->has_dynamic_sysbus = true;
>> +    mc->pci_allow_0_address = true;
>>  
>>      fwc->get_dev_path = spapr_get_fw_dev_path;
>>      nc->nmi_monitor_handler = spapr_nmi;
>> diff --git a/include/hw/boards.h b/include/hw/boards.h
>> index 2aec9cb..3f84afd 100644
>> --- a/include/hw/boards.h
>> +++ b/include/hw/boards.h
>> @@ -100,7 +100,8 @@ struct MachineClass {
>>          no_cdrom:1,
>>          no_sdcard:1,
>>          has_dynamic_sysbus:1,
>> -        no_tco:1;
>> +        no_tco:1,
>> +        pci_allow_0_address:1;
>>      int is_default;
>>      const char *default_machine_opts;
>>      const char *default_boot_order;
>>
> 

  reply	other threads:[~2015-08-06  9:36 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1437566099-10004-1-git-send-email-lvivier@redhat.com>
2015-07-23 18:24 ` [Qemu-devel] [PATCH v2] pci: allow 0 address for PCI IO/MEM regions Laurent Vivier
2015-07-23 18:30   ` Michael S. Tsirkin
2015-07-23 20:48     ` [Qemu-devel] [Qemu-ppc] " Benjamin Herrenschmidt
2015-07-23 21:18       ` Michael S. Tsirkin
2015-07-23 20:46   ` Benjamin Herrenschmidt
2015-07-23 21:00     ` Peter Maydell
2015-07-23 21:10       ` Michael S. Tsirkin
2015-07-23 21:19         ` Peter Maydell
2015-07-23 21:24           ` Peter Maydell
2015-07-23 21:38             ` Michael Roth
2015-07-23 21:49               ` Michael Roth
2015-07-24  8:46                 ` Peter Maydell
2015-07-24  8:58                   ` Laurent Vivier
2015-07-23 21:46       ` Benjamin Herrenschmidt
2015-07-23 22:42         ` Michael S. Tsirkin
2015-07-24  8:35 ` [Qemu-devel] [PATCH v3] " Laurent Vivier
2015-07-27  8:19   ` [Qemu-devel] [Qemu-ppc] " Laurent Vivier
2015-08-06  8:08     ` Laurent Vivier [this message]
2015-08-11  8:50     ` Alexander Graf
2015-08-11  9:04       ` Laurent Vivier

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=55C315E3.60701@redhat.com \
    --to=lvivier@redhat.com \
    --cc=agraf@suse.de \
    --cc=david@gibson.dropbear.id.au \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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.