From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50403) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZX3m2-0007VH-Ry for qemu-devel@nongnu.org; Wed, 02 Sep 2015 04:52:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZX3lz-0004OG-La for qemu-devel@nongnu.org; Wed, 02 Sep 2015 04:52:06 -0400 From: Wen Congyang Date: Wed, 2 Sep 2015 16:51:05 +0800 Message-ID: <1441183880-26993-2-git-send-email-wency@cn.fujitsu.com> In-Reply-To: <1441183880-26993-1-git-send-email-wency@cn.fujitsu.com> References: <1441183880-26993-1-git-send-email-wency@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH 01/16] introduce a new API to enable/disable attach device model List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu devel , Fam Zheng , Max Reitz , Paolo Bonzini , Stefan Hajnoczi Cc: Kevin Wolf , qemu block , Jiang Yunhong , Dong Eddie , "Dr. David Alan Gilbert" , "Michael R. Hines" , Yang Hongyang Signed-off-by: Wen Congyang --- block/block-backend.c | 24 ++++++++++++++++++++++++ include/sysemu/block-backend.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/block/block-backend.c b/block/block-backend.c index aee8a12..72d8b2c 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -344,6 +344,30 @@ void *blk_get_attached_dev(BlockBackend *blk) } /* + * Disable to attach a device mode to @blk. + * Return 0 on success, -EBUSY when a device model is attached already. + */ +int blk_disable_attach_dev(BlockBackend *blk) +{ + if (blk->dev) { + return blk->dev == (void *)-1 ? 0 : -EBUSY; + } + + blk->dev = (void *)-1; + return 0; +} + +/* + * Enable to attach a device mode to @blk. + */ +void blk_enable_attach_dev(BlockBackend *blk) +{ + if (blk->dev == (void *)-1) { + blk->dev = NULL; + } +} + +/* * Set @blk's device model callbacks to @ops. * @opaque is the opaque argument to pass to the callbacks. * This is for use by device models. diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index 8fc960f..7619a9f 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -80,6 +80,8 @@ int blk_attach_dev(BlockBackend *blk, void *dev); void blk_attach_dev_nofail(BlockBackend *blk, void *dev); void blk_detach_dev(BlockBackend *blk, void *dev); void *blk_get_attached_dev(BlockBackend *blk); +int blk_disable_attach_dev(BlockBackend *blk); +void blk_enable_attach_dev(BlockBackend *blk); void blk_set_dev_ops(BlockBackend *blk, const BlockDevOps *ops, void *opaque); int blk_read(BlockBackend *blk, int64_t sector_num, uint8_t *buf, int nb_sectors); -- 2.4.3