aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xen/arch/i386/io_apic.c2
-rw-r--r--xen/include/asm-i386/smpboot.h11
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_ide.c18
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c16
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_segment.c4
5 files changed, 32 insertions, 19 deletions
diff --git a/xen/arch/i386/io_apic.c b/xen/arch/i386/io_apic.c
index 878c189afb..6ad37f2399 100644
--- a/xen/arch/i386/io_apic.c
+++ b/xen/arch/i386/io_apic.c
@@ -826,7 +826,6 @@ void __init print_IO_APIC(void)
UNEXPECTED_IO_APIC();
}
-#if 0
printk(KERN_DEBUG ".... IRQ redirection table:\n");
printk(KERN_DEBUG " NR Log Phy Mask Trig IRR Pol"
@@ -871,7 +870,6 @@ void __init print_IO_APIC(void)
entry = irq_2_pin + entry->next;
}
printk("\n");
-#endif
}
printk(KERN_INFO ".................................... done.\n");
diff --git a/xen/include/asm-i386/smpboot.h b/xen/include/asm-i386/smpboot.h
index ece215fab0..3ca484d531 100644
--- a/xen/include/asm-i386/smpboot.h
+++ b/xen/include/asm-i386/smpboot.h
@@ -116,6 +116,15 @@ static inline int target_cpus(void)
return cpu_online_map;
}
#else
-#define target_cpus() (0x01)
+/* KAF Xen: Round-robin allocate IRQs to CPUs. */
+static inline int target_cpus(void)
+{
+ static unsigned int cpu_field = 1;
+ do {
+ cpu_field <<= 1;
+ if ( cpu_field == 0x100 ) cpu_field = 1; /* logical field == 8 bits */
+ } while ( (cpu_field & cpu_online_map) == 0 );
+ return cpu_field;
+}
#endif
#endif
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 70990167e3..5e96f4197b 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
@@ -18,7 +18,7 @@ static int xlide_blksize_size[XLIDE_MAX];
static int xlide_hardsect_size[XLIDE_MAX];
static int xlide_max_sectors[XLIDE_MAX];
-struct gendisk *xlide_gendisk;
+struct gendisk *xlide_gendisk = NULL;
static struct block_device_operations xlide_block_fops =
{
@@ -41,6 +41,13 @@ int xlide_init(xen_disk_info_t *xdi)
int i, result, units, minors, disk;
struct gendisk *gd;
+ /* 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 ( IS_IDE_XENDEV(xdi->disks[i].device) &&
+ ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++;
+ if ( units == 0 ) return 0;
+
SET_MODULE_OWNER(&xlide_block_fops);
result = register_blkdev(XLIDE_MAJOR, XLIDE_MAJOR_NAME,
@@ -73,13 +80,6 @@ int xlide_init(xen_disk_info_t *xdi)
*/
blk_queue_headactive(BLK_DEFAULT_QUEUE(XLIDE_MAJOR), 0);
- /* 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 ( 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;
@@ -133,6 +133,8 @@ int xlide_init(xen_disk_info_t *xdi)
void xlide_cleanup(void)
{
+ if ( xlide_gendisk == NULL ) return;
+
blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLIDE_MAJOR));
xlide_gendisk = NULL;
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 57bdd8b936..e4d1007575 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
@@ -42,6 +42,13 @@ int xlscsi_init(xen_disk_info_t *xdi)
int i, result, units, minors, disk;
struct gendisk *gd;
+ /* 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 ( IS_SCSI_XENDEV(xdi->disks[i].device) &&
+ ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++;
+ if ( units == 0 ) return 0;
+
SET_MODULE_OWNER(&xlscsi_block_fops);
result = register_blkdev(XLSCSI_MAJOR, XLSCSI_MAJOR_NAME,
@@ -74,13 +81,6 @@ int xlscsi_init(xen_disk_info_t *xdi)
*/
blk_queue_headactive(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR), 0);
- /* 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 ( 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;
@@ -134,6 +134,8 @@ int xlscsi_init(xen_disk_info_t *xdi)
void xlscsi_cleanup(void)
{
+ if ( xlscsi_gendisk == NULL ) return;
+
blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR));
xlscsi_gendisk = NULL;
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 8626a36569..6ef1838a2b 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
@@ -21,7 +21,7 @@ static int xlseg_blksize_size[XLVIRT_MAX];
static int xlseg_hardsect_size[XLVIRT_MAX];
static int xlseg_max_sectors[XLVIRT_MAX];
-struct gendisk *xlsegment_gendisk;
+struct gendisk *xlsegment_gendisk = NULL;
static xen_disk_info_t xlseg_disk_info;
@@ -148,6 +148,8 @@ int __init xlseg_init(void)
static void __exit xlseg_cleanup(void)
{
+ if ( xlsegment_gendisk == NULL ) return;
+
blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLVIRT_MAJOR));
xlsegment_gendisk = NULL;