aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCornelia Huck <cornelia.huck@de.ibm.com>2013-04-26 02:12:52 +0000
committerAlexander Graf <agraf@suse.de>2013-04-26 20:18:24 +0200
commit22d67ab55aad82383a0e5628b902a1a0556b2fc9 (patch)
tree78792ce67e67aa6a1ecc44f44748ca7df84cb373
parentdc03640b5851d3115448493f0eee2b7f539de81a (diff)
downloadqemu-22d67ab55aad82383a0e5628b902a1a0556b2fc9.zip
qemu-22d67ab55aad82383a0e5628b902a1a0556b2fc9.tar.gz
qemu-22d67ab55aad82383a0e5628b902a1a0556b2fc9.tar.bz2
s390-ccw.img: Detect devices with stsch.
stsch is the canonical way to detect devices. As a bonus, we can abort the loop if we get cc 3, and we need to check only the valid devices (dnv set). Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--pc-bios/s390-ccw/main.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 67f4987..fd40fa5 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -22,7 +22,7 @@ void virtio_panic(const char *string)
static void virtio_setup(void)
{
- struct irb irb;
+ struct schib schib;
int i;
int r;
bool found = false;
@@ -31,8 +31,11 @@ static void virtio_setup(void)
for (i = 0; i < 0x10000; i++) {
blk_schid.sch_no = i;
- r = tsch(blk_schid, &irb);
- if (r != 3) {
+ r = stsch_err(blk_schid, &schib);
+ if (r == 3) {
+ break;
+ }
+ if (schib.pmcw.dnv) {
if (virtio_is_blk(blk_schid)) {
found = true;
break;