提交 1604d9c8 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6

...@@ -758,6 +758,9 @@ running once the system is up. ...@@ -758,6 +758,9 @@ running once the system is up.
maxcpus= [SMP] Maximum number of processors that an SMP kernel maxcpus= [SMP] Maximum number of processors that an SMP kernel
should make use of should make use of
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
equal to this physical address is ignored.
max_luns= [SCSI] Maximum number of LUNs to probe max_luns= [SCSI] Maximum number of LUNs to probe
Should be between 1 and 2^32-1. Should be between 1 and 2^32-1.
......
...@@ -191,7 +191,7 @@ simeth_probe1(void) ...@@ -191,7 +191,7 @@ simeth_probe1(void)
unsigned char mac_addr[ETH_ALEN]; unsigned char mac_addr[ETH_ALEN];
struct simeth_local *local; struct simeth_local *local;
struct net_device *dev; struct net_device *dev;
int fd, i, err; int fd, i, err, rc;
/* /*
* XXX Fix me * XXX Fix me
...@@ -228,7 +228,9 @@ simeth_probe1(void) ...@@ -228,7 +228,9 @@ simeth_probe1(void)
return err; return err;
} }
dev->irq = assign_irq_vector(AUTO_ASSIGN); if ((rc = assign_irq_vector(AUTO_ASSIGN)) < 0)
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
dev->irq = rc;
/* /*
* attach the interrupt in the simulator, this does enable interrupts * attach the interrupt in the simulator, this does enable interrupts
......
...@@ -982,7 +982,7 @@ static struct tty_operations hp_ops = { ...@@ -982,7 +982,7 @@ static struct tty_operations hp_ops = {
static int __init static int __init
simrs_init (void) simrs_init (void)
{ {
int i; int i, rc;
struct serial_state *state; struct serial_state *state;
if (!ia64_platform_is("hpsim")) if (!ia64_platform_is("hpsim"))
...@@ -1017,7 +1017,10 @@ simrs_init (void) ...@@ -1017,7 +1017,10 @@ simrs_init (void)
if (state->type == PORT_UNKNOWN) continue; if (state->type == PORT_UNKNOWN) continue;
if (!state->irq) { if (!state->irq) {
state->irq = assign_irq_vector(AUTO_ASSIGN); if ((rc = assign_irq_vector(AUTO_ASSIGN)) < 0)
panic("%s: out of interrupt vectors!\n",
__FUNCTION__);
state->irq = rc;
ia64_ssc_connect_irq(KEYBOARD_INTR, state->irq); ia64_ssc_connect_irq(KEYBOARD_INTR, state->irq);
} }
......
...@@ -1249,7 +1249,7 @@ ENTRY(sys_rt_sigreturn) ...@@ -1249,7 +1249,7 @@ ENTRY(sys_rt_sigreturn)
stf.spill [r17]=f11 stf.spill [r17]=f11
adds out0=16,sp // out0 = &sigscratch adds out0=16,sp // out0 = &sigscratch
br.call.sptk.many rp=ia64_rt_sigreturn br.call.sptk.many rp=ia64_rt_sigreturn
.ret19: .restore sp 0 .ret19: .restore sp,0
adds sp=16,sp adds sp=16,sp
;; ;;
ld8 r9=[sp] // load new ar.unat ld8 r9=[sp] // load new ar.unat
......
...@@ -489,8 +489,6 @@ static int iosapic_find_sharable_vector (unsigned long trigger, unsigned long po ...@@ -489,8 +489,6 @@ static int iosapic_find_sharable_vector (unsigned long trigger, unsigned long po
} }
} }
} }
if (vector < 0)
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
return vector; return vector;
} }
...@@ -506,6 +504,8 @@ iosapic_reassign_vector (int vector) ...@@ -506,6 +504,8 @@ iosapic_reassign_vector (int vector)
if (!list_empty(&iosapic_intr_info[vector].rtes)) { if (!list_empty(&iosapic_intr_info[vector].rtes)) {
new_vector = assign_irq_vector(AUTO_ASSIGN); new_vector = assign_irq_vector(AUTO_ASSIGN);
if (new_vector < 0)
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
printk(KERN_INFO "Reassigning vector %d to %d\n", vector, new_vector); printk(KERN_INFO "Reassigning vector %d to %d\n", vector, new_vector);
memcpy(&iosapic_intr_info[new_vector], &iosapic_intr_info[vector], memcpy(&iosapic_intr_info[new_vector], &iosapic_intr_info[vector],
sizeof(struct iosapic_intr_info)); sizeof(struct iosapic_intr_info));
...@@ -734,9 +734,12 @@ iosapic_register_intr (unsigned int gsi, ...@@ -734,9 +734,12 @@ iosapic_register_intr (unsigned int gsi,
spin_unlock_irqrestore(&iosapic_lock, flags); spin_unlock_irqrestore(&iosapic_lock, flags);
/* If vector is running out, we try to find a sharable vector */ /* If vector is running out, we try to find a sharable vector */
vector = assign_irq_vector_nopanic(AUTO_ASSIGN); vector = assign_irq_vector(AUTO_ASSIGN);
if (vector < 0) if (vector < 0) {
vector = iosapic_find_sharable_vector(trigger, polarity); vector = iosapic_find_sharable_vector(trigger, polarity);
if (vector < 0)
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
}
spin_lock_irqsave(&irq_descp(vector)->lock, flags); spin_lock_irqsave(&irq_descp(vector)->lock, flags);
spin_lock(&iosapic_lock); spin_lock(&iosapic_lock);
...@@ -884,6 +887,8 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi, ...@@ -884,6 +887,8 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
break; break;
case ACPI_INTERRUPT_INIT: case ACPI_INTERRUPT_INIT:
vector = assign_irq_vector(AUTO_ASSIGN); vector = assign_irq_vector(AUTO_ASSIGN);
if (vector < 0)
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
delivery = IOSAPIC_INIT; delivery = IOSAPIC_INIT;
break; break;
case ACPI_INTERRUPT_CPEI: case ACPI_INTERRUPT_CPEI:
......
...@@ -63,30 +63,19 @@ EXPORT_SYMBOL(isa_irq_to_vector_map); ...@@ -63,30 +63,19 @@ EXPORT_SYMBOL(isa_irq_to_vector_map);
static unsigned long ia64_vector_mask[BITS_TO_LONGS(IA64_NUM_DEVICE_VECTORS)]; static unsigned long ia64_vector_mask[BITS_TO_LONGS(IA64_NUM_DEVICE_VECTORS)];
int int
assign_irq_vector_nopanic (int irq) assign_irq_vector (int irq)
{ {
int pos, vector; int pos, vector;
again: again:
pos = find_first_zero_bit(ia64_vector_mask, IA64_NUM_DEVICE_VECTORS); pos = find_first_zero_bit(ia64_vector_mask, IA64_NUM_DEVICE_VECTORS);
vector = IA64_FIRST_DEVICE_VECTOR + pos; vector = IA64_FIRST_DEVICE_VECTOR + pos;
if (vector > IA64_LAST_DEVICE_VECTOR) if (vector > IA64_LAST_DEVICE_VECTOR)
return -1; return -ENOSPC;
if (test_and_set_bit(pos, ia64_vector_mask)) if (test_and_set_bit(pos, ia64_vector_mask))
goto again; goto again;
return vector; return vector;
} }
int
assign_irq_vector (int irq)
{
int vector = assign_irq_vector_nopanic(irq);
if (vector < 0)
panic("assign_irq_vector: out of interrupt vectors!");
return vector;
}
void void
free_irq_vector (int vector) free_irq_vector (int vector)
{ {
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <linux/vfs.h> #include <linux/vfs.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/version.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <asm/errno.h> #include <asm/errno.h>
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/version.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/delay.h>
#include <asm/sn/intr.h> #include <asm/sn/intr.h>
#include <asm/sn/sn_sal.h> #include <asm/sn/sn_sal.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
...@@ -308,8 +309,7 @@ xpc_make_first_contact(struct xpc_partition *part) ...@@ -308,8 +309,7 @@ xpc_make_first_contact(struct xpc_partition *part)
"partition %d\n", XPC_PARTID(part)); "partition %d\n", XPC_PARTID(part));
/* wait a 1/4 of a second or so */ /* wait a 1/4 of a second or so */
set_current_state(TASK_INTERRUPTIBLE); msleep_interruptible(250);
(void) schedule_timeout(0.25 * HZ);
if (part->act_state == XPC_P_DEACTIVATING) { if (part->act_state == XPC_P_DEACTIVATING) {
return part->reason; return part->reason;
...@@ -841,9 +841,7 @@ xpc_do_exit(void) ...@@ -841,9 +841,7 @@ xpc_do_exit(void)
down(&xpc_discovery_exited); down(&xpc_discovery_exited);
set_current_state(TASK_INTERRUPTIBLE); msleep_interruptible(300);
schedule_timeout(0.3 * HZ);
set_current_state(TASK_RUNNING);
/* wait for all partitions to become inactive */ /* wait for all partitions to become inactive */
...@@ -860,12 +858,8 @@ xpc_do_exit(void) ...@@ -860,12 +858,8 @@ xpc_do_exit(void)
} }
} }
if (active_part_count) { if (active_part_count)
set_current_state(TASK_INTERRUPTIBLE); msleep_interruptible(300);
schedule_timeout(0.3 * HZ);
set_current_state(TASK_RUNNING);
}
} while (active_part_count > 0); } while (active_part_count > 0);
......
...@@ -81,7 +81,6 @@ extern __u8 isa_irq_to_vector_map[16]; ...@@ -81,7 +81,6 @@ extern __u8 isa_irq_to_vector_map[16];
extern struct hw_interrupt_type irq_type_ia64_lsapic; /* CPU-internal interrupt controller */ extern struct hw_interrupt_type irq_type_ia64_lsapic; /* CPU-internal interrupt controller */
extern int assign_irq_vector_nopanic (int irq); /* allocate a free vector without panic */
extern int assign_irq_vector (int irq); /* allocate a free vector */ extern int assign_irq_vector (int irq); /* allocate a free vector */
extern void free_irq_vector (int vector); extern void free_irq_vector (int vector);
extern void ia64_send_ipi (int cpu, int vector, int delivery_mode, int redirect); extern void ia64_send_ipi (int cpu, int vector, int delivery_mode, int redirect);
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#define _ASM_IA64_SN_XP_H #define _ASM_IA64_SN_XP_H
#include <linux/version.h>
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/hardirq.h> #include <linux/hardirq.h>
#include <asm/sn/types.h> #include <asm/sn/types.h>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册