qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 4/6] ide: Update ide_drive_get to be HBA agnostic


From: John Snow
Subject: [Qemu-devel] [PATCH 4/6] ide: Update ide_drive_get to be HBA agnostic
Date: Tue, 23 Sep 2014 12:48:03 -0400

Instead of duplicating the logic for the if_ide
(bus,unit) mappings, rely on the blockdev layer
for managing those mappings for us, and use the
drive_get_by_index call instead.

This allows ide_drive_get to work for AHCI HBAs
as well, and can be used in the Q35 initialization.

Signed-off-by: John Snow <address@hidden>
---
 hw/ide/core.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 6fba056..1e43d50 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2551,13 +2551,15 @@ const VMStateDescription vmstate_ide_bus = {
 void ide_drive_get(DriveInfo **hd, int max_bus)
 {
     int i;
+    int max_devs = if_get_max_devs(IF_IDE) * max_bus;
+    int buses = drive_get_max_bus(IF_IDE) + 1;
 
-    if (drive_get_max_bus(IF_IDE) >= max_bus) {
-        fprintf(stderr, "qemu: too many IDE bus: %d\n", max_bus);
-        exit(1);
+    if (buses > max_bus) {
+        fprintf(stderr, "Warning: Too many IDE buses defined (%d > %d)\n",
+                buses, max_bus);
     }
 
-    for(i = 0; i < max_bus * MAX_IDE_DEVS; i++) {
-        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
+    for (i = 0; i < max_devs; i++) {
+        hd[i] = drive_get_by_index(IF_IDE, i);
     }
 }
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]