From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:39748) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sm3Qn-0000vg-17 for qemu-devel@nongnu.org; Tue, 03 Jul 2012 09:46:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sm3Qg-00028G-OX for qemu-devel@nongnu.org; Tue, 03 Jul 2012 09:46:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:30715) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sm3Qg-00027s-Fw for qemu-devel@nongnu.org; Tue, 03 Jul 2012 09:46:10 -0400 Message-ID: <4FF2F79E.2080805@redhat.com> Date: Tue, 03 Jul 2012 15:46:06 +0200 From: Kevin Wolf MIME-Version: 1.0 References: <1341321642-24598-1-git-send-email-pbonzini@redhat.com> <1341321642-24598-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1341321642-24598-2-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] virtio-blk: support VIRTIO_BLK_F_CONFIG_WCE List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: anthony@codemonkey.ws, rusty@rustcorp.com.au, qemu-devel@nongnu.org, kvm@vger.kernel.org, mst@redhat.com Am 03.07.2012 15:20, schrieb Paolo Bonzini: > Introduce a new feature bit and configuration field that provide > support for toggling the cache mode between writethrough and writeback. > > Also rename VIRTIO_BLK_F_WCACHE to VIRTIO_BLK_F_WCE for consistency with > the spec. My spec (and my kernel as well) call it VIRTIO_BLK_F_FLUSH. What's the status of the kernel and spec side of the change? > > Signed-off-by: Paolo Bonzini > --- > hw/virtio-blk.c | 16 ++++++++++++++-- > hw/virtio-blk.h | 4 +++- > 2 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c > index fe07746..280f96d 100644 > --- a/hw/virtio-blk.c > +++ b/hw/virtio-blk.c > @@ -510,9 +510,19 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config) > blkcfg.size_max = 0; > blkcfg.physical_block_exp = get_physical_block_exp(s->conf); > blkcfg.alignment_offset = 0; > + blkcfg.wce = bdrv_enable_write_cache(s->bs); > memcpy(config, &blkcfg, sizeof(struct virtio_blk_config)); > } > > +static void virtio_blk_set_config(VirtIODevice *vdev, const uint8_t *config) > +{ > + VirtIOBlock *s = to_virtio_blk(vdev); > + struct virtio_blk_config blkcfg; > + > + memcpy(&blkcfg, config, sizeof(blkcfg)); > + bdrv_set_enable_write_cache(s->bs, blkcfg.wce != 0); > +} We need to call bdrv_flush() here when turning WCE off. And it seems we don't have a way to signal failure, or may we just leave the bit unchanged? > @@ -49,6 +50,7 @@ struct virtio_blk_config > uint8_t alignment_offset; > uint16_t min_io_size; > uint32_t opt_io_size; > + uint8_t wce; > } QEMU_PACKED; If the spec isn't set in stone yet, we could make it a flags field instead of using a whole byte for a single flag. Kevin