qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: QEMU-devel Developers <qemu-devel@nongnu.org>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Joerg Roedel <Joerg.Roedel@amd.com>,
	Paul Brook <paul@codesourcery.com>,
	Blue Swirl <blauwirbel@gmail.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Stefan Hajnoczi <stefanha@gmail.com>,
	tj@kernel.org, Roland Elek <elek.roland@gmail.com>,
	Sebastian Herbszt <herbszt@gmx.de>
Subject: [Qemu-devel] [PATCH 00/11] AHCI emulation support v9
Date: Tue, 14 Dec 2010 01:34:32 +0100	[thread overview]
Message-ID: <1292286883-20157-1-git-send-email-agraf@suse.de> (raw)

This patch adds support for AHCI emulation. I have tested and verified it works
in Linux, OpenBSD, Windows Vista and Windows 7. This AHCI emulation supports
NCQ, so multiple read or write requests can be outstanding at the same time.

The code is however not fully optimized yet. I'm fairly sure that there are
low hanging performance fruits to be found still :). In my simple benchmarks
I achieved about 2/3rd of virtio performance.

Also, this AHCI emulation layer does not support legacy mode. So if you're
using a disk with this emulation, you do not get it exposed using the legacy
IDE interfaces.

Another nitpick is CD-ROM support in Windows. Somehow it doesn't detect a
CD-ROM drive attached to AHCI. At least it doesn't list it.

To attach an AHCI disk to your VM, please use

  -drive id=disk,file=...,if=none -device ahci,id=ahci \
  -device ide-drive,drive=disk,bus=ahci.0

This patch set is based on work done during the Google Summer of Code. I was
mentoring a student, Roland Elek, who wrote most of the AHCI emulation code
based on a patch from Chong Qiao. A bunch of other people were also involved,
so everybody who I didn't mention - thanks a lot!

  git://repo.or.cz/qemu/ahci.git ahci

v1 -> v2:

  - rename IDEExtender to IDEBusOps and make a pointer (kraxel)
  - make dma hooks explicit by putting them into ops struct (stefanha)
  - use qdev buses (kraxel)
  - minor cleanups
  - dprintf overhaul
  - add reset function

v2 -> v3:

  - add msi support (kraxel)
  - use MIN macro (kraxel)
  - add msi support (kraxel)
  - fix ncq with multiple ports
  - zap qdev properties (kraxel)
  - redesign legacy IF_SATA hooks (kraxel)
  - don't build ahci as part of target
  - move to ide/ (kwolf)

v3 -> v4:

  - prepare for endianness safety
  - add lspci dump (herbszt)
  - use ich7 instead of ich7m (herbszt)
  - fix lst+fis mapping (kraxel)
  - coding style (blue swirl)
  - explicit mmio setters/getters (blue swirl)
  - split pata code out to pata.c (kwolf)
  - only include config-devices.h in machine description (blue swirl)

v4 -> v5:

  - s/H2dNcqFis/NCQFrame/g (blue swirl)
  - redo -drive magic (blue swirl)
  - bump BAR to 4k
  - rename ICH7_AHCI to ICH7_AHCI_RAID (herbszt)
  - drop device config header (blue swirl)

v5 -> v6:
  - PCI config space fixes (isaku)
  - remove CONFIG_AHCI from x86 default configs (paul brook)
  - use snprintf (blue swirl)
  - add generic PCI config file (paul brook)
  - build ahci on all PCI platforms (paul brook)

v6 -> v7:

  - use bus instead of opaque (stefanha)
  - change naming in IDEBusOps (stefanha, kwolf)
  - rename IDEBusOps (stefanha)
  - improve interrupt injection
  - combine tfdata code paths
  - update tfdata more often
  - reset port registers on port reset
  - improve debug output
  - add "feature" variable from fis for some extended commands
  - always set feature to DMA for atapi
  - osx 10.5.0 works as of this version
  - use non-raid ich7 ahci (herbszt)
  - reflect normal ich7 in pci dump
  - stick to new IDEBusOps (stefanha, kwolf)
  - stefan's ahci comments

v7 -> v8:

  - rewrite ops as DMA offsplit framework
  - split bmdma stuff out to pci.c
  - generate tfdata on the fly
  - reimplement immediate dma rw
  - add safety net for busy engine
  - adjust ahci code for new DMA framework
  - move ide core+pci to pci.mak
  - add sebastian's config space patches

