Patchwork ahci: Unbreak bar registration (was: Re: [PATCH 05/10] ich/ahci: convert to pci_register_bar_simple())

login
register
mail settings
Submitter Jan Kiszka
Date May 8, 2011, 5:54 p.m.
Message ID <4DC6D8EC.9000605@web.de>
Download mbox | patch
Permalink /patch/94595/
State New
Headers show

Comments

Jan Kiszka - May 8, 2011, 5:54 p.m.
On 2011-04-04 17:28, Avi Kivity wrote:
> Signed-off-by: Avi Kivity <avi@redhat.com>
> ---
>  hw/ide/ahci.c |    9 ---------
>  hw/ide/ahci.h |    3 ---
>  hw/ide/ich.c  |    3 +--
>  3 files changed, 1 insertions(+), 14 deletions(-)
> 
> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
> index 98bdf70..c6e0c77 100644
> --- a/hw/ide/ahci.c
> +++ b/hw/ide/ahci.c
> @@ -1129,15 +1129,6 @@ void ahci_uninit(AHCIState *s)
>      qemu_free(s->dev);
>  }
>  
> -void ahci_pci_map(PCIDevice *pci_dev, int region_num,
> -        pcibus_t addr, pcibus_t size, int type)
> -{
> -    struct AHCIPCIState *d = (struct AHCIPCIState *)pci_dev;
> -    AHCIState *s = &d->ahci;
> -
> -    cpu_register_physical_memory(addr, size, s->mem);
> -}
> -
>  void ahci_reset(void *opaque)
>  {
>      struct AHCIPCIState *d = opaque;
> diff --git a/hw/ide/ahci.h b/hw/ide/ahci.h
> index a4560c4..dc86951 100644
> --- a/hw/ide/ahci.h
> +++ b/hw/ide/ahci.h
> @@ -325,9 +325,6 @@ typedef struct NCQFrame {
>  void ahci_init(AHCIState *s, DeviceState *qdev, int ports);
>  void ahci_uninit(AHCIState *s);
>  
> -void ahci_pci_map(PCIDevice *pci_dev, int region_num,
> -        pcibus_t addr, pcibus_t size, int type);
> -
>  void ahci_reset(void *opaque);
>  
>  #endif /* HW_IDE_AHCI_H */
> diff --git a/hw/ide/ich.c b/hw/ide/ich.c
> index f242d7a..eb00f03 100644
> --- a/hw/ide/ich.c
> +++ b/hw/ide/ich.c
> @@ -95,8 +95,7 @@ static int pci_ich9_ahci_init(PCIDevice *dev)
>      qemu_register_reset(ahci_reset, d);
>  
>      /* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */
> -    pci_register_bar(&d->card, 5, 0x1000, PCI_BASE_ADDRESS_SPACE_MEMORY,
> -                     ahci_pci_map);
> +    pci_register_bar_simple(&d->card, 5, 0x1000, 0, d->ahci.mem);
>  
>      msi_init(dev, 0x50, 1, true, false);
>  

This breaks AHCI as ahci.mem is not initialized at this point. Fix
below.

Did you check the rest of your series regarding such issues?

Jan

-----------8<----------

From: Jan Kiszka <jan.kiszka@siemens.com>

Fix regression of 667bb59: ahci_init initializes ahci.mem, so we have to
move bar registration after it.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/ide/ich.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

Patch

diff --git a/hw/ide/ich.c b/hw/ide/ich.c
index e44339b..6150ce3 100644
--- a/hw/ide/ich.c
+++ b/hw/ide/ich.c
@@ -93,14 +93,14 @@  static int pci_ich9_ahci_init(PCIDevice *dev)
 
     qemu_register_reset(ahci_reset, d);
 
-    /* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */
-    pci_register_bar_simple(&d->card, 5, 0x1000, 0, d->ahci.mem);
-
     msi_init(dev, 0x50, 1, true, false);
 
     ahci_init(&d->ahci, &dev->qdev, 6);
     d->ahci.irq = d->card.irq[0];
 
+    /* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */
+    pci_register_bar_simple(&d->card, 5, 0x1000, 0, d->ahci.mem);
+
     return 0;
 }