scsi bus: introduce hotplug() and hot_unplug() interfaces for SCSI bus
PATCH v2 1/2 scsi bus: introduce hotplug() and hot_unplug() interfaces for SCSI bus
In reply to a message not in the archiveAdd two interfaces hotplug() and hot_unplug() to scsi bus info. The embody scsi bus can implement these two interfaces to signal the HBA driver of guest kernel to add/remove the scsi device in question.
--- hw/scsi-bus.c | 16 +++++++++++++++- hw/scsi.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletions(-)
hw/scsi-bus.c +15 -1
@@ -177,6 +177,10 @@ static int scsi_qdev_init(DeviceState *qdev) dev); } +if (bus->info->hotplug) { + bus->info->hotplug (bus, dev); + } + err:return rc; }
@@ -1539,6 +1543,16 @@ static int get_scsi_requests(QEMUFile *f, void *pv, size_t size)return 0 ; } +static int scsi_qdev_unplug (DeviceState *qdev) +{ +SCSIDevice *dev =SCSI_DEVICE (qdev); +SCSIBus *bus =scsi_bus_from_device (dev); + +if (bus->info->hot_unplug) + bus->info->hot_unplug (bus, dev); +return qdev_simple_unplug_cb (qdev); +} +const VMStateInfo vmstate_info_scsi_requests = { .name ="scsi-requests" , .get = get_scsi_requests,
@@ -1575,7 +1589,7 @@ static void scsi_device_class_init(ObjectClass *klass, void *data)DeviceClass *k =DEVICE_CLASS (klass); k->bus_info = &scsi_bus_info; k->init = scsi_qdev_init; - k->unplug = qdev_simple_unplug_cb; + k->unplug = scsi_qdev_unplug; k->exit = scsi_qdev_exit; }
hw/scsi.h +2 -0
@@ -130,6 +130,8 @@ struct SCSIBusInfo {void (*transfer_data)(SCSIRequest *req,uint32_t arg);void (*complete)(SCSIRequest *req,uint32_t arg,size_t resid);void (*cancel)(SCSIRequest *req); +void (*hotplug)(SCSIBus *bus,SCSIDevice *dev); +void (*hot_unplug)(SCSIBus *bus,SCSIDevice *dev); QEMUSGList *(*get_sg_list)(SCSIRequest *req);void (*save_request)(QEMUFile *f,SCSIRequest *req);
Signature · 1 line
1.7.7.6
PATCH v2 1/2 scsi bus: introduce hotplug() and hot_unplug() interfaces for SCSI bus
In reply to a message not in the archiveAdd two interfaces hotplug() and hot_unplug() to scsi bus info. The embody scsi bus can implement these two interfaces to signal the HBA driver of guest kernel to add/remove the scsi device in question.
--- hw/scsi-bus.c | 16 +++++++++++++++- hw/scsi.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletions(-)
hw/scsi-bus.c +15 -1
@@ -177,6 +177,10 @@ static int scsi_qdev_init(DeviceState *qdev) dev); } +if (bus->info->hotplug) { + bus->info->hotplug (bus, dev); + } + err:return rc; }
@@ -1539,6 +1543,16 @@ static int get_scsi_requests(QEMUFile *f, void *pv, size_t size)return 0 ; } +static int scsi_qdev_unplug (DeviceState *qdev) +{ +SCSIDevice *dev =SCSI_DEVICE (qdev); +SCSIBus *bus =scsi_bus_from_device (dev); + +if (bus->info->hot_unplug) + bus->info->hot_unplug (bus, dev); +return qdev_simple_unplug_cb (qdev); +} +const VMStateInfo vmstate_info_scsi_requests = { .name ="scsi-requests" , .get = get_scsi_requests,
@@ -1575,7 +1589,7 @@ static void scsi_device_class_init(ObjectClass *klass, void *data)DeviceClass *k =DEVICE_CLASS (klass); k->bus_info = &scsi_bus_info; k->init = scsi_qdev_init; - k->unplug = qdev_simple_unplug_cb; + k->unplug = scsi_qdev_unplug; k->exit = scsi_qdev_exit; }
hw/scsi.h +2 -0
@@ -130,6 +130,8 @@ struct SCSIBusInfo {void (*transfer_data)(SCSIRequest *req,uint32_t arg);void (*complete)(SCSIRequest *req,uint32_t arg,size_t resid);void (*cancel)(SCSIRequest *req); +void (*hotplug)(SCSIBus *bus,SCSIDevice *dev); +void (*hot_unplug)(SCSIBus *bus,SCSIDevice *dev); QEMUSGList *(*get_sg_list)(SCSIRequest *req);void (*save_request)(QEMUFile *f,SCSIRequest *req);
Signature · 1 line
1.7.7.6
hw/scsi-bus.c static int get_scsi_requests(QEMUFile *f, void *pv, size_t size) · line 1552
Quoted 7 lines · Cong Meng
hw/scsi-bus.c +7
-0+static int scsi_qdev_unplug (DeviceState *qdev) +{ + SCSIDevice *dev = SCSI_DEVICE(qdev); + SCSIBus *bus = scsi_bus_from_device(dev); + + if (bus->info->hot_unplug) + bus->info->hot_unplug(bus, dev);
Please use scripts/checkpatch.pl to ensure that your patch follows QEMU coding style. if statements must use {}.
Stefan
Il 21/06/2012 09:54, Cong Meng ha scritto:
Quoted 27 lines
Add two interfaces
hotplug()andhot_unplug()to scsi bus info. The embody scsi bus can implement these two interfaces to signal the HBA driver of guest kernel to add/remove the scsi device in question.Signed-off-by Cong Meng <[email protected]>Signed-off-by Sen Wang <[email protected]>--- hw/scsi-bus.c | 16 +++++++++++++++- hw/scsi.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletions(-)hw/scsi-bus.c +4
-0@@ -177,6 +177,10 @@ static int scsi_qdev_init(DeviceState *qdev) dev); } +if (bus->info->hotplug) { + bus->info->hotplug (bus, dev); + } + err:return rc; }
hw/scsi-bus.c static int get_scsi_requests(QEMUFile *f, void *pv, size_t size) · line 1552
Quoted 10 lines
hw/scsi-bus.c +7
-0@@ -1539,6 +1543,16 @@ static int get_scsi_requests(QEMUFile *f, void *pv, size_t size)return 0 ; } +static int scsi_qdev_unplug (DeviceState *qdev) +{ +SCSIDevice *dev =SCSI_DEVICE (qdev); +SCSIBus *bus =scsi_bus_from_device (dev); + +if (bus->info->hot_unplug) + bus->info->hot_unplug (bus, dev);
Tab indentation and braces missing. I fixed this up and applied it to the scsi-next branch.
Paolo
Quoted 29 lines
hw/scsi-bus.c +4
-1+return qdev_simple_unplug_cb (qdev); +} +const VMStateInfo vmstate_info_scsi_requests = { .name ="scsi-requests" , .get = get_scsi_requests,@@ -1575,7 +1589,7 @@ static void scsi_device_class_init(ObjectClass *klass, void *data)DeviceClass *k =DEVICE_CLASS (klass); k->bus_info = &scsi_bus_info; k->init = scsi_qdev_init; - k->unplug = qdev_simple_unplug_cb; + k->unplug = scsi_qdev_unplug; k->exit = scsi_qdev_exit; }hw/scsi.h +2
-0@@ -130,6 +130,8 @@ struct SCSIBusInfo {void (*transfer_data)(SCSIRequest *req,uint32_t arg);void (*complete)(SCSIRequest *req,uint32_t arg,size_t resid);void (*cancel)(SCSIRequest *req); +void (*hotplug)(SCSIBus *bus,SCSIDevice *dev); +void (*hot_unplug)(SCSIBus *bus,SCSIDevice *dev); QEMUSGList *(*get_sg_list)(SCSIRequest *req);void (*save_request)(QEMUFile *f,SCSIRequest *req);