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

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