diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:20:15 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:20:15 -0800 |
| commit | 5bf3be033f504f5fd79690fbb13d720407314e40 (patch) | |
| tree | 96b4fdb8c54f2477829c648e6078a0e54f5e7a6e /arch | |
| parent | 98b8803038fa999212c37952adad1e04144f0ab7 (diff) | |
v2.4.10.1 -> v2.4.10.2
- me/Al Viro: fix bdget() oops with block device modules that don't
clean up after they exit
- Alan Cox: continued merging (drivers, license tags)
- David Miller: sparc update, network fixes
- Christoph Hellwig: work around broken drivers that add a gendisk more
than once
- Jakub Jelinek: handle more ELF loading special cases
- Trond Myklebust: NFS client and lockd reclaimer cleanups/fixes
- Greg KH: USB updates
- Mikael Pettersson: sparate out local APIC / IO-APIC config options
Diffstat (limited to 'arch')
42 files changed, 151 insertions, 165 deletions
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index 4b655b3430a2..e4ca5f6ac724 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c @@ -214,7 +214,8 @@ show_regs(struct pt_regs * regs) { printk("\n"); printk("Pid: %d, comm: %20s\n", current->pid, current->comm); - printk("ps: %04lx pc: [<%016lx>] CPU %d\n", regs->ps, regs->pc, smp_processor_id()); + printk("ps: %04lx pc: [<%016lx>] CPU %d %s\n", + regs->ps, regs->pc, smp_processor_id(), print_tainted()); printk("rp: [<%016lx>] sp: %p\n", regs->r26, regs+1); printk(" r0: %016lx r1: %016lx r2: %016lx r3: %016lx\n", regs->r0, regs->r1, regs->r2, regs->r3); diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c index ca4d01f5cf0b..4b6f52900b6f 100644 --- a/arch/alpha/kernel/traps.c +++ b/arch/alpha/kernel/traps.c @@ -53,8 +53,8 @@ opDEC_check(void) void dik_show_regs(struct pt_regs *regs, unsigned long *r9_15) { - printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx\n", - regs->pc, regs->r26, regs->ps); + printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx %s\n", + regs->pc, regs->r26, regs->ps, print_tainted()); printk("v0 = %016lx t0 = %016lx t1 = %016lx\n", regs->r0, regs->r1, regs->r2); printk("t2 = %016lx t3 = %016lx t4 = %016lx\n", diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 5c9d87a7d00b..f3440360866e 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -158,10 +158,10 @@ void show_regs(struct pt_regs * regs) flags = condition_codes(regs); - printk("pc : [<%08lx>] lr : [<%08lx>]\n" + printk("pc : [<%08lx>] lr : [<%08lx>] %s\n" "sp : %08lx ip : %08lx fp : %08lx\n", instruction_pointer(regs), - regs->ARM_lr, regs->ARM_sp, + regs->ARM_lr, print_tainted(), regs->ARM_sp, regs->ARM_ip, regs->ARM_fp); printk("r10: %08lx r9 : %08lx r8 : %08lx\n", regs->ARM_r10, regs->ARM_r9, diff --git a/arch/cris/kernel/traps.c b/arch/cris/kernel/traps.c index 9fcda3abd2b8..48cec40d0cb9 100644 --- a/arch/cris/kernel/traps.c +++ b/arch/cris/kernel/traps.c @@ -138,8 +138,8 @@ show_registers(struct pt_regs * regs) register. */ unsigned long usp = rdusp(); - printk("IRP: %08lx SRP: %08lx DCCR: %08lx USP: %08lx MOF: %08lx\n", - regs->irp, regs->srp, regs->dccr, usp, regs->mof ); + printk("IRP: %08lx SRP: %08lx DCCR: %08lx USP: %08lx MOF: %08lx %s\n", + regs->irp, regs->srp, regs->dccr, usp, regs->mof, print_tainted()); printk(" r0: %08lx r1: %08lx r2: %08lx r3: %08lx\n", regs->r0, regs->r1, regs->r2, regs->r3); printk(" r4: %08lx r5: %08lx r6: %08lx r7: %08lx\n", diff --git a/arch/i386/config.in b/arch/i386/config.in index d3ef1ed5e4a2..e79f163d9c42 100644 --- a/arch/i386/config.in +++ b/arch/i386/config.in @@ -170,10 +170,13 @@ bool 'Math emulation' CONFIG_MATH_EMULATION bool 'MTRR (Memory Type Range Register) support' CONFIG_MTRR bool 'Symmetric multi-processing support' CONFIG_SMP if [ "$CONFIG_SMP" != "y" ]; then - bool 'APIC and IO-APIC support on uniprocessors' CONFIG_X86_UP_IOAPIC + bool 'Local APIC support on uniprocessors' CONFIG_X86_UP_APIC + dep_bool 'IO-APIC support on uniprocessors' CONFIG_X86_UP_IOAPIC $CONFIG_X86_UP_APIC + if [ "$CONFIG_X86_UP_APIC" = "y" ]; then + define_bool CONFIG_X86_LOCAL_APIC y + fi if [ "$CONFIG_X86_UP_IOAPIC" = "y" ]; then define_bool CONFIG_X86_IO_APIC y - define_bool CONFIG_X86_LOCAL_APIC y fi fi diff --git a/arch/i386/defconfig b/arch/i386/defconfig index 9c8a891632cc..23cd39973a17 100644 --- a/arch/i386/defconfig +++ b/arch/i386/defconfig @@ -311,7 +311,6 @@ CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_NCR53C406A is not set -# CONFIG_SCSI_NCR_D700 is not set # CONFIG_SCSI_NCR53C7xx is not set # CONFIG_SCSI_NCR53C8XX is not set CONFIG_SCSI_SYM53C8XX=y @@ -753,6 +752,7 @@ CONFIG_USB_STORAGE=y # # CONFIG_USB_PEGASUS is not set # CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set # CONFIG_USB_KAWETH is not set # CONFIG_USB_USBNET is not set diff --git a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c index 922c62923261..03f124138beb 100644 --- a/arch/i386/kernel/apm.c +++ b/arch/i386/kernel/apm.c @@ -689,7 +689,6 @@ static void apm_power_off(void) (void) apm_set_power_state(APM_STATE_OFF); } -#ifdef CONFIG_MAGIC_SYSRQ /* * Magic sysrq key and handler for the power off function */ @@ -703,7 +702,6 @@ struct sysrq_key_op sysrq_poweroff_op = { help_msg: "Off", action_msg: "Power Off\n" }; -#endif #ifdef CONFIG_APM_DO_ENABLE @@ -1672,7 +1670,7 @@ static int __init apm_init(void) apm_info.realmode_power_off = 1; /* User can override, but default is to trust DMI */ if (apm_disabled != -1) - apm_info.disabled = 1; + apm_info.disabled = apm_disabled; /* * Fix for the Compaq Contura 3/25c which reports BIOS version 0.1 @@ -1699,8 +1697,7 @@ static int __init apm_init(void) } if (apm_info.disabled) { - if(apm_disabled == 1) - printk(KERN_NOTICE "apm: disabled on user request.\n"); + printk(KERN_NOTICE "apm: disabled on user request.\n"); return -ENODEV; } if ((smp_num_cpus > 1) && !power_off) { diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index 7d1635f2a31e..a49ecf616b99 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c @@ -442,7 +442,7 @@ void show_regs(struct pt_regs * regs) printk("EIP: %04x:[<%08lx>] CPU: %d",0xffff & regs->xcs,regs->eip, smp_processor_id()); if (regs->xcs & 3) printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp); - printk(" EFLAGS: %08lx\n",regs->eflags); + printk(" EFLAGS: %08lx %s\n",regs->eflags, print_tainted()); printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", regs->eax,regs->ebx,regs->ecx,regs->edx); printk("ESI: %08lx EDI: %08lx EBP: %08lx", diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 03181864d651..d0e694913d00 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c @@ -200,8 +200,8 @@ void show_registers(struct pt_regs *regs) esp = regs->esp; ss = regs->xss & 0xffff; } - printk("CPU: %d\nEIP: %04x:[<%08lx>]\nEFLAGS: %08lx\n", - smp_processor_id(), 0xffff & regs->xcs, regs->eip, regs->eflags); + printk("CPU: %d\nEIP: %04x:[<%08lx>] %s\nEFLAGS: %08lx\n", + smp_processor_id(), 0xffff & regs->xcs, regs->eip, print_tainted(), regs->eflags); printk("eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n", regs->eax, regs->ebx, regs->ecx, regs->edx); printk("esi: %08lx edi: %08lx ebp: %08lx esp: %08lx\n", diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index d1fc4cb4e92c..004b93544d14 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c @@ -63,8 +63,8 @@ show_regs (struct pt_regs *regs) { unsigned long ip = regs->cr_iip + ia64_psr(regs)->ri; - printk("\npsr : %016lx ifs : %016lx ip : [<%016lx>]\n", - regs->cr_ipsr, regs->cr_ifs, ip); + printk("\npsr : %016lx ifs : %016lx ip : [<%016lx>] %s\n", + regs->cr_ipsr, regs->cr_ifs, ip, print_tainted()); printk("unat: %016lx pfs : %016lx rsc : %016lx\n", regs->ar_unat, regs->ar_pfs, regs->ar_rsc); printk("rnat: %016lx bsps: %016lx pr : %016lx\n", diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c index 6052ecd225a6..c62ca9f008d8 100644 --- a/arch/m68k/kernel/process.c +++ b/arch/m68k/kernel/process.c @@ -109,8 +109,8 @@ void machine_power_off(void) void show_regs(struct pt_regs * regs) { printk("\n"); - printk("Format %02x Vector: %04x PC: %08lx Status: %04x\n", - regs->format, regs->vector, regs->pc, regs->sr); + printk("Format %02x Vector: %04x PC: %08lx Status: %04x %s\n", + regs->format, regs->vector, regs->pc, regs->sr, print_tainted()); printk("ORIG_D0: %08lx D0: %08lx A2: %08lx A1: %08lx\n", regs->orig_d0, regs->d0, regs->a2, regs->a1); printk("A0: %08lx D5: %08lx D4: %08lx\n", diff --git a/arch/mips/mm/mips32.c b/arch/mips/mm/mips32.c index a4bac6eddb53..4e16f4b4acc5 100644 --- a/arch/mips/mm/mips32.c +++ b/arch/mips/mm/mips32.c @@ -739,8 +739,8 @@ void show_regs(struct pt_regs * regs) regs->regs[28], regs->regs[29], regs->regs[30], regs->regs[31]); /* Saved cp0 registers. */ - printk("epc : %08lx\nStatus: %08lx\nCause : %08lx\n", - regs->cp0_epc, regs->cp0_status, regs->cp0_cause); + printk("epc : %08lx %s\nStatus: %08lx\nCause : %08lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_status, regs->cp0_cause); } void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1, diff --git a/arch/mips/mm/r2300.c b/arch/mips/mm/r2300.c index 25fd07bc1d19..f1244c655118 100644 --- a/arch/mips/mm/r2300.c +++ b/arch/mips/mm/r2300.c @@ -665,8 +665,10 @@ void show_regs(struct pt_regs * regs) /* * Saved cp0 registers */ - printk("epc : %08lx\nStatus: %08x\nCause : %08x\n", - (unsigned long) regs->cp0_epc, (unsigned int) regs->cp0_status, + printk("epc : %08lx %s\nStatus: %08x\nCause : %08x\n", + (unsigned long) regs->cp0_epc, + print_tainted(), + (unsigned int) regs->cp0_status, (unsigned int) regs->cp0_cause); } diff --git a/arch/mips/mm/r4xx0.c b/arch/mips/mm/r4xx0.c index fdb468daecd4..30f94d6e5a9c 100644 --- a/arch/mips/mm/r4xx0.c +++ b/arch/mips/mm/r4xx0.c @@ -2364,8 +2364,8 @@ void show_regs(struct pt_regs * regs) regs->regs[28], regs->regs[29], regs->regs[30], regs->regs[31]); /* Saved cp0 registers. */ - printk("epc : %08lx\nStatus: %08lx\nCause : %08lx\n", - regs->cp0_epc, regs->cp0_status, regs->cp0_cause); + printk("epc : %08lx %s\nStatus: %08lx\nCause : %08lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_status, regs->cp0_cause); } void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1, diff --git a/arch/mips/mm/r5432.c b/arch/mips/mm/r5432.c index 1b9c0cbe9a92..b380ac3d5033 100644 --- a/arch/mips/mm/r5432.c +++ b/arch/mips/mm/r5432.c @@ -765,8 +765,8 @@ void show_regs(struct pt_regs * regs) regs->regs[28], regs->regs[29], regs->regs[30], regs->regs[31]); /* Saved cp0 registers. */ - printk("epc : %08lx\nStatus: %08lx\nCause : %08lx\n", - regs->cp0_epc, regs->cp0_status, regs->cp0_cause); + printk("epc : %08lx %s\nStatus: %08lx\nCause : %08lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_status, regs->cp0_cause); } void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1, diff --git a/arch/mips/mm/rm7k.c b/arch/mips/mm/rm7k.c index 313a77495278..407e8a592e8a 100644 --- a/arch/mips/mm/rm7k.c +++ b/arch/mips/mm/rm7k.c @@ -507,8 +507,8 @@ void show_regs(struct pt_regs * regs) regs->regs[28], regs->regs[29], regs->regs[30], regs->regs[31]); /* Saved cp0 registers. */ - printk(KERN_INFO "epc : %08lx\nStatus: %08lx\nCause : %08lx\n", - regs->cp0_epc, regs->cp0_status, regs->cp0_cause); + printk(KERN_INFO "epc : %08lx %s\nStatus: %08lx\nCause : %08lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_status, regs->cp0_cause); } void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1, diff --git a/arch/mips64/mm/andes.c b/arch/mips64/mm/andes.c index 487639887f62..f9d3cc2c07ca 100644 --- a/arch/mips64/mm/andes.c +++ b/arch/mips64/mm/andes.c @@ -326,8 +326,8 @@ static void andes_show_regs(struct pt_regs *regs) printk("Lo : %016lx\n", regs->lo); /* Saved cp0 registers. */ - printk("epc : %016lx\nbadvaddr: %016lx\n", - regs->cp0_epc, regs->cp0_badvaddr); + printk("epc : %016lx %s\nbadvaddr: %016lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_badvaddr); printk("Status : %08x\nCause : %08x\n", (unsigned int) regs->cp0_status, (unsigned int) regs->cp0_cause); } diff --git a/arch/mips64/mm/r4xx0.c b/arch/mips64/mm/r4xx0.c index 59f52ce36233..8338b520cb80 100644 --- a/arch/mips64/mm/r4xx0.c +++ b/arch/mips64/mm/r4xx0.c @@ -2109,8 +2109,8 @@ static void r4k_show_regs(struct pt_regs *regs) printk("Lo : %016lx\n", regs->lo); /* Saved cp0 registers. */ - printk("epc : %016lx\nbadvaddr: %016lx\n", - regs->cp0_epc, regs->cp0_badvaddr); + printk("epc : %016lx %s\nbadvaddr: %016lx\n", + regs->cp0_epc, print_tainted(), regs->cp0_badvaddr); printk("Status : %08x\nCause : %08x\n", (unsigned int) regs->cp0_status, (unsigned int) regs->cp0_cause); } diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c index d8555370208a..d901209f27cc 100644 --- a/arch/parisc/kernel/traps.c +++ b/arch/parisc/kernel/traps.c @@ -82,7 +82,7 @@ void show_regs(struct pt_regs *regs) printk(" YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI\nPSW: "); printbinary(regs->gr[0], 32); - printk("\n"); + printk(" %s\n", print_tainted()); for (i = 0; i < 32; i += 4) { int j; diff --git a/arch/parisc/mm/pa11.c b/arch/parisc/mm/pa11.c index 42f0d57f6278..0b2db6674db7 100644 --- a/arch/parisc/mm/pa11.c +++ b/arch/parisc/mm/pa11.c @@ -127,8 +127,9 @@ static void pa11_show_regs(struct pt_regs * regs) /* * Saved cp0 registers */ - printk("epc : %08lx\nStatus: %08x\nCause : %08x\n", - (unsigned long) regs->cp0_epc, (unsigned int) regs->cp0_status, + printk("epc : %08lx %s\nStatus: %08x\nCause : %08x\n", + (unsigned long) regs->cp0_epc, print_tainted(), + (unsigned int) regs->cp0_status, (unsigned int) regs->cp0_cause); } diff --git a/arch/parisc/mm/pa20.c b/arch/parisc/mm/pa20.c index cbc0343a0113..069c916ca65e 100644 --- a/arch/parisc/mm/pa20.c +++ b/arch/parisc/mm/pa20.c @@ -127,8 +127,9 @@ static void pa20_show_regs(struct pt_regs * regs) /* * Saved cp0 registers */ - printk("epc : %08lx\nStatus: %08x\nCause : %08x\n", - (unsigned long) regs->cp0_epc, (unsigned int) regs->cp0_status, + printk("epc : %08lx %s\nStatus: %08x\nCause : %08x\n", + (unsigned long) regs->cp0_epc, print_tainted(), + (unsigned int) regs->cp0_status, (unsigned int) regs->cp0_cause); } diff --git a/arch/ppc/kernel/process.c b/arch/ppc/kernel/process.c index 1ada6a519cbf..008125b44638 100644 --- a/arch/ppc/kernel/process.c +++ b/arch/ppc/kernel/process.c @@ -243,8 +243,8 @@ void show_regs(struct pt_regs * regs) { int i; - printk("NIP: %08lX XER: %08lX LR: %08lX SP: %08lX REGS: %p TRAP: %04lx\n", - regs->nip, regs->xer, regs->link, regs->gpr[1], regs,regs->trap); + printk("NIP: %08lX XER: %08lX LR: %08lX SP: %08lX REGS: %p TRAP: %04lx %s\n", + regs->nip, regs->xer, regs->link, regs->gpr[1], regs,regs->trap, print_tainted()); printk("MSR: %08lx EE: %01x PR: %01x FP: %01x ME: %01x IR/DR: %01x%01x\n", regs->msr, regs->msr&MSR_EE ? 1 : 0, regs->msr&MSR_PR ? 1 : 0, regs->msr & MSR_FP ? 1 : 0,regs->msr&MSR_ME ? 1 : 0, diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index 2278f89c24ec..8b35ad8f8e70 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c @@ -191,8 +191,8 @@ SMIException(struct pt_regs *regs) void UnknownException(struct pt_regs *regs) { - printk("Bad trap at PC: %lx, SR: %lx, vector=%lx\n", - regs->nip, regs->msr, regs->trap); + printk("Bad trap at PC: %lx, SR: %lx, vector=%lx %s\n", + regs->nip, regs->msr, regs->trap, print_tainted()); _exception(SIGTRAP, regs); } @@ -338,9 +338,9 @@ StackOverflow(struct pt_regs *regs) void trace_syscall(struct pt_regs *regs) { - printk("Task: %p(%d), PC: %08lX/%08lX, Syscall: %3ld, Result: %s%ld\n", + printk("Task: %p(%d), PC: %08lX/%08lX, Syscall: %3ld, Result: %s%ld %s\n", current, current->pid, regs->nip, regs->link, regs->gpr[0], - regs->ccr&0x10000000?"Error=":"", regs->gpr[3]); + regs->ccr&0x10000000?"Error=":"", regs->gpr[3], print_tainted()); } #ifdef CONFIG_8xx @@ -376,8 +376,8 @@ SoftwareEmulation(struct pt_regs *regs) void TAUException(struct pt_regs *regs) { - printk("TAU trap at PC: %lx, SR: %lx, vector=%lx\n", - regs->nip, regs->msr, regs->trap); + printk("TAU trap at PC: %lx, SR: %lx, vector=%lx %s\n", + regs->nip, regs->msr, regs->trap, print_tainted()); } #endif /* CONFIG_INT_TAU */ diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 365e6ed543d8..368ed1da536e 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c @@ -129,9 +129,10 @@ static int sprintf_regs(int line, char *buff, struct task_struct *task, struct p break; case sp_psw: if(regs) - linelen=sprintf(buff, "%s PSW: %08lx %08lx\n", mode, + linelen=sprintf(buff, "%s PSW: %08lx %08lx %s\n", mode, (unsigned long) regs->psw.mask, - (unsigned long) regs->psw.addr); + (unsigned long) regs->psw.addr, + print_tainted()); else linelen=sprintf(buff,"pt_regs=NULL some info unavailable\n"); break; diff --git a/arch/s390x/kernel/process.c b/arch/s390x/kernel/process.c index 9b19fd185d00..f0f504a834f1 100644 --- a/arch/s390x/kernel/process.c +++ b/arch/s390x/kernel/process.c @@ -133,9 +133,10 @@ static int sprintf_regs(int line, char *buff, struct task_struct *task, struct p break; case sp_psw: if(regs) - linelen=sprintf(buff, "%s PSW: %016lx %016lx\n", mode, + linelen=sprintf(buff, "%s PSW: %016lx %016lx %s\n", mode, (unsigned long) regs->psw.mask, - (unsigned long) regs->psw.addr); + (unsigned long) regs->psw.addr, + print_tainted()); else linelen=sprintf(buff,"pt_regs=NULL some info unavailable\n"); break; diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c index cfbc41b68924..e31ddbd7fc8b 100644 --- a/arch/sh/kernel/process.c +++ b/arch/sh/kernel/process.c @@ -81,8 +81,8 @@ void machine_power_off(void) void show_regs(struct pt_regs * regs) { printk("\n"); - printk("PC : %08lx SP : %08lx SR : %08lx TEA : %08x\n", - regs->pc, regs->regs[15], regs->sr, ctrl_inl(MMU_TEA)); + printk("PC : %08lx SP : %08lx SR : %08lx TEA : %08x %s\n", + regs->pc, regs->regs[15], regs->sr, ctrl_inl(MMU_TEA), print_tainted()); printk("R0 : %08lx R1 : %08lx R2 : %08lx R3 : %08lx\n", regs->regs[0],regs->regs[1], regs->regs[2],regs->regs[3]); diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c index 1820eb12a865..fc07121c823e 100644 --- a/arch/sparc/kernel/process.c +++ b/arch/sparc/kernel/process.c @@ -268,8 +268,8 @@ void show_stackframe(struct sparc_stackf *sf) void show_regs(struct pt_regs * regs) { - printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx\n", regs->psr, - regs->pc, regs->npc, regs->y); + printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n", regs->psr, + regs->pc, regs->npc, regs->y, print_tainted()); printk("g0: %08lx g1: %08lx g2: %08lx g3: %08lx ", regs->u_regs[0], regs->u_regs[1], regs->u_regs[2], regs->u_regs[3]); diff --git a/arch/sparc/mm/init.c b/arch/sparc/mm/init.c index 6cf5fbe74903..34e289ed2843 100644 --- a/arch/sparc/mm/init.c +++ b/arch/sparc/mm/init.c @@ -1,4 +1,4 @@ -/* $Id: init.c,v 1.99 2001/07/17 16:17:33 anton Exp $ +/* $Id: init.c,v 1.100 2001/09/21 22:51:47 davem Exp $ * linux/arch/sparc/mm/init.c * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig index 4ceb4ee89c05..a396f202be89 100644 --- a/arch/sparc64/defconfig +++ b/arch/sparc64/defconfig @@ -753,6 +753,7 @@ CONFIG_USB_DABUSB=m # CONFIG_USB_PEGASUS=m CONFIG_USB_CATC=m +CONFIG_USB_CDCETHER=m CONFIG_USB_KAWETH=m CONFIG_USB_USBNET=m diff --git a/arch/sparc64/kernel/dtlb_backend.S b/arch/sparc64/kernel/dtlb_backend.S index bfdd713eb23a..b74c15fce09e 100644 --- a/arch/sparc64/kernel/dtlb_backend.S +++ b/arch/sparc64/kernel/dtlb_backend.S @@ -1,4 +1,4 @@ -/* $Id: dtlb_backend.S,v 1.14 2001/09/07 18:26:17 kanoj Exp $ +/* $Id: dtlb_backend.S,v 1.15 2001/09/24 21:54:09 davem Exp $ * dtlb_backend.S: Back end to DTLB miss replacement strategy. * This is included directly into the trap table. * @@ -13,12 +13,14 @@ sllx %g2, 62, r1 #define FILL_VALID_SZ_BITS2(r1) #define FILL_VALID_SZ_BITS_NOP nop -#else /* PAGE_SHIFT */ +#elif PAGE_SHIFT == 16 #define FILL_VALID_SZ_BITS1(r1) \ or %g0, 5, r1 #define FILL_VALID_SZ_BITS2(r1) \ sllx r1, 61, r1 #define FILL_VALID_SZ_BITS_NOP +#else +#error unsupported PAGE_SIZE #endif /* PAGE_SHIFT */ #define VPTE_BITS (_PAGE_CP | _PAGE_CV | _PAGE_P ) diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c index f1a739402819..01ec3fe6c110 100644 --- a/arch/sparc64/kernel/process.c +++ b/arch/sparc64/kernel/process.c @@ -282,8 +282,8 @@ void __show_regs(struct pt_regs * regs) local_irq_count(smp_processor_id()), irqs_running()); #endif - printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x\n", regs->tstate, - regs->tpc, regs->tnpc, regs->y); + printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x %s\n", regs->tstate, + regs->tpc, regs->tnpc, regs->y, print_tainted()); printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n", regs->u_regs[0], regs->u_regs[1], regs->u_regs[2], regs->u_regs[3]); @@ -349,8 +349,8 @@ void show_regs(struct pt_regs *regs) void show_regs32(struct pt_regs32 *regs) { - printk("PSR: %08x PC: %08x NPC: %08x Y: %08x\n", regs->psr, - regs->pc, regs->npc, regs->y); + printk("PSR: %08x PC: %08x NPC: %08x Y: %08x %s\n", regs->psr, + regs->pc, regs->npc, regs->y, print_tainted()); printk("g0: %08x g1: %08x g2: %08x g3: %08x ", regs->u_regs[0], regs->u_regs[1], regs->u_regs[2], regs->u_regs[3]); diff --git a/arch/sparc64/kernel/ptrace.c b/arch/sparc64/kernel/ptrace.c index 3b5d37ed1f75..d62aef43cfa5 100644 --- a/arch/sparc64/kernel/ptrace.c +++ b/arch/sparc64/kernel/ptrace.c @@ -25,6 +25,7 @@ #include <asm/uaccess.h> #include <asm/psrcompat.h> #include <asm/visasm.h> +#include <asm/spitfire.h> #define MAGIC_CONSTANT 0x80000000 @@ -596,7 +597,7 @@ flush_and_out: spitfire_put_dcache_tag(va, 0x0); /* No need to mess with I-cache on Cheetah. */ } else { - for (va = 0; va < (PAGE_SIZE << 1); va += 32) + for (va = 0; va < L1DCACHE_SIZE; va += 32) spitfire_put_dcache_tag(va, 0x0); if (request == PTRACE_PEEKTEXT || request == PTRACE_POKETEXT || diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index 37f5476a34c5..5830873d8f02 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c @@ -1,4 +1,4 @@ -/* $Id: setup.c,v 1.66 2001/09/20 00:35:31 davem Exp $ +/* $Id: setup.c,v 1.67 2001/09/21 03:17:06 kanoj Exp $ * linux/arch/sparc64/kernel/setup.c * * Copyright (C) 1995,1996 David S. Miller (davem@caip.rutgers.edu) @@ -38,6 +38,7 @@ #include <asm/idprom.h> #include <asm/head.h> #include <asm/starfire.h> +#include <asm/hardirq.h> #ifdef CONFIG_IP_PNP #include <net/ipconfig.h> @@ -95,6 +96,14 @@ int prom_callback(long *args) if (!(cmd = (char *)args[0])) return -1; + /* + * The callback can be invoked on the cpu that first dropped + * into prom_cmdline after taking the serial interrupt, or on + * a slave processor that was smp_captured() if the + * administrator has done a switch-cpu inside obp. In either + * case, the cpu is marked as in-interrupt. Drop IRQ locks. + */ + irq_exit(smp_processor_id(), 0); save_and_cli(flags); cons = console_drivers; while (cons) { @@ -271,6 +280,10 @@ int prom_callback(long *args) register_console(cons); } restore_flags(flags); + /* + * Restore in-interrupt status for a resume from obp. + */ + irq_enter(smp_processor_id(), 0); return 0; } diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c index a2a49becc8a9..0633e4b9537d 100644 --- a/arch/sparc64/kernel/sparc64_ksyms.c +++ b/arch/sparc64/kernel/sparc64_ksyms.c @@ -1,4 +1,4 @@ -/* $Id: sparc64_ksyms.c,v 1.111 2001/08/30 03:22:00 kanoj Exp $ +/* $Id: sparc64_ksyms.c,v 1.112 2001/09/25 23:30:23 davem Exp $ * arch/sparc64/kernel/sparc64_ksyms.c: Sparc64 specific ksyms support. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -278,6 +278,7 @@ EXPORT_SYMBOL(__strlen); EXPORT_SYMBOL(strlen); EXPORT_SYMBOL(strnlen); EXPORT_SYMBOL(__strlen_user); +EXPORT_SYMBOL(__strnlen_user); EXPORT_SYMBOL(strcpy); EXPORT_SYMBOL(strncpy); EXPORT_SYMBOL(strcat); diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 1deac8f74ce8..46daa65a876c 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c @@ -1,4 +1,4 @@ -/* $Id: sys_sparc32.c,v 1.178 2001/08/13 14:40:07 davem Exp $ +/* $Id: sys_sparc32.c,v 1.179 2001/09/25 00:48:09 davem Exp $ * sys_sparc32.c: Conversion between 32bit and 64bit native syscalls. * * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) @@ -4015,7 +4015,7 @@ asmlinkage int sys32_sendfile(int out_fd, int in_fd, __kernel_off_t32 *offset, s ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count); set_fs(old_fs); - if (!ret && offset && put_user(of, offset)) + if (offset && put_user(of, offset)) return -EFAULT; return ret; diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index c4729f8c354a..90063fb4135b 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c @@ -1,4 +1,4 @@ -/* $Id: traps.c,v 1.78 2001/09/14 19:49:32 kanoj Exp $ +/* $Id: traps.c,v 1.79 2001/09/21 02:14:39 kanoj Exp $ * arch/sparc64/kernel/traps.c * * Copyright (C) 1995,1997 David S. Miller (davem@caip.rutgers.edu) @@ -1637,44 +1637,6 @@ void do_tof_tl1(struct pt_regs *regs) die_if_kernel("TL1: Tag Overflow Exception", regs); } -#ifdef CONFIG_EC_FLUSH_TRAP -void cache_flush_trap(struct pt_regs *regs) -{ -#ifndef CONFIG_SMP - unsigned node = linux_cpus[get_cpuid()].prom_node; -#else -#error cache_flush_trap not supported on sparc64/SMP yet -#endif - -#if 0 -/* Broken */ - int size = prom_getintdefault(node, "ecache-size", 512*1024); - int i, j; - unsigned long addr; - struct page *page, *end; - - regs->tpc = regs->tnpc; - regs->tnpc = regs->tnpc + 4; - if (!capable(CAP_SYS_ADMIN)) return; - size >>= PAGE_SHIFT; - addr = PAGE_OFFSET - PAGE_SIZE; - page = mem_map - 1; - end = mem_map + max_mapnr; - for (i = 0; i < size; i++) { - do { - addr += PAGE_SIZE; - page++; - if (page >= end) - return; - } while (!PageReserved(page)); - /* E-Cache line size is 64B. Let us pollute it :)) */ - for (j = 0; j < PAGE_SIZE; j += 64) - __asm__ __volatile__ ("ldx [%0 + %1], %%g1" : : "r" (j), "r" (addr) : "g1"); - } -#endif -} -#endif - void do_getpsr(struct pt_regs *regs) { regs->u_regs[UREG_I0] = tstate_to_psr(regs->tstate); diff --git a/arch/sparc64/kernel/ttable.S b/arch/sparc64/kernel/ttable.S index 008c780fd1cd..182fb0f96dc6 100644 --- a/arch/sparc64/kernel/ttable.S +++ b/arch/sparc64/kernel/ttable.S @@ -1,4 +1,4 @@ -/* $Id: ttable.S,v 1.34 2001/08/12 09:08:56 davem Exp $ +/* $Id: ttable.S,v 1.35 2001/09/21 02:14:39 kanoj Exp $ * ttable.S: Sparc V9 Trap Table(s) with SpitFire/Cheetah extensions. * * Copyright (C) 1996, 2001 David S. Miller (davem@caip.rutgers.edu) @@ -144,12 +144,7 @@ tl0_resv164: BTRAP(0x164) BTRAP(0x165) BTRAP(0x166) BTRAP(0x167) BTRAP(0x168) tl0_resv169: BTRAP(0x169) BTRAP(0x16a) BTRAP(0x16b) BTRAP(0x16c) tl0_linux64: LINUX_64BIT_SYSCALL_TRAP tl0_gsctx: TRAP(sparc64_get_context) TRAP(sparc64_set_context) -tl0_resv170: BTRAP(0x170) BTRAP(0x171) -#ifdef CONFIG_EC_FLUSH_TRAP - TRAP(cache_flush_trap) -#else - BTRAP(0x172) -#endif +tl0_resv170: BTRAP(0x170) BTRAP(0x171) BTRAP(0x172) tl0_resv173: BTRAP(0x173) BTRAP(0x174) BTRAP(0x175) BTRAP(0x176) BTRAP(0x177) tl0_resv178: BTRAP(0x178) BTRAP(0x179) BTRAP(0x17a) BTRAP(0x17b) BTRAP(0x17c) tl0_resv17d: BTRAP(0x17d) BTRAP(0x17e) BTRAP(0x17f) diff --git a/arch/sparc64/lib/VIScopy.S b/arch/sparc64/lib/VIScopy.S index b944a0ae7d67..17f9d718b3d2 100644 --- a/arch/sparc64/lib/VIScopy.S +++ b/arch/sparc64/lib/VIScopy.S @@ -1,4 +1,4 @@ -/* $Id: VIScopy.S,v 1.25 2000/11/01 09:29:19 davem Exp $ +/* $Id: VIScopy.S,v 1.26 2001/09/27 04:36:24 kanoj Exp $ * VIScopy.S: High speed copy operations utilizing the UltraSparc * Visual Instruction Set. * @@ -310,17 +310,6 @@ __memcpy_begin: .globl __memcpy .type __memcpy,@function - .globl __memcpy_384plus - .type __memcpy_384plus,@function - - .globl __memcpy_16plus - .type __memcpy_16plus,@function - - .globl __memcpy_short - .type __memcpy_short,@function - - .globl __memcpy_entry - .type __memcpy_entry,@function memcpy_private: __memcpy: memcpy: mov ASI_P, asi_src ! IEU0 Group @@ -395,7 +384,6 @@ cheetah_patch_copyops: .align 32 #ifdef __KERNEL__ -__memcpy_384plus: andcc %o0, 7, %g2 ! IEU1 Group #endif VIS_enter: @@ -735,9 +723,6 @@ __memcpy_entry: bleu,pn %xcc, __memcpy_short ! CTI cmp %o2, (64 * 6) ! IEU1 Group bgeu,pn %xcc, VIS_enter ! CTI -#ifdef __KERNEL__ -__memcpy_16plus: -#endif andcc %o0, 7, %g2 ! IEU1 Group sub %o0, %o1, %g5 ! IEU0 andcc %g5, 3, %o5 ! IEU1 Group diff --git a/arch/sparc64/lib/blockops.S b/arch/sparc64/lib/blockops.S index aef9062230a9..dedc03521902 100644 --- a/arch/sparc64/lib/blockops.S +++ b/arch/sparc64/lib/blockops.S @@ -1,4 +1,4 @@ -/* $Id: blockops.S,v 1.35 2001/09/04 16:39:53 kanoj Exp $ +/* $Id: blockops.S,v 1.36 2001/09/24 21:44:03 davem Exp $ * blockops.S: UltraSparc block zero optimized routines. * * Copyright (C) 1996, 1998, 1999, 2000 David S. Miller (davem@redhat.com) @@ -25,7 +25,7 @@ #if (PAGE_SHIFT == 13) || (PAGE_SHIFT == 19) #define PAGE_SIZE_REM 0x80 -#elif (PAGE_SHIFT == 16) || (PAGE_SHIFT == 21) +#elif (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) #define PAGE_SIZE_REM 0x100 #else #error Wrong PAGE_SHIFT specified @@ -64,7 +64,7 @@ _copy_page: /* %o0=dest, %o1=src */ cmp %o2, PAGE_SIZE_REM bne,pt %xcc, 1b add %o0, 0x40, %o0 -#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 21) +#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) TOUCH(f0, f2, f4, f6, f8, f10, f12, f14) ldda [%o1] ASI_BLK_P, %f32 stda %f48, [%o0] ASI_BLK_P @@ -287,7 +287,7 @@ spitfire_copy_user_page: cmp %o2, PAGE_SIZE_REM bne,pt %xcc, 1b add %o0, 0x40, %o0 -#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 21) +#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) TOUCH(f0, f2, f4, f6, f8, f10, f12, f14) ldda [%o1] ASI_BLK_P, %f32 stda %f48, [%o0] ASI_BLK_P @@ -353,7 +353,7 @@ copy_page_using_blkcommit: cmp %o2, PAGE_SIZE_REM bne,pt %xcc, 1b add %o0, 0x40, %o0 -#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 21) +#if (PAGE_SHIFT == 16) || (PAGE_SHIFT == 22) TOUCH(f0, f2, f4, f6, f8, f10, f12, f14) ldda [%o1] ASI_BLK_P, %f32 stda %f48, [%o0] ASI_BLK_COMMIT_P diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index 718e8d93d7ab..80304a447a5c 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c @@ -1,4 +1,4 @@ -/* $Id: init.c,v 1.189 2001/09/02 23:27:18 kanoj Exp $ +/* $Id: init.c,v 1.193 2001/09/25 22:47:35 davem Exp $ * arch/sparc64/mm/init.c * * Copyright (C) 1996-1999 David S. Miller (davem@caip.rutgers.edu) @@ -30,6 +30,7 @@ #include <asm/dma.h> #include <asm/starfire.h> #include <asm/tlb.h> +#include <asm/spitfire.h> mmu_gather_t mmu_gathers[NR_CPUS]; @@ -113,16 +114,17 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t p if (VALID_PAGE(page) && page->mapping && test_bit(PG_dcache_dirty, &page->flags)) { - __flush_dcache_page(page->virtual, - (tlb_type == spitfire)); +#if (L1DCACHE_SIZE > PAGE_SIZE) /* is there D$ aliasing problem */ + __flush_dcache_page(page->virtual, (tlb_type == spitfire)); +#else + if (tlb_type == spitfire) /* fix local I$ coherency */ + __flush_icache_page(__get_phys((unsigned long)(page->virtual))); +#endif clear_bit(PG_dcache_dirty, &page->flags); } __update_mmu_cache(vma, address, pte); } -/* In arch/sparc64/mm/ultra.S */ -extern void __flush_icache_page(unsigned long); - void flush_icache_range(unsigned long start, unsigned long end) { /* Cheetah has coherent I-cache. */ @@ -887,23 +889,28 @@ struct pgtable_cache_struct pgt_quicklists; * addresses. The idea is that if the vpte color and PAGE_OFFSET range * color is the same, then when the kernel initializes the pagetable * using the later address range, accesses with the first address - * range will not see the newly initialized data rather than the - * garbage. + * range will see the newly initialized data rather than the garbage. */ - +#if (L1DCACHE_SIZE > PAGE_SIZE) /* is there D$ aliasing problem */ +#define DC_ALIAS_SHIFT 1 +#else +#define DC_ALIAS_SHIFT 0 +#endif pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) { - struct page *page = alloc_pages(GFP_KERNEL, 1); - unsigned long color = ((address >> (PAGE_SHIFT + 10)) & 1UL); + struct page *page = alloc_pages(GFP_KERNEL, DC_ALIAS_SHIFT); + unsigned long color = VPTE_COLOR(address); if (page) { unsigned long *to_free; unsigned long paddr; pte_t *pte; +#if (L1DCACHE_SIZE > PAGE_SIZE) /* is there D$ aliasing problem */ set_page_count((page + 1), 1); +#endif paddr = (unsigned long) page_address(page); - memset((char *)paddr, 0, (PAGE_SIZE << 1)); + memset((char *)paddr, 0, (PAGE_SIZE << DC_ALIAS_SHIFT)); if (!color) { pte = (pte_t *) paddr; @@ -913,10 +920,12 @@ pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) to_free = (unsigned long *) paddr; } +#if (L1DCACHE_SIZE > PAGE_SIZE) /* is there D$ aliasing problem */ /* Now free the other one up, adjust cache size. */ *to_free = (unsigned long) pte_quicklist[color ^ 0x1]; pte_quicklist[color ^ 0x1] = to_free; pgtable_cache_size++; +#endif return pte; } diff --git a/arch/sparc64/mm/ultra.S b/arch/sparc64/mm/ultra.S index 003ee2842271..c09f7b7d3b1f 100644 --- a/arch/sparc64/mm/ultra.S +++ b/arch/sparc64/mm/ultra.S @@ -1,4 +1,4 @@ -/* $Id: ultra.S,v 1.57 2001/09/06 19:27:17 kanoj Exp $ +/* $Id: ultra.S,v 1.61 2001/09/25 18:04:51 kanoj Exp $ * ultra.S: Don't expand these all over the place... * * Copyright (C) 1997, 2000 David S. Miller (davem@redhat.com) @@ -237,6 +237,16 @@ __spitfire_flush_tlb_range_pbp_slow: retl /*IC22*/ wrpr %g1, 0x0, %pstate +/* + * The following code flushes one page_size worth. + */ +#if (PAGE_SHIFT == 13) +#define ITAG_MASK 0xfe +#elif (PAGE_SHIFT == 16) +#define ITAG_MASK 0x7fe +#else +#error unsupported PAGE_SIZE +#endif .align 32 .globl __flush_icache_page __flush_icache_page: /* %o0 = phys_page */ @@ -250,7 +260,7 @@ __flush_icache_page: /* %o0 = phys_page */ or %o0, %g1, %o0 ! VALID+phys-addr comparitor sllx %g2, 1, %g2 - andn %g2, 0xfe, %g2 ! IC_tag mask + andn %g2, ITAG_MASK, %g2 ! IC_tag mask nop nop nop @@ -313,6 +323,16 @@ flush_dcpage_cheetah: retl nop +#if (PAGE_SHIFT == 13) +#define DTAG_MASK 0x3 +#elif (PAGE_SHIFT == 16) +#define DTAG_MASK 0x1f +#elif (PAGE_SHIFT == 19) +#define DTAG_MASK 0xff +#elif (PAGE_SHIFT == 22) +#define DTAG_MASK 0x3ff +#endif + flush_dcpage_spitfire: clr %o4 srlx %o0, 11, %o0 @@ -323,19 +343,19 @@ flush_dcpage_spitfire: add %o4, (1 << 5), %o4 ! IEU0 ldxa [%o4] ASI_DCACHE_TAG, %g2 ! LSU Group o3 available add %o4, (1 << 5), %o4 ! IEU0 - andn %o3, 0x3, %o3 ! IEU1 + andn %o3, DTAG_MASK, %o3 ! IEU1 ldxa [%o4] ASI_DCACHE_TAG, %g3 ! LSU Group add %o4, (1 << 5), %o4 ! IEU0 - andn %g1, 0x3, %g1 ! IEU1 + andn %g1, DTAG_MASK, %g1 ! IEU1 cmp %o0, %o3 ! IEU1 Group be,a,pn %xcc, dflush1 ! CTI sub %o4, (4 << 5), %o4 ! IEU0 (Group) cmp %o0, %g1 ! IEU1 Group - andn %g2, 0x3, %g2 ! IEU0 + andn %g2, DTAG_MASK, %g2 ! IEU0 be,a,pn %xcc, dflush2 ! CTI sub %o4, (3 << 5), %o4 ! IEU0 (Group) cmp %o0, %g2 ! IEU1 Group - andn %g3, 0x3, %g3 ! IEU0 + andn %g3, DTAG_MASK, %g3 ! IEU0 be,a,pn %xcc, dflush3 ! CTI sub %o4, (2 << 5), %o4 ! IEU0 (Group) cmp %o0, %g3 ! IEU1 Group diff --git a/arch/sparc64/prom/misc.c b/arch/sparc64/prom/misc.c index 3ac73f8e2c22..bb254f7ef321 100644 --- a/arch/sparc64/prom/misc.c +++ b/arch/sparc64/prom/misc.c @@ -1,4 +1,4 @@ -/* $Id: misc.c,v 1.19 2000/06/30 10:18:38 davem Exp $ +/* $Id: misc.c,v 1.20 2001/09/21 03:17:07 kanoj Exp $ * misc.c: Miscellaneous prom functions that don't belong * anywhere else. * @@ -59,25 +59,15 @@ prom_cmdline(void) prom_palette (1); #endif - /* We always arrive here via a serial interrupt. - * So in order for everything to work reliably, even - * on SMP, we need to drop the IRQ locks we hold. - */ #ifdef CONFIG_SMP - irq_exit(smp_processor_id(), 0); smp_capture(); -#else - local_irq_count(smp_processor_id())--; #endif p1275_cmd ("enter", P1275_INOUT(0,0)); #ifdef CONFIG_SMP smp_release(); - irq_enter(smp_processor_id(), 0); spin_unlock_wait(&__br_write_locks[BR_GLOBALIRQ_LOCK].lock); -#else - local_irq_count(smp_processor_id())++; #endif #ifdef CONFIG_SUN_CONSOLE |
