qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jason Baron <jbaron@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: aliguori@us.ibm.com, juzhang@redhat.com, mst@redhat.com,
	jan.kiszka@siemens.com, qemu-devel@nongnu.org, agraf@suse.de,
	yamahata@valinux.co.jp, alex.williamson@redhat.com,
	kevin@koconnor.net, avi@redhat.com, mkletzan@redhat.com,
	lcapitulino@redhat.com, afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 04/25] ahci: add ide device initialization helper
Date: Fri, 21 Sep 2012 15:37:36 -0400	[thread overview]
Message-ID: <20120921193735.GC27402@redhat.com> (raw)
In-Reply-To: <8762778o9x.fsf@blackfin.pond.sub.org>

On Fri, Sep 21, 2012 at 04:05:14PM +0200, Markus Armbruster wrote:
> Jason Baron <jbaron@redhat.com> writes:
> 
> > From: Isaku Yamahata <yamahata@valinux.co.jp>
> >
> > Introduce a helper function which initializes the ahci port with ide devices.
> > It will be used by q35 support.
> >
> > Cc: Alexander Graf <agraf@suse.de>
> > Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> > Signed-off-by: Jason Baron <jbaron@redhat.com>
> > ---
> >  hw/ide.h      |    3 +++
> >  hw/ide/ahci.c |   16 ++++++++++++++++
> >  2 files changed, 19 insertions(+), 0 deletions(-)
> >
> > diff --git a/hw/ide.h b/hw/ide.h
> > index 2db4079..8df872e 100644
> > --- a/hw/ide.h
> > +++ b/hw/ide.h
> > @@ -36,4 +36,7 @@ int ide_get_bios_chs_trans(BusState *bus, int unit);
> >  /* ide/core.c */
> >  void ide_drive_get(DriveInfo **hd, int max_bus);
> >  
> > +/* ide/ahci.c */
> > +void pci_ahci_ide_create_devs(PCIDevice *pci_dev, DriveInfo **hd_table);
> > +
> >  #endif /* HW_IDE_H */
> > diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
> > index 5ea3cad..9561210 100644
> > --- a/hw/ide/ahci.c
> > +++ b/hw/ide/ahci.c
> > @@ -1260,3 +1260,19 @@ static void sysbus_ahci_register_types(void)
> >  }
> >  
> >  type_init(sysbus_ahci_register_types)
> > +
> > +void pci_ahci_ide_create_devs(PCIDevice *pci_dev, DriveInfo **hd_table)
> > +{
> > +    struct AHCIPCIState *dev = DO_UPCAST(struct AHCIPCIState, card, pci_dev);
> > +    int i;
> > +
> > +    for (i = 0; i < dev->ahci.ports; i++) {
> > +        /* master device only, ignore slaves */
> > +        if (hd_table[i * MAX_IDE_DEVS] == NULL) {
> > +            continue;
> > +        }
> > +        ide_create_drive(&dev->ahci.dev[i].port, 0,
> > +                         hd_table[i * MAX_IDE_DEVS]);
> > +    }
> > +}
> > +
> 
> Ignores odd entries in hd_table[] (MAX_IDE_DEVS is 2).  Here's my
> attempt at explaining why.
> 
> -drive has parameters bus, unit, and index.  index and (bus, unit) are
> related in a well-known way that depends on parameter if.  For if=ide,
> index = bus * 2 + unit.  This relationship is ABI, i.e. it cannot be
> changed.
> 
> "bus * 2 + unit" makes sense for IDE, because each IDE bus can connect
> two IDE devices, "master" and "slave".
> 
> Boards implementing IDE reject drives with (bus, unit) that make no
> sense for the board's IDE controller(s).  A typical board has a single
> controller with two buses, which means bus > 1 get rejected.
> 
> q35 implements AHCI instead of IDE.  It connects if=ide drives to AHCI,
> because that's felt to be convenient.
> 
> An AHCI port can connect a single AHCI device, unlike an IDE bus.  This
> patch identifies maps -drive's bus to AHCI port number.
> 
> PATCH 11/25 sets up argument hd_table[] as follows:
> 
>     ide_drive_get(hd, MAX_SATA_PORTS);
> 
> This rejects bus > MAX_SATA_PORTS.  It doesn't reject unit == 1.  I
> believe these get silently ignored.  Bug or feature?
> 
> Should we reject unit == 1 instead?
> 
> Should we map -drive's index to AHCI port number instead?

Right, so now that we have ide disks that can be attached to either the
legacy ide controller or to ahci, I think we need to differentiate which
controller we mean. That is, as proposed q35 is treating -drive if=ide
as an ide attached to the ahci controller. I think that is broken
behavior b/c we need a way to differentiate between the controllers.

As Alexander Graf has proposed before, I think we need a -drive if=ahci
introduced. In that case, I think we reject unit > 0, as you've
suggested.

In terms of the current q35 patch series, I think the first step would
be to introduce the ahci interface type, and have hda-hdd be added with
the default type for q35 of ahci. Then, we can simply fetch ahci drives
of index 0-3, and populate the controller, without any of this skipping
odd numbers stuff.

The next step would then to add if=ahci interface to -drive.

Thanks,