v8 -> v9:

  - make dma providers subclass of idedma (kwolf)
  - s/set_status/add_status/g (kwolf)
  - cancel and clear ncq queue on reset (stefanha)
  - clear ptr on map failure (stefanha)
  - potential NULL deref, unregister reset (stefanha)
  - add error reporting for ncq (stefanha)
  - replace hw_error with DPRINTF (stefanha)
  - move sg generation to sg users
  - fix off-by-one in sglist interpretation
  - make background engine work (queued commands)
  - use ICH9 instead of ICH7 (aliguori)
  - update to new APIs


Alexander Graf (9):
  ide: split ide command interpretation off
  ide: fix whitespace gap in ide_exec_cmd
  ide: Split out BMDMA code from ATA core
  ide: move transfer_start after variable modification
  pci: add storage class for sata
  pci: add ich9 pci id
  ahci: add ahci emulation
  config: move ide core and pci to pci.mak
  config: add ahci for pci capable machines

Roland Elek (1):
  ide: add ncq identify data for ahci sata drives

Sebastian Herbszt (1):
  ahci: set SATA Mode Select

 Makefile.objs                        |    1 +
 default-configs/arm-softmmu.mak      |    1 -
 default-configs/i386-softmmu.mak     |    3 -
 default-configs/mips-softmmu.mak     |    3 -
 default-configs/mips64-softmmu.mak   |    3 -
 default-configs/mips64el-softmmu.mak |    3 -
 default-configs/mipsel-softmmu.mak   |    3 -
 default-configs/pci.mak              |    4 +
 default-configs/ppc-softmmu.mak      |    3 -
 default-configs/ppc64-softmmu.mak    |    3 -
 default-configs/ppcemb-softmmu.mak   |    3 -
 default-configs/sh4-softmmu.mak      |    1 -
 default-configs/sh4eb-softmmu.mak    |    1 -
 default-configs/sparc64-softmmu.mak  |    3 -
 default-configs/x86_64-softmmu.mak   |    3 -
 hw/ide/ahci.c                        | 1527 ++++++++++++++++++++++++++++++++++
 hw/ide/cmd646.c                      |    7 +-
 hw/ide/core.c                        | 1098 +++++++++++--------------
 hw/ide/internal.h                    |   73 +-
 hw/ide/pci.c                         |  289 +++++++-
 hw/ide/pci.h                         |   30 +
 hw/ide/piix.c                        |    7 +-
 hw/ide/via.c                         |    7 +-
 hw/pci.h                             |    1 +
 hw/pci_ids.h                         |    1 +
 25 files changed, 2373 insertions(+), 705 deletions(-)
 create mode 100644 hw/ide/ahci.c

             reply	other threads:[~2010-12-14  0:34 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-14  0:34 Alexander Graf [this message]
2010-12-14  0:34 ` [Qemu-devel] [PATCH 01/11] ide: split ide command interpretation off Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 02/11] ide: fix whitespace gap in ide_exec_cmd Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 03/11] ide: Split out BMDMA code from ATA core Alexander Graf
2010-12-14 16:20   ` [Qemu-devel] " Kevin Wolf
2010-12-14 23:17     ` Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 04/11] ide: move transfer_start after variable modification Alexander Graf
2010-12-14 16:21   ` [Qemu-devel] " Kevin Wolf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 05/11] ide: add ncq identify data for ahci sata drives Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 06/11] pci: add storage class for sata Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 07/11] pci: add ich9 pci id Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 08/11] ahci: add ahci emulation Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 09/11] config: move ide core and pci to pci.mak Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 10/11] config: add ahci for pci capable machines Alexander Graf
2010-12-14  0:34 ` [Qemu-devel] [PATCH 11/11] ahci: set SATA Mode Select Alexander Graf
2010-12-14 15:23 ` [Qemu-devel] [PATCH 12/11] ide: honor ncq for atapi Alexander Graf
2010-12-14 16:28 ` [Qemu-devel] Re: [PATCH 00/11] AHCI emulation support v9 Kevin Wolf
2010-12-14 23:34   ` Alexander Graf
2010-12-15  8:28     ` Gerd Hoffmann
2010-12-15  9:34       ` Alexander Graf
2010-12-15  9:44         ` Gerd Hoffmann
2010-12-14 23:23 ` [Qemu-devel] [PATCH 03/12] ide: Split out BMDMA code from ATA core Alexander Graf
2010-12-14 23:23 ` [Qemu-devel] [PATCH 04/12] ide: move transfer_start after variable modification Alexander Graf

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=1292286883-20157-1-git-send-email-agraf@suse.de \
    --to=agraf@suse.de \
    --cc=Joerg.Roedel@amd.com \
    --cc=blauwirbel@gmail.com \
    --cc=elek.roland@gmail.com \
    --cc=herbszt@gmx.de \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=paul@codesourcery.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=tj@kernel.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).