Commit 0544dff9 authored by David S. Miller's avatar David S. Miller

Merge nuts.ninka.net:/disk1/davem/BK/sparcwork-2.6

into nuts.ninka.net:/disk1/davem/BK/sparc-2.6
parents 672ab41e f8a5d3f5
...@@ -727,6 +727,10 @@ config STACK_DEBUG ...@@ -727,6 +727,10 @@ config STACK_DEBUG
depends on DEBUG_KERNEL depends on DEBUG_KERNEL
bool "Stack Overflow Detection Support" bool "Stack Overflow Detection Support"
config DEBUG_BOOTMEM
depends on DEBUG_KERNEL
bool "Debug BOOTMEM initialization"
# We have a custom atomic_dec_and_lock() implementation but it's not # We have a custom atomic_dec_and_lock() implementation but it's not
# compatible with spinlock debugging so we need to fall back on # compatible with spinlock debugging so we need to fall back on
# the generic version in that case. # the generic version in that case.
......
...@@ -54,7 +54,14 @@ bootup_user_stack: ...@@ -54,7 +54,14 @@ bootup_user_stack:
.ascii "HdrS" .ascii "HdrS"
.word LINUX_VERSION_CODE .word LINUX_VERSION_CODE
.half 0x0203 /* HdrS version */
/* History:
*
* 0x0202 : Supports kernel params string
* 0x0300 : Supports being located at other than 0x4000
*/
.half 0x0300 /* HdrS version */
root_flags: root_flags:
.half 1 .half 1
root_dev: root_dev:
...@@ -345,7 +352,8 @@ spitfire_got_tlbentry: ...@@ -345,7 +352,8 @@ spitfire_got_tlbentry:
nop nop
nop nop
and %g1, %g3, %g1 /* Mask to just get paddr bits. */ and %g1, %g3, %g1 /* Mask to just get paddr bits. */
sub %g1, %g2, %g1 /* Get rid of %pc offset to get base. */ set 0x5fff, %l3 /* Mask offset to get phys base. */
andn %g1, %l3, %g1
/* NOTE: We hold on to %g1 paddr base as we need it below to lock /* NOTE: We hold on to %g1 paddr base as we need it below to lock
* NOTE: the PROM cif code into the TLB. * NOTE: the PROM cif code into the TLB.
......
...@@ -1261,6 +1261,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) ...@@ -1261,6 +1261,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
void __devinit smp_prepare_boot_cpu(void) void __devinit smp_prepare_boot_cpu(void)
{ {
current_thread_info()->cpu = hard_smp_processor_id();
cpu_set(smp_processor_id(), cpu_online_map); cpu_set(smp_processor_id(), cpu_online_map);
cpu_set(smp_processor_id(), phys_cpu_present_map); cpu_set(smp_processor_id(), phys_cpu_present_map);
} }
......
...@@ -2043,8 +2043,4 @@ void __init trap_init(void) ...@@ -2043,8 +2043,4 @@ void __init trap_init(void)
*/ */
atomic_inc(&init_mm.mm_count); atomic_inc(&init_mm.mm_count);
current->active_mm = &init_mm; current->active_mm = &init_mm;
#ifdef CONFIG_SMP
current_thread_info()->cpu = hard_smp_processor_id();
#endif
} }
...@@ -1293,6 +1293,10 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) ...@@ -1293,6 +1293,10 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
unsigned long bootmap_pfn, bytes_avail, size; unsigned long bootmap_pfn, bytes_avail, size;
int i; int i;
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("bootmem_init: Scan sp_banks, ");
#endif
bytes_avail = 0UL; bytes_avail = 0UL;
for (i = 0; sp_banks[i].num_bytes != 0; i++) { for (i = 0; sp_banks[i].num_bytes != 0; i++) {
end_of_phys_memory = sp_banks[i].base_addr + end_of_phys_memory = sp_banks[i].base_addr +
...@@ -1359,14 +1363,24 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) ...@@ -1359,14 +1363,24 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
/* Initialize the boot-time allocator. */ /* Initialize the boot-time allocator. */
max_pfn = max_low_pfn = end_pfn; max_pfn = max_low_pfn = end_pfn;
min_low_pfn = pfn_base; min_low_pfn = pfn_base;
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("init_bootmem(spfn[%lx], bpfn[%lx], mlpfn[%lx])\n",
start_pfn, bootmap_pfn, max_low_pfn);
#endif
bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap_pfn, pfn_base, end_pfn); bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap_pfn, pfn_base, end_pfn);
/* Now register the available physical memory with the /* Now register the available physical memory with the
* allocator. * allocator.
*/ */
for (i = 0; sp_banks[i].num_bytes != 0; i++) for (i = 0; sp_banks[i].num_bytes != 0; i++) {
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("free_bootmem(sp_banks:%d): base[%lx] size[%lx]\n",
i, sp_banks[i].base_addr, sp_banks[i].num_bytes);
#endif
free_bootmem(sp_banks[i].base_addr, free_bootmem(sp_banks[i].base_addr,
sp_banks[i].num_bytes); sp_banks[i].num_bytes);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) { if (initrd_start) {
...@@ -1382,6 +1396,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) ...@@ -1382,6 +1396,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
#endif #endif
/* Reserve the kernel text/data/bss. */ /* Reserve the kernel text/data/bss. */
size = (start_pfn << PAGE_SHIFT) - phys_base; size = (start_pfn << PAGE_SHIFT) - phys_base;
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("reserve_bootmem(kernel): base[%lx] size[%lx]\n", phys_base, size);
#endif
reserve_bootmem(phys_base, size); reserve_bootmem(phys_base, size);
*pages_avail -= PAGE_ALIGN(size) >> PAGE_SHIFT; *pages_avail -= PAGE_ALIGN(size) >> PAGE_SHIFT;
...@@ -1390,6 +1407,10 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) ...@@ -1390,6 +1407,10 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
* in free_all_bootmem. * in free_all_bootmem.
*/ */
size = bootmap_size; size = bootmap_size;
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("reserve_bootmem(bootmap): base[%lx] size[%lx]\n",
(bootmap_pfn << PAGE_SHIFT), size);
#endif
reserve_bootmem((bootmap_pfn << PAGE_SHIFT), size); reserve_bootmem((bootmap_pfn << PAGE_SHIFT), size);
*pages_avail -= PAGE_ALIGN(size) >> PAGE_SHIFT; *pages_avail -= PAGE_ALIGN(size) >> PAGE_SHIFT;
...@@ -1714,6 +1735,9 @@ void __init mem_init(void) ...@@ -1714,6 +1735,9 @@ void __init mem_init(void)
max_mapnr = last_valid_pfn - pfn_base; max_mapnr = last_valid_pfn - pfn_base;
high_memory = __va(last_valid_pfn << PAGE_SHIFT); high_memory = __va(last_valid_pfn << PAGE_SHIFT);
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("mem_init: Calling free_all_bootmem().\n");
#endif
totalram_pages = num_physpages = free_all_bootmem() - 1; totalram_pages = num_physpages = free_all_bootmem() - 1;
/* /*
......
...@@ -723,36 +723,28 @@ static void sunzilog_start_tx(struct uart_port *port, unsigned int tty_start) ...@@ -723,36 +723,28 @@ static void sunzilog_start_tx(struct uart_port *port, unsigned int tty_start)
} }
} }
/* The port lock is not held. */ /* The port lock is held. */
static void sunzilog_stop_rx(struct uart_port *port) static void sunzilog_stop_rx(struct uart_port *port)
{ {
struct uart_sunzilog_port *up = UART_ZILOG(port); struct uart_sunzilog_port *up = UART_ZILOG(port);
struct zilog_channel *channel; struct zilog_channel *channel;
unsigned long flags;
if (ZS_IS_CONS(up)) if (ZS_IS_CONS(up))
return; return;
spin_lock_irqsave(&port->lock, flags);
channel = ZILOG_CHANNEL_FROM_PORT(port); channel = ZILOG_CHANNEL_FROM_PORT(port);
/* Disable all RX interrupts. */ /* Disable all RX interrupts. */
up->curregs[R1] &= ~RxINT_MASK; up->curregs[R1] &= ~RxINT_MASK;
sunzilog_maybe_update_regs(up, channel); sunzilog_maybe_update_regs(up, channel);
spin_unlock_irqrestore(&port->lock, flags);
} }
/* The port lock is not held. */ /* The port lock is held. */
static void sunzilog_enable_ms(struct uart_port *port) static void sunzilog_enable_ms(struct uart_port *port)
{ {
struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
struct zilog_channel *channel = ZILOG_CHANNEL_FROM_PORT(port); struct zilog_channel *channel = ZILOG_CHANNEL_FROM_PORT(port);
unsigned char new_reg; unsigned char new_reg;
unsigned long flags;
spin_lock_irqsave(&port->lock, flags);
new_reg = up->curregs[R15] | (DCDIE | SYNCIE | CTSIE); new_reg = up->curregs[R15] | (DCDIE | SYNCIE | CTSIE);
if (new_reg != up->curregs[R15]) { if (new_reg != up->curregs[R15]) {
...@@ -761,8 +753,6 @@ static void sunzilog_enable_ms(struct uart_port *port) ...@@ -761,8 +753,6 @@ static void sunzilog_enable_ms(struct uart_port *port)
/* NOTE: Not subject to 'transmitter active' rule. */ /* NOTE: Not subject to 'transmitter active' rule. */
write_zsreg(channel, R15, up->curregs[R15]); write_zsreg(channel, R15, up->curregs[R15]);
} }
spin_unlock_irqrestore(&port->lock, flags);
} }
/* The port lock is not held. */ /* The port lock is not held. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment