From: Kevin Wolf <kwolf@redhat.com>
To: anthony@codemonkey.ws
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 22/28] blockdev: Fix regression in -drive if=scsi, index=N
Date: Mon, 31 Jan 2011 16:29:10 +0100 [thread overview]
Message-ID: <1296487756-12553-23-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1296487756-12553-1-git-send-email-kwolf@redhat.com>
From: Markus Armbruster <armbru@redhat.com>
Before commit 622b520f, index=12 meant bus=1,unit=5.
Since the commit, it means bus=0,unit=12. The drive is created, but
not the guest device. That's because the controllers we use with
if=scsi drives (lsi53c895a and esp) support only 7 units, and
scsi_bus_legacy_handle_cmdline() ignores drives with unit numbers
exceeding that limit.
Changing the mapping of index to bus, unit is a regression. Breaking
-drive invocations that used to work just makes it worse.
Revert the part of commit 622b520f that causes this, and clean up
some.
Note that the fix only affects if=scsi. You can still put more than 7
units on a SCSI bus with -device & friends.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
blockdev.c | 18 ++++++++++++++++--
blockdev.h | 3 ---
hw/ide.h | 2 ++
hw/ide/ahci.c | 1 -
hw/qdev.c | 1 -
hw/scsi.h | 3 ++-
savevm.c | 1 -
7 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 9c883ce..fba53f9 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -32,8 +32,22 @@ static const char *const if_name[IF_COUNT] = {
};
static const int if_max_devs[IF_COUNT] = {
- [IF_IDE] = MAX_IDE_DEVS,
- [IF_SCSI] = MAX_SCSI_DEVS,
+ /*
+ * Do not change these numbers! They govern how drive option
+ * index maps to unit and bus. That mapping is ABI.
+ *
+ * All controllers used to imlement if=T drives need to support
+ * if_max_devs[T] units, for any T with if_max_devs[T] != 0.
+ * Otherwise, some index values map to "impossible" bus, unit
+ * values.
+ *
+ * For instance, if you change [IF_SCSI] to 255, -drive
+ * if=scsi,index=12 no longer means bus=1,unit=5, but
+ * bus=0,unit=12. With an lsi53c895a controller (7 units max),
+ * the drive can't be set up. Regression.
+ */
+ [IF_IDE] = 2,
+ [IF_SCSI] = 7,
};
/*
diff --git a/blockdev.h b/blockdev.h
index 2cbbb87..cf8fc01 100644
--- a/blockdev.h
+++ b/blockdev.h
@@ -37,9 +37,6 @@ struct DriveInfo {
QTAILQ_ENTRY(DriveInfo) next;
};
-#define MAX_IDE_DEVS 2
-#define MAX_SCSI_DEVS 255
-
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
int drive_get_max_bus(BlockInterfaceType type);
DriveInfo *drive_get_next(BlockInterfaceType type);
diff --git a/hw/ide.h b/hw/ide.h
index 2b5ae7c..73fb550 100644
--- a/hw/ide.h
+++ b/hw/ide.h
@@ -4,6 +4,8 @@
#include "isa.h"
#include "pci.h"
+#define MAX_IDE_DEVS 2
+
/* ide-isa.c */
ISADevice *isa_ide_init(int iobase, int iobase2, int isairq,
DriveInfo *hd0, DriveInfo *hd1);
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 433171c..671b4df 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -70,7 +70,6 @@
#include "monitor.h"
#include "dma.h"
#include "cpu-common.h"
-#include "blockdev.h"
#include "internal.h"
#include <hw/ide/pci.h>
diff --git a/hw/qdev.c b/hw/qdev.c
index 0c94fb2..c7fec44 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -29,7 +29,6 @@
#include "qdev.h"
#include "sysemu.h"
#include "monitor.h"
-#include "blockdev.h"
static int qdev_hotplug = 0;
static bool qdev_hot_added = false;
diff --git a/hw/scsi.h b/hw/scsi.h
index 846fbba..d3b5d56 100644
--- a/hw/scsi.h
+++ b/hw/scsi.h
@@ -3,9 +3,10 @@
#include "qdev.h"
#include "block.h"
-#include "blockdev.h"
#include "block_int.h"
+#define MAX_SCSI_DEVS 255
+
#define SCSI_CMD_BUF_SIZE 16
/* scsi-disk.c */
diff --git a/savevm.c b/savevm.c
index fcd8db4..4453217 100644
--- a/savevm.c
+++ b/savevm.c
@@ -78,7 +78,6 @@
#include "sysemu.h"
#include "qemu-timer.h"
#include "qemu-char.h"
-#include "blockdev.h"
#include "audio/audio.h"
#include "migration.h"
#include "qemu_socket.h"
--
1.7.2.3
next prev parent reply other threads:[~2011-01-31 15:31 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-31 15:28 [Qemu-devel] [PULL 00/28] Block patches Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 01/28] strtosz(): use unsigned char and switch to qemu_isspace() Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 02/28] strtosz() use qemu_toupper() to simplify switch statement Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 03/28] strtosz(): Fix name confusion in use of modf() Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 04/28] strtosz(): Use suffix macros in switch() statement Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 05/28] block: add block_resize monitor command Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 06/28] block: tell drivers about an image resize Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 07/28] virtio-blk: tell the guest about size changes Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 08/28] virtio-pci: Disable virtio-ioeventfd when !CONFIG_IOTHREAD Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 09/28] Add documentation for STRTOSZ_DEFSUFFIX_ macros Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 10/28] ahci: Fix cpu_physical_memory_unmap() argument ordering Kevin Wolf
2011-01-31 15:28 ` [Qemu-devel] [PATCH 11/28] Reorganize struct Qcow2Cache for better struct packing Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 12/28] sheepdog: support creating images on remote hosts Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 13/28] qemu-io: Fix discard command Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 14/28] qcow2: Add bdrv_discard support Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 15/28] qed: Images with backing file do not require QED_F_NEED_CHECK Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 16/28] raw-win32: Fix bdrv_flush return value Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 17/28] scsi hotplug: Set DriveInfo member bus correctly Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 18/28] qcow2-refcount: remove write-only variables Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 19/28] blockdev: New drive_get_next(), replacing qdev_init_bdrv() Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 20/28] blockdev: Move BlockInterfaceType from qemu-common.h to blockdev.h Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 21/28] blockdev: Put BlockInterfaceType names and max_devs in tables Kevin Wolf
2011-01-31 15:29 ` Kevin Wolf [this message]
2011-01-31 15:29 ` [Qemu-devel] [PATCH 23/28] blockdev: Make drive_add() take explicit type, index parameters Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 24/28] blockdev: Factor drive_index_to_{bus, unit}_id out of drive_init() Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 25/28] blockdev: New drive_get_by_index() Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 26/28] blockdev: Reject multiple definitions for the same drive Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 27/28] blockdev: Replace drive_add()'s fmt, ... by optstr parameter Kevin Wolf
2011-01-31 15:29 ` [Qemu-devel] [PATCH 28/28] blockdev: Fix drive_add for drives without media Kevin Wolf
2011-01-31 18:01 ` [Qemu-devel] Re: [PULL 00/28] Block patches Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1296487756-12553-23-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.