-Jason

  reply	other threads:[~2012-09-21 19:37 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-13 20:12 [Qemu-devel] [PATCH 00/25] q35 series take #1 Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 01/25] pci: pci capability must be in PCI space Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 02/25] pci: add opaque argument to pci_map_irq_fn Jason Baron
2012-09-14 16:32   ` Alex Williamson
2012-09-13 20:12 ` [Qemu-devel] [PATCH 03/25] pci: introduce pci_swizzle_map_irq_fn() for standardized interrupt pin swizzle Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 05/25] pc, pc_piix: split out pc nic initialization Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 04/25] ahci: add ide device initialization helper Jason Baron
2012-09-21 14:05   ` Markus Armbruster
2012-09-21 19:37     ` Jason Baron [this message]
2012-09-24 16:52       ` Markus Armbruster
2012-09-24 17:23         ` Jason Baron
2012-09-26  8:15           ` Markus Armbruster
2012-09-26 10:43             ` Kevin Wolf
2012-09-27 17:59             ` Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 06/25] pc: Move ioapic_init() from pc_piix.c to pc.c Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 07/25] pc/piix_pci: factor out smram/pam logic Jason Baron
2012-09-14 18:52   ` Blue Swirl
2012-09-13 20:12 ` [Qemu-devel] [PATCH 08/25] pci_ids: add intel 82801BA pci-to-pci bridge id and PCI_CLASS_SERIAL_SMBUS Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 10/25] pcie: Convert PCIExpressHost to use the QOM Jason Baron
2012-09-15 15:16   ` Andreas Färber
2012-09-13 20:12 ` [Qemu-devel] [PATCH 09/25] pcie: pass pcie window size to pcie_host_mmcfg_update() Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 11/25] q35: Introduce q35 pc based chipset emulator Jason Baron
2012-09-14  7:02   ` Paolo Bonzini
2012-09-14  7:37   ` Gerd Hoffmann
2012-09-14 14:11     ` Jason Baron
2012-09-18 21:28     ` Alex Williamson
2012-09-14 12:26   ` Michael S. Tsirkin
2012-09-14 15:20     ` Jason Baron
2012-09-15 18:14   ` Michael S. Tsirkin
2012-09-16 14:48     ` Anthony Liguori
2012-09-16 15:14       ` Michael S. Tsirkin
2012-09-13 20:12 ` [Qemu-devel] [PATCH 12/25] q35: Re-base q35 to 1.2 Jason Baron
2012-09-14 19:07   ` Blue Swirl
2012-09-13 20:12 ` [Qemu-devel] [PATCH 13/25] q35: Suppress SMM BIOS initialization under KVM Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 14/25] q35: Fix non-PCI IRQ processing in ich9_lpc_update_apic Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 15/25] q35: smbus: Remove PCI_STATUS_SIG_SYSTEM_ERROR and PCI_STATUS_DETECTED_PARITY from w1cmask Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 16/25] pci: Add class 0xc05 as 'SMBus' Jason Baron
2012-09-14  7:04   ` Paolo Bonzini
2012-09-14 14:24     ` Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 17/25] q35: Add kvmclock support Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 19/25] ahci: add migration support Jason Baron
2012-09-14  8:38   ` Juan Quintela
2012-09-13 20:12 ` [Qemu-devel] [PATCH 18/25] q35: Fix irr initialization for slots 25..31 Jason Baron
2012-09-14  7:05   ` Paolo Bonzini
2012-09-14 14:28     ` Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 20/25] pcie: drop version_id field for live migration Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 21/25] pcie_aer: clear cmask for Advanced Error Interrupt Message Number Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 22/25] ahci: properly reset PxCMD on HBA reset Jason Baron
2012-09-13 20:12 ` [Qemu-devel] [PATCH 23/25] q35: add acpi-based pci hotplug Jason Baron
2012-09-14 18:56   ` Blue Swirl
2012-09-13 20:12 ` [Qemu-devel] [PATCH 25/25] q35: automatically load the q35 dsdt table Jason Baron
2012-09-14  7:08   ` Paolo Bonzini
2012-09-14  7:25     ` Gerd Hoffmann
2012-09-14  7:34       ` Paolo Bonzini
2012-09-13 20:12 ` [Qemu-devel] [PATCH 24/25] Add a fallback bios file search, if -L fails Jason Baron
2012-09-14  7:09   ` Paolo Bonzini
2012-09-14 10:54   ` Peter Maydell
2012-09-14 19:15   ` Blue Swirl
2012-09-13 22:29 ` [Qemu-devel] [PATCH 00/25] q35 series take #1 Alexander Graf
2012-09-14 13:50   ` Jason Baron
2012-09-14 13:56     ` Alexander Graf
2012-09-14 14:08       ` Jason Baron
2012-09-14 14:12         ` Alexander Graf
2012-09-14 15:37           ` Kevin Wolf
2012-09-14 15:14 ` Isaku Yamahata
2012-09-14 15:23   ` Jason Baron
2012-09-14 17:34     ` Isaku Yamahata
2012-09-14 19:01       ` Jason Baron
2012-09-15  0:24         ` Isaku Yamahata
2012-09-15 11:33           ` Paolo Bonzini
2012-09-15 17:35             ` Michael S. Tsirkin
2012-09-15 18:05           ` Michael S. Tsirkin
2012-09-15 17:40         ` Michael S. Tsirkin
2012-09-15 18:02   ` Michael S. Tsirkin

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=20120921193735.GC27402@redhat.com \
    --to=jbaron@redhat.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=avi@redhat.com \
    --cc=jan.kiszka@siemens.com \
    --cc=juzhang@redhat.com \
    --cc=kevin@koconnor.net \
    --cc=lcapitulino@redhat.com \
    --cc=mkletzan@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yamahata@valinux.co.jp \
    /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).