RESEND [PATCH] - SN: Add support for CPU disable
Add additional support for CPU disable on SN platforms. Correctly setup the smp_affinity mask for I/O error IRQs. Restrict the use of the feature to Altix 4000 and 450 systems running with a CPU disable capable PROM, and do not allow disabling of CPU 0. Signed-off-by: John Keller <[EMAIL PROTECTED]> --- Resend #2: Add severity levels to the new "printk" messages. Resend #1: Code was incorrectly passing a logical, instead of physical, cpuid to set_irq_affinity_info(). Also, some cleanup per review comments. arch/ia64/kernel/smpboot.c |6 + arch/ia64/sn/kernel/huberror.c | 14 --- arch/ia64/sn/kernel/irq.c | 15 arch/ia64/sn/kernel/sn2/sn2_smp.c | 26 ++ arch/ia64/sn/pci/pcibr/pcibr_provider.c |1 arch/ia64/sn/pci/tioca_provider.c |2 + arch/ia64/sn/pci/tioce_provider.c |1 include/asm-ia64/sn/arch.h |1 include/asm-ia64/sn/intr.h |1 include/asm-ia64/sn/sn_feature_sets.h |1 10 files changed, 64 insertions(+), 4 deletions(-) Index: release/arch/ia64/sn/kernel/huberror.c === --- release.orig/arch/ia64/sn/kernel/huberror.c 2007-08-22 16:51:28.667238863 -0500 +++ release/arch/ia64/sn/kernel/huberror.c 2007-08-22 18:41:19.088053993 -0500 @@ -185,11 +185,14 @@ void hubiio_crb_error_handler(struct hub */ void hub_error_init(struct hubdev_info *hubdev_info) { + if (request_irq(SGI_II_ERROR, hub_eint_handler, IRQF_SHARED, - "SN_hub_error", (void *)hubdev_info)) + "SN_hub_error", (void *)hubdev_info)) { printk("hub_error_init: Failed to request_irq for 0x%p\n", hubdev_info); - return; + return; + } + sn_set_err_irq_affinity(SGI_II_ERROR); } @@ -202,11 +205,14 @@ void hub_error_init(struct hubdev_info * */ void ice_error_init(struct hubdev_info *hubdev_info) { + if (request_irq (SGI_TIO_ERROR, (void *)hub_eint_handler, IRQF_SHARED, "SN_TIO_error", - (void *)hubdev_info)) + (void *)hubdev_info)) { printk("ice_error_init: request_irq() error hubdev_info 0x%p\n", hubdev_info); -return; + return; + } + sn_set_err_irq_affinity(SGI_TIO_ERROR); } Index: release/arch/ia64/sn/pci/pcibr/pcibr_provider.c === --- release.orig/arch/ia64/sn/pci/pcibr/pcibr_provider.c2007-08-22 16:51:28.679240340 -0500 +++ release/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2007-08-22 18:41:19.100055471 -0500 @@ -145,6 +145,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *p printk(KERN_WARNING "pcibr cannot allocate interrupt for error handler\n"); } + sn_set_err_irq_affinity(SGI_PCIASIC_ERROR); /* * Update the Bridge with the "kernel" pagesize Index: release/arch/ia64/sn/pci/tioca_provider.c === --- release.orig/arch/ia64/sn/pci/tioca_provider.c 2007-08-22 16:51:28.679240340 -0500 +++ release/arch/ia64/sn/pci/tioca_provider.c 2007-08-22 18:41:19.112056948 -0500 @@ -654,6 +654,8 @@ tioca_bus_fixup(struct pcibus_bussoft *p __FUNCTION__, SGI_TIOCA_ERROR, (int)tioca_common->ca_common.bs_persist_busnum); + sn_set_err_irq_affinity(SGI_TIOCA_ERROR); + /* Setup locality information */ controller->node = tioca_kern->ca_closest_node; return tioca_common; Index: release/arch/ia64/sn/pci/tioce_provider.c === --- release.orig/arch/ia64/sn/pci/tioce_provider.c 2007-08-22 16:51:28.679240340 -0500 +++ release/arch/ia64/sn/pci/tioce_provider.c 2007-08-22 18:41:19.124058426 -0500 @@ -1034,6 +1034,7 @@ tioce_bus_fixup(struct pcibus_bussoft *p tioce_common->ce_pcibus.bs_persist_segment, tioce_common->ce_pcibus.bs_persist_busnum); + sn_set_err_irq_affinity(SGI_PCIASIC_ERROR); return tioce_common; } Index: release/include/asm-ia64/sn/sn_feature_sets.h === --- release.orig/include/asm-ia64/sn/sn_feature_sets.h 2007-08-22 16:51:32.887758491 -0500 +++ release/include/asm-ia64/sn/sn_feature_sets.h 2007-08-22 18:41:19.140060396 -0500 @@ -31,6 +31,7 @@ extern int sn_prom_feature_available(int #define PRF_PAL_CACHE_FLUSH_SAFE 0 #define PRF_DEVICE_FLUSH_LIST 1 #define PRF_HOTPLUG_SUPPORT2 +#define PRF_CPU_DISABLE_SUPPORT3 /* - OS Features ---*/ Index: release/arch/ia64/kernel/smpboot
RESEND [PATCH] - SN: Add support for CPU disable
Add additional support for CPU disable on SN platforms. Correctly setup the smp_affinity mask for I/O error IRQs. Restrict the use of the feature to Altix 4000 and 450 systems running with a CPU disable capable PROM, and do not allow disabling of CPU 0. Signed-off-by: John Keller <[EMAIL PROTECTED]> --- Resend #1: Code was incorrectly passing a logical, instead of physical, cpuid to set_irq_affinity_info(). Also, some cleanup per review comments. arch/ia64/kernel/smpboot.c |6 + arch/ia64/sn/kernel/huberror.c | 14 +--- arch/ia64/sn/kernel/irq.c | 15 + arch/ia64/sn/kernel/sn2/sn2_smp.c | 24 ++ arch/ia64/sn/pci/pcibr/pcibr_provider.c |1 arch/ia64/sn/pci/tioca_provider.c |2 + arch/ia64/sn/pci/tioce_provider.c |1 include/asm-ia64/sn/arch.h |1 include/asm-ia64/sn/intr.h |1 include/asm-ia64/sn/sn_feature_sets.h |1 10 files changed, 62 insertions(+), 4 deletions(-) Index: linux-2.6/arch/ia64/sn/kernel/huberror.c === --- linux-2.6.orig/arch/ia64/sn/kernel/huberror.c 2007-08-01 14:28:07.683651839 -0500 +++ linux-2.6/arch/ia64/sn/kernel/huberror.c2007-08-01 14:29:20.400606100 -0500 @@ -185,11 +185,14 @@ void hubiio_crb_error_handler(struct hub */ void hub_error_init(struct hubdev_info *hubdev_info) { + if (request_irq(SGI_II_ERROR, hub_eint_handler, IRQF_SHARED, - "SN_hub_error", (void *)hubdev_info)) + "SN_hub_error", (void *)hubdev_info)) { printk("hub_error_init: Failed to request_irq for 0x%p\n", hubdev_info); - return; + return; + } + sn_set_err_irq_affinity(SGI_II_ERROR); } @@ -202,11 +205,14 @@ void hub_error_init(struct hubdev_info * */ void ice_error_init(struct hubdev_info *hubdev_info) { + if (request_irq (SGI_TIO_ERROR, (void *)hub_eint_handler, IRQF_SHARED, "SN_TIO_error", - (void *)hubdev_info)) + (void *)hubdev_info)) { printk("ice_error_init: request_irq() error hubdev_info 0x%p\n", hubdev_info); -return; + return; + } + sn_set_err_irq_affinity(SGI_TIO_ERROR); } Index: linux-2.6/arch/ia64/sn/pci/pcibr/pcibr_provider.c === --- linux-2.6.orig/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2007-08-01 14:28:07.683651839 -0500 +++ linux-2.6/arch/ia64/sn/pci/pcibr/pcibr_provider.c 2007-08-01 14:29:20.420608563 -0500 @@ -145,6 +145,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *p printk(KERN_WARNING "pcibr cannot allocate interrupt for error handler\n"); } + sn_set_err_irq_affinity(SGI_PCIASIC_ERROR); /* * Update the Bridge with the "kernel" pagesize Index: linux-2.6/arch/ia64/sn/pci/tioca_provider.c === --- linux-2.6.orig/arch/ia64/sn/pci/tioca_provider.c2007-08-01 14:28:07.695653317 -0500 +++ linux-2.6/arch/ia64/sn/pci/tioca_provider.c 2007-08-01 14:29:20.432610041 -0500 @@ -654,6 +654,8 @@ tioca_bus_fixup(struct pcibus_bussoft *p __FUNCTION__, SGI_TIOCA_ERROR, (int)tioca_common->ca_common.bs_persist_busnum); + sn_set_err_irq_affinity(SGI_TIOCA_ERROR); + /* Setup locality information */ controller->node = tioca_kern->ca_closest_node; return tioca_common; Index: linux-2.6/arch/ia64/sn/pci/tioce_provider.c === --- linux-2.6.orig/arch/ia64/sn/pci/tioce_provider.c2007-08-01 14:28:07.695653317 -0500 +++ linux-2.6/arch/ia64/sn/pci/tioce_provider.c 2007-08-01 14:29:20.444611519 -0500 @@ -1034,6 +1034,7 @@ tioce_bus_fixup(struct pcibus_bussoft *p tioce_common->ce_pcibus.bs_persist_segment, tioce_common->ce_pcibus.bs_persist_busnum); + sn_set_err_irq_affinity(SGI_PCIASIC_ERROR); return tioce_common; } Index: linux-2.6/include/asm-ia64/sn/sn_feature_sets.h === --- linux-2.6.orig/include/asm-ia64/sn/sn_feature_sets.h2007-08-01 14:28:07.695653317 -0500 +++ linux-2.6/include/asm-ia64/sn/sn_feature_sets.h 2007-08-01 14:29:20.456612997 -0500 @@ -31,6 +31,7 @@ extern int sn_prom_feature_available(int #define PRF_PAL_CACHE_FLUSH_SAFE 0 #define PRF_DEVICE_FLUSH_LIST 1 #define PRF_HOTPLUG_SUPPORT2 +#define PRF_CPU_DISABLE_SUPPORT3 /* - OS Features ---*/ Index: linux-2.6/arch/ia64/kernel/smpboot.c ==