From fe98a95d91fb5a6a45c93c927ddb7499f8d8a8c7 Mon Sep 17 00:00:00 2001 From: "kaf24@labyrinth.cl.cam.ac.uk" Date: Mon, 10 Mar 2003 13:16:01 +0000 Subject: bitkeeper revision 1.118 (3e6c9011AqlyQcEHaXEFaZYbfVfgPQ) Many files: Fixed Xen blkdev probing to return device numbers. --- .../arch/xeno/drivers/block/xl_ide.c | 17 +++++++++++------ .../arch/xeno/drivers/block/xl_scsi.c | 17 +++++++++++------ .../arch/xeno/drivers/block/xl_segment.c | 22 ++++++++++++---------- 3 files changed, 34 insertions(+), 22 deletions(-) (limited to 'xenolinux-2.4.21-pre4-sparse') diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_ide.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_ide.c index 9d6ef64c75..70990167e3 100644 --- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_ide.c +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_ide.c @@ -73,13 +73,16 @@ int xlide_init(xen_disk_info_t *xdi) */ blk_queue_headactive(BLK_DEFAULT_QUEUE(XLIDE_MAJOR), 0); - /* Count number of IDE devices installed in the system. */ + /* If we don't have any usable IDE devices we may as well bail now. */ units = 0; for ( i = 0; i < xdi->count; i++ ) - if ( xdi->disks[i].type == XEN_DISK_IDE ) units++; - + if ( IS_IDE_XENDEV(xdi->disks[i].device) && + ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++; if ( units == 0 ) return 0; + /* We may register up to 16 devices in a sparse identifier space. */ + units = 16; + /* Construct an appropriate gendisk structure. */ minors = units * (1<count; i++ ) { - if ( xdi->disks[i].type != XEN_DISK_IDE ) continue; + disk = xdi->disks[i].device & XENDEV_IDX_MASK; + + /* We can use the first 16 IDE devices. */ + if ( !IS_IDE_XENDEV(xdi->disks[i].device) || (disk >= 16) ) continue; + ((xl_disk_t *)gd->real_devices)[disk].capacity = xdi->disks[i].capacity; register_disk(gd, @@ -115,7 +121,6 @@ int xlide_init(xen_disk_info_t *xdi) 1<disks[i].capacity); - disk++; } printk(KERN_ALERT diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c index 68566799bd..75e379f1ba 100644 --- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c @@ -74,13 +74,16 @@ int xlscsi_init(xen_disk_info_t *xdi) */ blk_queue_headactive(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR), 0); - /* Count number of SCSI devices installed in the system. */ + /* If we don't have any usable SCSI devices we may as well bail now. */ units = 0; for ( i = 0; i < xdi->count; i++ ) - if ( xdi->disks[i].type == XEN_DISK_SCSI ) units++; - + if ( IS_SCSI_XENDEV(xdi->disks[i].device) && + ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++; if ( units == 0 ) return 0; + /* We may register up to 16 devices in a sparse identifier space. */ + units = 16; + /* Construct an appropriate gendisk structure. */ minors = units * (1<count; i++ ) { - if ( xdi->disks[i].type != XEN_DISK_SCSI ) continue; + disk = xdi->disks[i].device & XENDEV_IDX_MASK; + + /* We can use the first 16 IDE devices. */ + if ( !IS_SCSI_XENDEV(xdi->disks[i].device) || (disk >= 16) ) continue; + ((xl_disk_t *)gd->real_devices)[disk].capacity = xdi->disks[i].capacity; register_disk(gd, @@ -116,7 +122,6 @@ int xlscsi_init(xen_disk_info_t *xdi) 1<disks[i].capacity); - disk++; } printk(KERN_ALERT diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_segment.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_segment.c index 97a53fe6fd..8626a36569 100644 --- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_segment.c +++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_segment.c @@ -90,13 +90,12 @@ int __init xlseg_init(void) */ blk_queue_headactive(BLK_DEFAULT_QUEUE(XLVIRT_MAJOR), 0); - - /* Count number of virtual devices installed in the system. */ - units = 0; - for ( i = 0; i < xdi->count; i++ ) - if ( xdi->disks[i].type == XEN_DISK_VIRTUAL ) units++; - - if ( units == 0 ) return 0; + /* + * We may register up to 16 devices in a sparse identifier space. + * Unlike with IDE and SCSI, we always register a gendisk, as new + * virtual devices may get allocate dto us later on. + */ + units = 16; /* Construct an appropriate gendisk structure. */ minors = units * (1<count; i++ ) { - if ( xdi->disks[i].type != XEN_DISK_VIRTUAL ) continue; + disk = xdi->disks[i].device & XENDEV_IDX_MASK; + + /* We can use the first 16 IDE devices. */ + if ( !IS_VIRTUAL_XENDEV(xdi->disks[i].device) || (disk >= 16) ) + continue; + ((xl_disk_t *)gd->real_devices)[disk].capacity = xdi->disks[i].capacity; register_disk(gd, @@ -133,7 +136,6 @@ int __init xlseg_init(void) 1<disks[i].capacity); - disk++; } printk(KERN_ALERT -- cgit v1.2.3