From patchwork Tue Jul 3 13:20:41 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 1151031 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 81FC840134 for ; Tue, 3 Jul 2012 13:21:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933110Ab2GCNVL (ORCPT ); Tue, 3 Jul 2012 09:21:11 -0400 Received: from mail-pb0-f46.google.com ([209.85.160.46]:56527 "EHLO mail-pb0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933092Ab2GCNVC (ORCPT ); Tue, 3 Jul 2012 09:21:02 -0400 Received: by mail-pb0-f46.google.com with SMTP id rp8so9238437pbb.19 for ; Tue, 03 Jul 2012 06:21:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=9rByh0shBrQwYpNtaFkN+touyURGhbvFZGrKcb6jHIk=; b=KbIy+yVNMggmlRAjQtzgXfP8U4yvXax4jVrW3YKQMtc70MBzEMRB8JDE1J291PtTew g7J66NM1oHASjEYssfgnMP6XMaxL1PKjQORMH/DhLr788j94oC3M6j/Rrg1C/si6Z9Ek jmHzCCDYtvb7uDZ0AQwpzBwfrK2FVJsgffXFN9ph1BQeia5sbJ2PeDtEtWuuKFow9kOq xq6WaVvwDtbRl8VSf1PZGVdeI0iAiEvUCOSR7Kt/wn77ZrFtQDwBqOxmMgaV0J7kKvQ5 bnADzNXnclAill/0vLM6xcl6ABDNRwJKUT7dfZhDULLC8jbimd6ExL+c+DeuVg9v3mjX Cjbw== Received: by 10.68.221.106 with SMTP id qd10mr7208392pbc.42.1341321662491; Tue, 03 Jul 2012 06:21:02 -0700 (PDT) Received: from yakj.usersys.redhat.com (net-93-71-25-153.cust.dsl.vodafone.it. [93.71.25.153]) by mx.google.com with ESMTPS id hw6sm15562494pbc.73.2012.07.03.06.20.58 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 03 Jul 2012 06:21:01 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, mst@redhat.com, anthony@codemonkey.ws, kwolf@redhat.com, rusty@rustcorp.com.au Subject: [PATCH 1/2] virtio-blk: support VIRTIO_BLK_F_CONFIG_WCE Date: Tue, 3 Jul 2012 15:20:41 +0200 Message-Id: <1341321642-24598-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.10.2 In-Reply-To: <1341321642-24598-1-git-send-email-pbonzini@redhat.com> References: <1341321642-24598-1-git-send-email-pbonzini@redhat.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org 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. 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); +} + static uint32_t virtio_blk_get_features(VirtIODevice *vdev, uint32_t features) { VirtIOBlock *s = to_virtio_blk(vdev); @@ -523,9 +533,10 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev, uint32_t features) features |= (1 << VIRTIO_BLK_F_BLK_SIZE); features |= (1 << VIRTIO_BLK_F_SCSI); + features |= (1 << VIRTIO_BLK_F_CONFIG_WCE); if (bdrv_enable_write_cache(s->bs)) - features |= (1 << VIRTIO_BLK_F_WCACHE); - + features |= (1 << VIRTIO_BLK_F_WCE); + if (bdrv_is_read_only(s->bs)) features |= 1 << VIRTIO_BLK_F_RO; @@ -615,6 +626,7 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, VirtIOBlkConf *blk) sizeof(VirtIOBlock)); s->vdev.get_config = virtio_blk_update_config; + s->vdev.set_config = virtio_blk_set_config; s->vdev.get_features = virtio_blk_get_features; s->vdev.reset = virtio_blk_reset; s->bs = blk->conf.bs; diff --git a/hw/virtio-blk.h b/hw/virtio-blk.h index d785001..afea114 100644 --- a/hw/virtio-blk.h +++ b/hw/virtio-blk.h @@ -31,8 +31,9 @@ #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ /* #define VIRTIO_BLK_F_IDENTIFY 8 ATA IDENTIFY supported, DEPRECATED */ -#define VIRTIO_BLK_F_WCACHE 9 /* write cache enabled */ +#define VIRTIO_BLK_F_WCE 9 /* write cache enabled */ #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */ +#define VIRTIO_BLK_F_CONFIG_WCE 11 /* write cache configurable */ #define VIRTIO_BLK_ID_BYTES 20 /* ID string length */ @@ -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; /* These two define direction. */