diff options
-rw-r--r-- | xen/arch/i386/io_apic.c | 2 | ||||
-rw-r--r-- | xen/include/asm-i386/smpboot.h | 11 | ||||
-rw-r--r-- | xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_ide.c | 18 | ||||
-rw-r--r-- | xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c | 16 | ||||
-rw-r--r-- | xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_segment.c | 4 |
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; |