cryptospore / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
9ae3a8
From f4030862f7ac7e6217415e3ca6be6a4151fa8208 Mon Sep 17 00:00:00 2001
9ae3a8
From: John Snow <jsnow@redhat.com>
9ae3a8
Date: Thu, 2 Aug 2018 15:53:35 +0200
9ae3a8
Subject: [PATCH 2/4] ide: support reporting of rotation rate
9ae3a8
9ae3a8
RH-Author: John Snow <jsnow@redhat.com>
9ae3a8
Message-id: <20180802155336.10347-3-jsnow@redhat.com>
9ae3a8
Patchwork-id: 81614
9ae3a8
O-Subject: [RHEL-7.6 qemu-kvm PATCH 2/3] ide: support reporting of rotation rate
9ae3a8
Bugzilla: 1583807
9ae3a8
RH-Acked-by: Daniel P. Berrange <berrange@redhat.com>
9ae3a8
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
9ae3a8
RH-Acked-by: Thomas Huth <thuth@redhat.com>
9ae3a8
9ae3a8
From: "Daniel P. Berrange" <berrange@redhat.com>
9ae3a8
9ae3a8
The Linux kernel will query the ATA IDENTITY DEVICE data, word 217
9ae3a8
to determine the rotations per minute of the disk. If this has
9ae3a8
the value 1, it is taken to be an SSD and so Linux sets the
9ae3a8
'rotational' flag to 0 for the I/O queue and will stop using that
9ae3a8
disk as a source of random entropy. Other operating systems may
9ae3a8
also take into account rotation rate when setting up default
9ae3a8
behaviour.
9ae3a8
9ae3a8
Mgmt apps should be able to set the rotation rate for virtualized
9ae3a8
block devices, based on characteristics of the host storage in use,
9ae3a8
so that the guest OS gets sensible behaviour out of the box. This
9ae3a8
patch thus adds a 'rotation-rate' parameter for 'ide-hd' device
9ae3a8
types.
9ae3a8
9ae3a8
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
9ae3a8
Message-Id: <20171004114008.14849-3-berrange@redhat.com>
9ae3a8
Reviewed-by: John Snow <jsnow@redhat.com>
9ae3a8
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
9ae3a8
(cherry picked from commit 3b19f4506901ecce25ff36cf62353a2b4bfe4f2b)
9ae3a8
Signed-off-by: John Snow <jsnow@redhat.com>
9ae3a8
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
9ae3a8
---
9ae3a8
 hw/ide/core.c     | 1 +
9ae3a8
 hw/ide/internal.h | 8 ++++++++
9ae3a8
 hw/ide/qdev.c     | 1 +
9ae3a8
 3 files changed, 10 insertions(+)
9ae3a8
9ae3a8
diff --git a/hw/ide/core.c b/hw/ide/core.c
9ae3a8
index 5c33735..aea2ff9 100644
9ae3a8
--- a/hw/ide/core.c
9ae3a8
+++ b/hw/ide/core.c
9ae3a8
@@ -179,6 +179,7 @@ static void ide_identify(IDEState *s)
9ae3a8
     if (dev && dev->conf.discard_granularity) {
9ae3a8
         put_le16(p + 169, 1); /* TRIM support */
9ae3a8
     }
9ae3a8
+    put_le16(p + 217, dev->rotation_rate); /* Nominal media rotation rate */
9ae3a8
 
9ae3a8
     memcpy(s->identify_data, p, sizeof(s->identify_data));
9ae3a8
     s->identify_set = 1;
9ae3a8
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
9ae3a8
index f8fb564..1062f85 100644
9ae3a8
--- a/hw/ide/internal.h
9ae3a8
+++ b/hw/ide/internal.h
9ae3a8
@@ -484,6 +484,14 @@ struct IDEDevice {
9ae3a8
     char *serial;
9ae3a8
     char *model;
9ae3a8
     uint64_t wwn;
9ae3a8
+    /*
9ae3a8
+     * 0x0000        - rotation rate not reported
9ae3a8
+     * 0x0001        - non-rotating medium (SSD)
9ae3a8
+     * 0x0002-0x0400 - reserved
9ae3a8
+     * 0x0401-0xffe  - rotations per minute
9ae3a8
+     * 0xffff        - reserved
9ae3a8
+     */
9ae3a8
+    uint16_t rotation_rate;
9ae3a8
 };
9ae3a8
 
9ae3a8
 #define BM_STATUS_DMAING 0x01
9ae3a8
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
9ae3a8
index 44f36c3..4ba2c63 100644
9ae3a8
--- a/hw/ide/qdev.c
9ae3a8
+++ b/hw/ide/qdev.c
9ae3a8
@@ -219,6 +219,7 @@ static Property ide_hd_properties[] = {
9ae3a8
     DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf),
9ae3a8
     DEFINE_PROP_BIOS_CHS_TRANS("bios-chs-trans",
9ae3a8
                 IDEDrive, dev.chs_trans, BIOS_ATA_TRANSLATION_AUTO),
9ae3a8
+    DEFINE_PROP_UINT16("rotation_rate", IDEDrive, dev.rotation_rate, 0),
9ae3a8
     DEFINE_PROP_END_OF_LIST(),
9ae3a8
 };
9ae3a8
 
9ae3a8
-- 
9ae3a8
1.8.3.1
9ae3a8