From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:50721) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ShEii-0007ZG-5o for qemu-devel@nongnu.org; Wed, 20 Jun 2012 02:48:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ShEib-0000kA-Js for qemu-devel@nongnu.org; Wed, 20 Jun 2012 02:48:51 -0400 Received: from e06smtp10.uk.ibm.com ([195.75.94.106]:37945) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ShEib-0000j4-BE for qemu-devel@nongnu.org; Wed, 20 Jun 2012 02:48:45 -0400 Received: from /spool/local by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 20 Jun 2012 07:48:41 +0100 Received: from d06av11.portsmouth.uk.ibm.com (d06av11.portsmouth.uk.ibm.com [9.149.37.252]) by d06nrmr1806.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q5K6mcAZ2601002 for ; Wed, 20 Jun 2012 07:48:38 +0100 Received: from d06av11.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av11.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q5K6mbB2008524 for ; Wed, 20 Jun 2012 00:48:37 -0600 From: Cong Meng Date: Wed, 20 Jun 2012 14:47:10 +0800 Message-Id: <287bf70a546a1ce51a6f3405ba620daaf284bdfe.1340022196.git.mc@linux.vnet.ibm.com> In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 1/2] scsi bus: introduce hotplug() and hot_unplug() interfaces for SCSI bus List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: stefanha@linux.vnet.ibm.com, qemu-devel@nongnu.org, zwanp@cn.ibm.com, Rusty Russell , linuxram@us.ibm.com, senwang@linux.vnet.ibm.com, "Nicholas A. Bellinger" , virtualization@lists.linux-foundation.org, Cong Meng , Anthony Liguori , =?UTF-8?q?Andreas=20F=C3=A4rber?= Add 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. Signed-off-by: Cong Meng Signed-off-by: Sen Wang --- hw/scsi-bus.c | 16 +++++++++++++++- hw/scsi.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index dbdb99c..cc3ec75 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -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 = DO_UPCAST(SCSIBus, qbus, dev->qdev.parent_bus); + + 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; } diff --git a/hw/scsi.h b/hw/scsi.h index 2eb66f7..5768071 100644 --- a/hw/scsi.h +++ b/hw/scsi.h @@ -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); -- 1.7.7