Commit b0a7b120a357733d9c554a1a3b125991114a1135
1 parent
b01b1111
qemu: record devfn on block driver instance (Marcelo Tosatti)
Record PCIDev on the BlockDriverState structure to locate for release on hot-removal. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6597 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
10 additions
and
0 deletions
block_int.h
| @@ -127,6 +127,7 @@ struct BlockDriverState { | @@ -127,6 +127,7 @@ struct BlockDriverState { | ||
| 127 | int type; | 127 | int type; |
| 128 | char device_name[32]; | 128 | char device_name[32]; |
| 129 | BlockDriverState *next; | 129 | BlockDriverState *next; |
| 130 | + void *private; | ||
| 130 | }; | 131 | }; |
| 131 | 132 | ||
| 132 | struct BlockDriverAIOCB { | 133 | struct BlockDriverAIOCB { |
hw/ide.c
| @@ -28,6 +28,7 @@ | @@ -28,6 +28,7 @@ | ||
| 28 | #include "scsi-disk.h" | 28 | #include "scsi-disk.h" |
| 29 | #include "pcmcia.h" | 29 | #include "pcmcia.h" |
| 30 | #include "block.h" | 30 | #include "block.h" |
| 31 | +#include "block_int.h" | ||
| 31 | #include "qemu-timer.h" | 32 | #include "qemu-timer.h" |
| 32 | #include "sysemu.h" | 33 | #include "sysemu.h" |
| 33 | #include "ppc_mac.h" | 34 | #include "ppc_mac.h" |
| @@ -3352,6 +3353,7 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, | @@ -3352,6 +3353,7 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, | ||
| 3352 | { | 3353 | { |
| 3353 | PCIIDEState *d; | 3354 | PCIIDEState *d; |
| 3354 | uint8_t *pci_conf; | 3355 | uint8_t *pci_conf; |
| 3356 | + int i; | ||
| 3355 | 3357 | ||
| 3356 | /* register a function 1 of PIIX3 */ | 3358 | /* register a function 1 of PIIX3 */ |
| 3357 | d = (PCIIDEState *)pci_register_device(bus, "PIIX3 IDE", | 3359 | d = (PCIIDEState *)pci_register_device(bus, "PIIX3 IDE", |
| @@ -3378,6 +3380,10 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, | @@ -3378,6 +3380,10 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, | ||
| 3378 | ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6); | 3380 | ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6); |
| 3379 | ide_init_ioport(&d->ide_if[2], 0x170, 0x376); | 3381 | ide_init_ioport(&d->ide_if[2], 0x170, 0x376); |
| 3380 | 3382 | ||
| 3383 | + for (i = 0; i < 4; i++) | ||
| 3384 | + if (hd_table[i]) | ||
| 3385 | + hd_table[i]->private = &d->dev; | ||
| 3386 | + | ||
| 3381 | register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d); | 3387 | register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d); |
| 3382 | } | 3388 | } |
| 3383 | 3389 |
hw/lsi53c895a.c
| @@ -13,6 +13,7 @@ | @@ -13,6 +13,7 @@ | ||
| 13 | #include "hw.h" | 13 | #include "hw.h" |
| 14 | #include "pci.h" | 14 | #include "pci.h" |
| 15 | #include "scsi-disk.h" | 15 | #include "scsi-disk.h" |
| 16 | +#include "block_int.h" | ||
| 16 | 17 | ||
| 17 | //#define DEBUG_LSI | 18 | //#define DEBUG_LSI |
| 18 | //#define DEBUG_LSI_REG | 19 | //#define DEBUG_LSI_REG |
| @@ -1958,6 +1959,7 @@ void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id) | @@ -1958,6 +1959,7 @@ void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id) | ||
| 1958 | s->scsi_dev[id] = scsi_generic_init(bd, 1, lsi_command_complete, s); | 1959 | s->scsi_dev[id] = scsi_generic_init(bd, 1, lsi_command_complete, s); |
| 1959 | if (s->scsi_dev[id] == NULL) | 1960 | if (s->scsi_dev[id] == NULL) |
| 1960 | s->scsi_dev[id] = scsi_disk_init(bd, 1, lsi_command_complete, s); | 1961 | s->scsi_dev[id] = scsi_disk_init(bd, 1, lsi_command_complete, s); |
| 1962 | + bd->private = &s->pci_dev; | ||
| 1961 | } | 1963 | } |
| 1962 | 1964 | ||
| 1963 | void *lsi_scsi_init(PCIBus *bus, int devfn) | 1965 | void *lsi_scsi_init(PCIBus *bus, int devfn) |
hw/virtio-blk.c
| @@ -314,6 +314,7 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs) | @@ -314,6 +314,7 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs) | ||
| 314 | s->vdev.reset = virtio_blk_reset; | 314 | s->vdev.reset = virtio_blk_reset; |
| 315 | s->bs = bs; | 315 | s->bs = bs; |
| 316 | s->rq = NULL; | 316 | s->rq = NULL; |
| 317 | + bs->private = &s->vdev.pci_dev; | ||
| 317 | bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs); | 318 | bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs); |
| 318 | bdrv_set_geometry_hint(s->bs, cylinders, heads, secs); | 319 | bdrv_set_geometry_hint(s->bs, cylinders, heads, secs); |
| 319 | 320 |