Blame SOURCES/kvm-ide-support-reporting-of-rotation-rate.patch

9bac43
From 0bb526e2aa90f3f9143472da23ae3b64a4e3216d Mon Sep 17 00:00:00 2001
9bac43
From: "Daniel P. Berrange" <berrange@redhat.com>
9bac43
Date: Wed, 29 Nov 2017 14:26:05 +0100
9bac43
Subject: [PATCH 19/21] ide: support reporting of rotation rate
9bac43
9bac43
RH-Author: Daniel P. Berrange <berrange@redhat.com>
9bac43
Message-id: <20171129142606.15965-3-berrange@redhat.com>
9bac43
Patchwork-id: 77965
9bac43
O-Subject: [PATCH RHV-7.5 qemu-kvm-rhev 2/3] ide: support reporting of rotation rate
9bac43
Bugzilla: 1498042
9bac43
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
9bac43
RH-Acked-by: John Snow <jsnow@redhat.com>
9bac43
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
9bac43
9bac43
The Linux kernel will query the ATA IDENTITY DEVICE data, word 217
9bac43
to determine the rotations per minute of the disk. If this has
9bac43
the value 1, it is taken to be an SSD and so Linux sets the
9bac43
'rotational' flag to 0 for the I/O queue and will stop using that
9bac43
disk as a source of random entropy. Other operating systems may
9bac43
also take into account rotation rate when setting up default
9bac43
behaviour.
9bac43
9bac43
Mgmt apps should be able to set the rotation rate for virtualized
9bac43
block devices, based on characteristics of the host storage in use,
9bac43
so that the guest OS gets sensible behaviour out of the box. This
9bac43
patch thus adds a 'rotation-rate' parameter for 'ide-hd' device
9bac43
types.
9bac43
9bac43
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
9bac43
Message-Id: <20171004114008.14849-3-berrange@redhat.com>
9bac43
Reviewed-by: John Snow <jsnow@redhat.com>
9bac43
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
9bac43
(cherry picked from commit 3b19f4506901ecce25ff36cf62353a2b4bfe4f2b)
9bac43
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
9bac43
---
9bac43
 hw/ide/core.c             | 1 +
9bac43
 hw/ide/qdev.c             | 1 +
9bac43
 include/hw/ide/internal.h | 8 ++++++++
9bac43
 3 files changed, 10 insertions(+)
9bac43
9bac43
diff --git a/hw/ide/core.c b/hw/ide/core.c
9bac43
index bea3953..11986e3 100644
9bac43
--- a/hw/ide/core.c
9bac43
+++ b/hw/ide/core.c
9bac43
@@ -191,6 +191,7 @@ static void ide_identify(IDEState *s)
9bac43
     if (dev && dev->conf.discard_granularity) {
9bac43
         put_le16(p + 169, 1); /* TRIM support */
9bac43
     }
9bac43
+    put_le16(p + 217, dev->rotation_rate); /* Nominal media rotation rate */
9bac43
 
9bac43
     ide_identify_size(s);
9bac43
     s->identify_set = 1;
9bac43
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
9bac43
index cc2f5bd..a412d6f 100644
9bac43
--- a/hw/ide/qdev.c
9bac43
+++ b/hw/ide/qdev.c
9bac43
@@ -304,6 +304,7 @@ static Property ide_hd_properties[] = {
9bac43
     DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf),
9bac43
     DEFINE_PROP_BIOS_CHS_TRANS("bios-chs-trans",
9bac43
                 IDEDrive, dev.chs_trans, BIOS_ATA_TRANSLATION_AUTO),
9bac43
+    DEFINE_PROP_UINT16("rotation_rate", IDEDrive, dev.rotation_rate, 0),
9bac43
     DEFINE_PROP_END_OF_LIST(),
9bac43
 };
9bac43
 
9bac43
diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h
9bac43
index 482a951..f1aca72 100644
9bac43
--- a/include/hw/ide/internal.h
9bac43
+++ b/include/hw/ide/internal.h
9bac43
@@ -507,6 +507,14 @@ struct IDEDevice {
9bac43
     char *serial;
9bac43
     char *model;
9bac43
     uint64_t wwn;
9bac43
+    /*
9bac43
+     * 0x0000        - rotation rate not reported
9bac43
+     * 0x0001        - non-rotating medium (SSD)
9bac43
+     * 0x0002-0x0400 - reserved
9bac43
+     * 0x0401-0xffe  - rotations per minute
9bac43
+     * 0xffff        - reserved
9bac43
+     */
9bac43
+    uint16_t rotation_rate;
9bac43
 };
9bac43
 
9bac43
 /* These are used for the error_status field of IDEBus */
9bac43
-- 
9bac43
1.8.3.1
9bac43