Commit bb89c58c authored by Linus Torvalds's avatar Linus Torvalds

Merge http://linux-sound.bkbits.net/linux-sound

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 5d4bd9bb c90176df
...@@ -10,7 +10,7 @@ Overview of Document: ...@@ -10,7 +10,7 @@ Overview of Document:
This document is intended to give an good overview of how to debug This document is intended to give an good overview of how to debug
Linux for s/390 & z/Architecture it isn't intended as a complete reference & not a Linux for s/390 & z/Architecture it isn't intended as a complete reference & not a
tutorial on the fundamentals of C & assembly, it dosen't go into tutorial on the fundamentals of C & assembly, it dosen't go into
390 IO in any detail. It is intended to compliment the documents in the 390 IO in any detail. It is intended to complement the documents in the
reference section below & any other worthwhile references you get. reference section below & any other worthwhile references you get.
It is intended like the Enterprise Systems Architecture/390 Reference Summary It is intended like the Enterprise Systems Architecture/390 Reference Summary
......
...@@ -704,8 +704,8 @@ clean: archclean $(clean-dirs) ...@@ -704,8 +704,8 @@ clean: archclean $(clean-dirs)
$(call cmd,rmclean) $(call cmd,rmclean)
@find . $(RCS_FIND_IGNORE) \ @find . $(RCS_FIND_IGNORE) \
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '.*.d' -o -name '.*.tmp' \) -type f \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
-print | xargs rm -f -type f -print | xargs rm -f
# mrproper - delete configuration + modules + core files # mrproper - delete configuration + modules + core files
# #
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/ptrace.h>
#include <asm/io.h> #include <asm/io.h>
#define DEFINE(sym, val) \ #define DEFINE(sym, val) \
......
...@@ -1058,11 +1058,11 @@ marvel_agp_info(void) ...@@ -1058,11 +1058,11 @@ marvel_agp_info(void)
} }
} }
printk("MARVEL - using hose %d as AGP\n", hose->index);
if (!hose || !hose->sg_pci) if (!hose || !hose->sg_pci)
return NULL; return NULL;
printk("MARVEL - using hose %d as AGP\n", hose->index);
/* /*
* Get the csrs from the hose. * Get the csrs from the hose.
*/ */
......
...@@ -432,6 +432,7 @@ sys_call_table: ...@@ -432,6 +432,7 @@ sys_call_table:
.quad sys_remap_file_pages /* 410 */ .quad sys_remap_file_pages /* 410 */
.quad sys_set_tid_address .quad sys_set_tid_address
.quad sys_restart_syscall .quad sys_restart_syscall
.quad sys_fadvise64
.size sys_call_table, . - sys_call_table .size sys_call_table, . - sys_call_table
.type sys_call_table, @object .type sys_call_table, @object
......
...@@ -84,7 +84,7 @@ csum_ipv6_magic: ...@@ -84,7 +84,7 @@ csum_ipv6_magic:
extwl $0,2,$1 # e0 : fold 17-bit value extwl $0,2,$1 # e0 : fold 17-bit value
zapnot $0,3,$0 # .. e1 : zapnot $0,3,$0 # .. e1 :
addq $0,$1,$0 # e0 : addq $0,$1,$0 # e0 :
not $0,$0 # e1 : and compliment. not $0,$0 # e1 : and complement.
zapnot $0,3,$0 # e0 : zapnot $0,3,$0 # e0 :
ret # .. e1 : ret # .. e1 :
......
...@@ -64,6 +64,7 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -64,6 +64,7 @@ setup_memory_node(int nid, void *kernel_end)
unsigned long bootmap_size, bootmap_pages, bootmap_start; unsigned long bootmap_size, bootmap_pages, bootmap_start;
unsigned long start, end; unsigned long start, end;
unsigned long node_pfn_start, node_pfn_end; unsigned long node_pfn_start, node_pfn_end;
unsigned long node_min_pfn, node_max_pfn;
int i; int i;
unsigned long node_datasz = PFN_UP(sizeof(pg_data_t)); unsigned long node_datasz = PFN_UP(sizeof(pg_data_t));
int show_init = 0; int show_init = 0;
...@@ -76,8 +77,9 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -76,8 +77,9 @@ setup_memory_node(int nid, void *kernel_end)
memdesc = (struct memdesc_struct *) memdesc = (struct memdesc_struct *)
(hwrpb->mddt_offset + (unsigned long) hwrpb); (hwrpb->mddt_offset + (unsigned long) hwrpb);
/* find the bounds of this node (min_low_pfn/max_low_pfn) */ /* find the bounds of this node (node_min_pfn/node_max_pfn) */
min_low_pfn = ~0UL; node_min_pfn = ~0UL;
node_max_pfn = 0UL;
for_each_mem_cluster(memdesc, cluster, i) { for_each_mem_cluster(memdesc, cluster, i) {
/* Bit 0 is console/PALcode reserved. Bit 1 is /* Bit 0 is console/PALcode reserved. Bit 1 is
non-volatile memory -- we might want to mark non-volatile memory -- we might want to mark
...@@ -104,42 +106,48 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -104,42 +106,48 @@ setup_memory_node(int nid, void *kernel_end)
if (end > node_pfn_end) if (end > node_pfn_end)
end = node_pfn_end; end = node_pfn_end;
if (start < min_low_pfn) if (start < node_min_pfn)
min_low_pfn = start; node_min_pfn = start;
if (end > max_low_pfn) if (end > node_max_pfn)
max_pfn = max_low_pfn = end; node_max_pfn = end;
} }
if (mem_size_limit && max_low_pfn > mem_size_limit) { if (mem_size_limit && node_max_pfn > mem_size_limit) {
static int msg_shown = 0; static int msg_shown = 0;
if (!msg_shown) { if (!msg_shown) {
msg_shown = 1; msg_shown = 1;
printk("setup: forcing memory size to %ldK (from %ldK).\n", printk("setup: forcing memory size to %ldK (from %ldK).\n",
mem_size_limit << (PAGE_SHIFT - 10), mem_size_limit << (PAGE_SHIFT - 10),
max_low_pfn << (PAGE_SHIFT - 10)); node_max_pfn << (PAGE_SHIFT - 10));
} }
max_low_pfn = mem_size_limit; node_max_pfn = mem_size_limit;
} }
if (min_low_pfn >= max_low_pfn) if (node_min_pfn >= node_max_pfn)
return; return;
num_physpages += max_low_pfn - min_low_pfn; /* Update global {min,max}_low_pfn from node information. */
if (node_min_pfn < min_low_pfn)
min_low_pfn = node_min_pfn;
if (node_max_pfn > max_low_pfn)
max_pfn = max_low_pfn = node_max_pfn;
num_physpages += node_max_pfn - node_min_pfn;
#if 0 /* we'll try this one again in a little while */ #if 0 /* we'll try this one again in a little while */
/* Cute trick to make sure our local node data is on local memory */ /* Cute trick to make sure our local node data is on local memory */
node_data[nid] = (pg_data_t *)(__va(min_low_pfn << PAGE_SHIFT)); node_data[nid] = (pg_data_t *)(__va(node_min_pfn << PAGE_SHIFT));
#endif #endif
/* Quasi-mark the pg_data_t as in-use */ /* Quasi-mark the pg_data_t as in-use */
min_low_pfn += node_datasz; node_min_pfn += node_datasz;
if (min_low_pfn >= max_low_pfn) { if (node_min_pfn >= node_max_pfn) {
printk(" not enough mem to reserve NODE_DATA"); printk(" not enough mem to reserve NODE_DATA");
return; return;
} }
NODE_DATA(nid)->bdata = &node_bdata[nid]; NODE_DATA(nid)->bdata = &node_bdata[nid];
printk(" Detected node memory: start %8lu, end %8lu\n", printk(" Detected node memory: start %8lu, end %8lu\n",
min_low_pfn, max_low_pfn); node_min_pfn, node_max_pfn);
DBGDCONT(" DISCONTIG: node_data[%d] is at 0x%p\n", nid, NODE_DATA(nid)); DBGDCONT(" DISCONTIG: node_data[%d] is at 0x%p\n", nid, NODE_DATA(nid));
DBGDCONT(" DISCONTIG: NODE_DATA(%d)->bdata is at 0x%p\n", nid, NODE_DATA(nid)->bdata); DBGDCONT(" DISCONTIG: NODE_DATA(%d)->bdata is at 0x%p\n", nid, NODE_DATA(nid)->bdata);
...@@ -149,15 +157,15 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -149,15 +157,15 @@ setup_memory_node(int nid, void *kernel_end)
end_kernel_pfn = PFN_UP(virt_to_phys(kernel_end)); end_kernel_pfn = PFN_UP(virt_to_phys(kernel_end));
bootmap_start = -1; bootmap_start = -1;
if (!nid && (max_low_pfn < end_kernel_pfn || min_low_pfn > start_kernel_pfn)) if (!nid && (node_max_pfn < end_kernel_pfn || node_min_pfn > start_kernel_pfn))
panic("kernel loaded out of ram"); panic("kernel loaded out of ram");
/* Zone start phys-addr must be 2^(MAX_ORDER-1) aligned */ /* Zone start phys-addr must be 2^(MAX_ORDER-1) aligned */
min_low_pfn = (min_low_pfn + ((1UL << (MAX_ORDER-1))-1)) & ~((1UL << (MAX_ORDER-1))-1); node_min_pfn = (node_min_pfn + ((1UL << (MAX_ORDER-1))-1)) & ~((1UL << (MAX_ORDER-1))-1);
/* We need to know how many physically contiguous pages /* We need to know how many physically contiguous pages
we'll need for the bootmap. */ we'll need for the bootmap. */
bootmap_pages = bootmem_bootmap_pages(max_low_pfn-min_low_pfn); bootmap_pages = bootmem_bootmap_pages(node_max_pfn-node_min_pfn);
/* Now find a good region where to allocate the bootmap. */ /* Now find a good region where to allocate the bootmap. */
for_each_mem_cluster(memdesc, cluster, i) { for_each_mem_cluster(memdesc, cluster, i) {
...@@ -167,13 +175,13 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -167,13 +175,13 @@ setup_memory_node(int nid, void *kernel_end)
start = cluster->start_pfn; start = cluster->start_pfn;
end = start + cluster->numpages; end = start + cluster->numpages;
if (start >= max_low_pfn || end <= min_low_pfn) if (start >= node_max_pfn || end <= node_min_pfn)
continue; continue;
if (end > max_low_pfn) if (end > node_max_pfn)
end = max_low_pfn; end = node_max_pfn;
if (start < min_low_pfn) if (start < node_min_pfn)
start = min_low_pfn; start = node_min_pfn;
if (start < start_kernel_pfn) { if (start < start_kernel_pfn) {
if (end > end_kernel_pfn if (end > end_kernel_pfn
...@@ -195,7 +203,7 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -195,7 +203,7 @@ setup_memory_node(int nid, void *kernel_end)
/* Allocate the bootmap and mark the whole MM as reserved. */ /* Allocate the bootmap and mark the whole MM as reserved. */
bootmap_size = init_bootmem_node(NODE_DATA(nid), bootmap_start, bootmap_size = init_bootmem_node(NODE_DATA(nid), bootmap_start,
min_low_pfn, max_low_pfn); node_min_pfn, node_max_pfn);
DBGDCONT(" bootmap_start %lu, bootmap_size %lu, bootmap_pages %lu\n", DBGDCONT(" bootmap_start %lu, bootmap_size %lu, bootmap_pages %lu\n",
bootmap_start, bootmap_size, bootmap_pages); bootmap_start, bootmap_size, bootmap_pages);
...@@ -207,13 +215,13 @@ setup_memory_node(int nid, void *kernel_end) ...@@ -207,13 +215,13 @@ setup_memory_node(int nid, void *kernel_end)
start = cluster->start_pfn; start = cluster->start_pfn;
end = cluster->start_pfn + cluster->numpages; end = cluster->start_pfn + cluster->numpages;
if (start >= max_low_pfn || end <= min_low_pfn) if (start >= node_max_pfn || end <= node_min_pfn)
continue; continue;
if (end > max_low_pfn) if (end > node_max_pfn)
end = max_low_pfn; end = node_max_pfn;
if (start < min_low_pfn) if (start < node_min_pfn)
start = min_low_pfn; start = node_min_pfn;
if (start < start_kernel_pfn) { if (start < start_kernel_pfn) {
if (end > end_kernel_pfn) { if (end > end_kernel_pfn) {
...@@ -249,6 +257,9 @@ setup_memory(void *kernel_end) ...@@ -249,6 +257,9 @@ setup_memory(void *kernel_end)
show_mem_layout(); show_mem_layout();
numnodes = 0; numnodes = 0;
min_low_pfn = ~0UL;
max_low_pfn = 0UL;
for (nid = 0; nid < MAX_NUMNODES; nid++) for (nid = 0; nid < MAX_NUMNODES; nid++)
setup_memory_node(nid, kernel_end); setup_memory_node(nid, kernel_end);
......
...@@ -54,7 +54,7 @@ struct safe_buffer { ...@@ -54,7 +54,7 @@ struct safe_buffer {
dma_addr_t safe_dma_addr; dma_addr_t safe_dma_addr;
}; };
LIST_HEAD(safe_buffers); static LIST_HEAD(safe_buffers);
#define SIZE_SMALL 1024 #define SIZE_SMALL 1024
......
...@@ -218,7 +218,7 @@ static void sa1111_unmask_lowirq(unsigned int irq) ...@@ -218,7 +218,7 @@ static void sa1111_unmask_lowirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get * be triggered. In fact, its very difficult, if not impossible to get
* INTSET to re-trigger the interrupt. * INTSET to re-trigger the interrupt.
*/ */
static void sa1111_rerun_lowirq(unsigned int irq) static int sa1111_retrigger_lowirq(unsigned int irq)
{ {
unsigned int mask = SA1111_IRQMASK_LO(irq); unsigned int mask = SA1111_IRQMASK_LO(irq);
int i; int i;
...@@ -233,6 +233,7 @@ static void sa1111_rerun_lowirq(unsigned int irq) ...@@ -233,6 +233,7 @@ static void sa1111_rerun_lowirq(unsigned int irq)
if (i == 8) if (i == 8)
printk(KERN_ERR "Danger Will Robinson: failed to " printk(KERN_ERR "Danger Will Robinson: failed to "
"re-trigger IRQ%d\n", irq); "re-trigger IRQ%d\n", irq);
return i == 8 ? -1 : 0;
} }
static int sa1111_type_lowirq(unsigned int irq, unsigned int flags) static int sa1111_type_lowirq(unsigned int irq, unsigned int flags)
...@@ -270,7 +271,7 @@ static struct irqchip sa1111_low_chip = { ...@@ -270,7 +271,7 @@ static struct irqchip sa1111_low_chip = {
.ack = sa1111_ack_irq, .ack = sa1111_ack_irq,
.mask = sa1111_mask_lowirq, .mask = sa1111_mask_lowirq,
.unmask = sa1111_unmask_lowirq, .unmask = sa1111_unmask_lowirq,
.rerun = sa1111_rerun_lowirq, .retrigger = sa1111_retrigger_lowirq,
.type = sa1111_type_lowirq, .type = sa1111_type_lowirq,
.wake = sa1111_wake_lowirq, .wake = sa1111_wake_lowirq,
}; };
...@@ -292,7 +293,7 @@ static void sa1111_unmask_highirq(unsigned int irq) ...@@ -292,7 +293,7 @@ static void sa1111_unmask_highirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get * be triggered. In fact, its very difficult, if not impossible to get
* INTSET to re-trigger the interrupt. * INTSET to re-trigger the interrupt.
*/ */
static void sa1111_rerun_highirq(unsigned int irq) static int sa1111_retrigger_highirq(unsigned int irq)
{ {
unsigned int mask = SA1111_IRQMASK_HI(irq); unsigned int mask = SA1111_IRQMASK_HI(irq);
int i; int i;
...@@ -307,6 +308,7 @@ static void sa1111_rerun_highirq(unsigned int irq) ...@@ -307,6 +308,7 @@ static void sa1111_rerun_highirq(unsigned int irq)
if (i == 8) if (i == 8)
printk(KERN_ERR "Danger Will Robinson: failed to " printk(KERN_ERR "Danger Will Robinson: failed to "
"re-trigger IRQ%d\n", irq); "re-trigger IRQ%d\n", irq);
return i == 8 ? -1 : 0;
} }
static int sa1111_type_highirq(unsigned int irq, unsigned int flags) static int sa1111_type_highirq(unsigned int irq, unsigned int flags)
...@@ -344,7 +346,7 @@ static struct irqchip sa1111_high_chip = { ...@@ -344,7 +346,7 @@ static struct irqchip sa1111_high_chip = {
.ack = sa1111_ack_irq, .ack = sa1111_ack_irq,
.mask = sa1111_mask_highirq, .mask = sa1111_mask_highirq,
.unmask = sa1111_unmask_highirq, .unmask = sa1111_unmask_highirq,
.rerun = sa1111_rerun_highirq, .retrigger = sa1111_retrigger_highirq,
.type = sa1111_type_highirq, .type = sa1111_type_highirq,
.wake = sa1111_wake_highirq, .wake = sa1111_wake_highirq,
}; };
......
This diff is collapsed.
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
static struct fs_struct init_fs = INIT_FS; static struct fs_struct init_fs = INIT_FS;
static struct files_struct init_files = INIT_FILES; static struct files_struct init_files = INIT_FILES;
static struct signal_struct init_signals = INIT_SIGNALS(init_signals); static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
struct mm_struct init_mm = INIT_MM(init_mm); struct mm_struct init_mm = INIT_MM(init_mm);
/* /*
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/list.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
...@@ -45,6 +46,7 @@ ...@@ -45,6 +46,7 @@
static volatile unsigned long irq_err_count; static volatile unsigned long irq_err_count;
static spinlock_t irq_controller_lock; static spinlock_t irq_controller_lock;
static LIST_HEAD(irq_pending);
struct irqdesc irq_desc[NR_IRQS]; struct irqdesc irq_desc[NR_IRQS];
void (*init_arch_irq)(void) __initdata = NULL; void (*init_arch_irq)(void) __initdata = NULL;
...@@ -69,9 +71,10 @@ static struct irqchip bad_chip = { ...@@ -69,9 +71,10 @@ static struct irqchip bad_chip = {
}; };
static struct irqdesc bad_irq_desc = { static struct irqdesc bad_irq_desc = {
.chip = &bad_chip, .chip = &bad_chip,
.handle = do_bad_IRQ, .handle = do_bad_IRQ,
.depth = 1, .pend = LIST_HEAD_INIT(bad_irq_desc.pend),
.disable_depth = 1,
}; };
/** /**
...@@ -90,6 +93,7 @@ void disable_irq(unsigned int irq) ...@@ -90,6 +93,7 @@ void disable_irq(unsigned int irq)
spin_lock_irqsave(&irq_controller_lock, flags); spin_lock_irqsave(&irq_controller_lock, flags);
desc->disable_depth++; desc->disable_depth++;
list_del_init(&desc->pend);
spin_unlock_irqrestore(&irq_controller_lock, flags); spin_unlock_irqrestore(&irq_controller_lock, flags);
} }
...@@ -122,9 +126,11 @@ void enable_irq(unsigned int irq) ...@@ -122,9 +126,11 @@ void enable_irq(unsigned int irq)
* from here since the caller might be in an * from here since the caller might be in an
* interrupt-protected region. * interrupt-protected region.
*/ */
if (desc->pending) { if (desc->pending && list_empty(&desc->pend)) {
desc->pending = 0; desc->pending = 0;
desc->chip->rerun(irq); if (!desc->chip->retrigger ||
desc->chip->retrigger(irq))
list_add(&desc->pend, &irq_pending);
} }
} }
spin_unlock_irqrestore(&irq_controller_lock, flags); spin_unlock_irqrestore(&irq_controller_lock, flags);
...@@ -346,6 +352,40 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) ...@@ -346,6 +352,40 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
} }
} }
static void do_pending_irqs(struct pt_regs *regs)
{
struct list_head head, *l, *n;
do {
struct irqdesc *desc;
/*
* First, take the pending interrupts off the list.
* The act of calling the handlers may add some IRQs
* back onto the list.
*/
head = irq_pending;
INIT_LIST_HEAD(&irq_pending);
head.next->prev = &head;
head.prev->next = &head;
/*
* Now run each entry. We must delete it from our
* list before calling the handler.
*/
list_for_each_safe(l, n, &head) {
desc = list_entry(l, struct irqdesc, pend);
list_del_init(&desc->pend);
desc->handle(desc - irq_desc, desc, regs);
}
/*
* The list must be empty.
*/
BUG_ON(!list_empty(&head));
} while (!list_empty(&irq_pending));
}
/* /*
* do_IRQ handles all hardware IRQ's. Decoded IRQs should not * do_IRQ handles all hardware IRQ's. Decoded IRQs should not
* come via this function. Instead, they should provide their * come via this function. Instead, they should provide their
...@@ -365,6 +405,13 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs) ...@@ -365,6 +405,13 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
irq_enter(); irq_enter();
spin_lock(&irq_controller_lock); spin_lock(&irq_controller_lock);
desc->handle(irq, desc, regs); desc->handle(irq, desc, regs);
/*
* Now re-run any pending interrupts.
*/
if (!list_empty(&irq_pending))
do_pending_irqs(regs);
spin_unlock(&irq_controller_lock); spin_unlock(&irq_controller_lock);
irq_exit(); irq_exit();
} }
...@@ -740,8 +787,10 @@ void __init init_IRQ(void) ...@@ -740,8 +787,10 @@ void __init init_IRQ(void)
extern void init_dma(void); extern void init_dma(void);
int irq; int irq;
for (irq = 0, desc = irq_desc; irq < NR_IRQS; irq++, desc++) for (irq = 0, desc = irq_desc; irq < NR_IRQS; irq++, desc++) {
*desc = bad_irq_desc; *desc = bad_irq_desc;
INIT_LIST_HEAD(&desc->pend);
}
init_arch_irq(); init_arch_irq();
init_dma(); init_dma();
......
...@@ -446,7 +446,7 @@ void ptrace_set_bpt(struct task_struct *child) ...@@ -446,7 +446,7 @@ void ptrace_set_bpt(struct task_struct *child)
* Ensure no single-step breakpoint is pending. Returns non-zero * Ensure no single-step breakpoint is pending. Returns non-zero
* value if child was being single-stepped. * value if child was being single-stepped.
*/ */
void __ptrace_cancel_bpt(struct task_struct *child) void ptrace_cancel_bpt(struct task_struct *child)
{ {
int i, nsaved = child->thread.debug.nsaved; int i, nsaved = child->thread.debug.nsaved;
...@@ -468,7 +468,8 @@ void __ptrace_cancel_bpt(struct task_struct *child) ...@@ -468,7 +468,8 @@ void __ptrace_cancel_bpt(struct task_struct *child)
*/ */
void ptrace_disable(struct task_struct *child) void ptrace_disable(struct task_struct *child)
{ {
__ptrace_cancel_bpt(child); child->ptrace &= ~PT_SINGLESTEP;
ptrace_cancel_bpt(child);
} }
/* /*
...@@ -486,7 +487,7 @@ void ptrace_break(struct task_struct *tsk, struct pt_regs *regs) ...@@ -486,7 +487,7 @@ void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
if (tsk->thread.debug.nsaved == 0) if (tsk->thread.debug.nsaved == 0)
printk(KERN_ERR "ptrace: bogus breakpoint trap\n"); printk(KERN_ERR "ptrace: bogus breakpoint trap\n");
__ptrace_cancel_bpt(tsk); ptrace_cancel_bpt(tsk);
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
...@@ -637,7 +638,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat ...@@ -637,7 +638,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
child->exit_code = data; child->exit_code = data;
/* make sure single-step breakpoint is gone. */ /* make sure single-step breakpoint is gone. */
__ptrace_cancel_bpt(child); child->ptrace &= ~PT_SINGLESTEP;
ptrace_cancel_bpt(child);
wake_up_process(child); wake_up_process(child);
ret = 0; ret = 0;
break; break;
...@@ -649,7 +651,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat ...@@ -649,7 +651,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
*/ */
case PTRACE_KILL: case PTRACE_KILL:
/* make sure single-step breakpoint is gone. */ /* make sure single-step breakpoint is gone. */
__ptrace_cancel_bpt(child); child->ptrace &= ~PT_SINGLESTEP;
ptrace_cancel_bpt(child);
if (child->state != TASK_ZOMBIE) { if (child->state != TASK_ZOMBIE) {
child->exit_code = SIGKILL; child->exit_code = SIGKILL;
wake_up_process(child); wake_up_process(child);
...@@ -664,7 +667,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat ...@@ -664,7 +667,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
ret = -EIO; ret = -EIO;
if ((unsigned long) data > _NSIG) if ((unsigned long) data > _NSIG)
break; break;
child->thread.debug.nsaved = -1; child->ptrace |= PT_SINGLESTEP;
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
child->exit_code = data; child->exit_code = data;
/* give it a chance to run. */ /* give it a chance to run. */
......
/* /*
* linux/arch/arm/kernel/ptrace.h * linux/arch/arm/kernel/ptrace.h
* *
* Copyright (C) 2000-2002 Russell King * Copyright (C) 2000-2003 Russell King
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
extern void __ptrace_cancel_bpt(struct task_struct *); extern void ptrace_cancel_bpt(struct task_struct *);
extern void ptrace_set_bpt(struct task_struct *); extern void ptrace_set_bpt(struct task_struct *);
extern void ptrace_break(struct task_struct *, struct pt_regs *); extern void ptrace_break(struct task_struct *, struct pt_regs *);
/*
* Clear a breakpoint, if one exists.
*/
static inline int ptrace_cancel_bpt(struct task_struct *tsk)
{
int nsaved = tsk->thread.debug.nsaved;
if (nsaved)
__ptrace_cancel_bpt(tsk);
return nsaved;
}
...@@ -216,8 +216,10 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs) ...@@ -216,8 +216,10 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
goto badframe; goto badframe;
/* Send SIGTRAP if we're single-stepping */ /* Send SIGTRAP if we're single-stepping */
if (ptrace_cancel_bpt(current)) if (current->ptrace & PT_SINGLESTEP) {
ptrace_cancel_bpt(current);
send_sig(SIGTRAP, current, 1); send_sig(SIGTRAP, current, 1);
}
return regs->ARM_r0; return regs->ARM_r0;
...@@ -256,8 +258,10 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) ...@@ -256,8 +258,10 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
goto badframe; goto badframe;
/* Send SIGTRAP if we're single-stepping */ /* Send SIGTRAP if we're single-stepping */
if (ptrace_cancel_bpt(current)) if (current->ptrace & PT_SINGLESTEP) {
ptrace_cancel_bpt(current);
send_sig(SIGTRAP, current, 1); send_sig(SIGTRAP, current, 1);
}
return regs->ARM_r0; return regs->ARM_r0;
...@@ -441,18 +445,47 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, ...@@ -441,18 +445,47 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
return err; return err;
} }
static inline void restart_syscall(struct pt_regs *regs)
{
regs->ARM_r0 = regs->ARM_ORIG_r0;
regs->ARM_pc -= thumb_mode(regs) ? 2 : 4;
}
/* /*
* OK, we're invoking a handler * OK, we're invoking a handler
*/ */
static void static void
handle_signal(unsigned long sig, struct k_sigaction *ka, handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
siginfo_t *info, sigset_t *oldset, struct pt_regs * regs) struct pt_regs * regs, int syscall)
{ {
struct thread_info *thread = current_thread_info(); struct thread_info *thread = current_thread_info();
struct task_struct *tsk = current; struct task_struct *tsk = current;
struct k_sigaction *ka = &tsk->sighand->action[sig-1];
int usig = sig; int usig = sig;
int ret; int ret;
/*
* If we were from a system call, check for system call restarting...
*/
if (syscall) {
switch (regs->ARM_r0) {
case -ERESTART_RESTARTBLOCK:
current_thread_info()->restart_block.fn =
do_no_restart_syscall;
case -ERESTARTNOHAND:
regs->ARM_r0 = -EINTR;
break;
case -ERESTARTSYS:
if (!(ka->sa.sa_flags & SA_RESTART)) {
regs->ARM_r0 = -EINTR;
break;
}
/* fallthrough */
case -ERESTARTNOINTR:
restart_syscall(regs);
}
}
/* /*
* translate the signal * translate the signal
*/ */
...@@ -504,7 +537,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, ...@@ -504,7 +537,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall) static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
{ {
siginfo_t info; siginfo_t info;
int single_stepping; int signr;
/* /*
* We want the common case to go fast, which * We want the common case to go fast, which
...@@ -515,130 +548,14 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall) ...@@ -515,130 +548,14 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if (!user_mode(regs)) if (!user_mode(regs))
return 0; return 0;
single_stepping = ptrace_cancel_bpt(current); if (current->ptrace & PT_SINGLESTEP)
ptrace_cancel_bpt(current);
for (;;) {
unsigned long signr = 0;
struct k_sigaction *ka;
spin_lock_irq(&current->sighand->siglock);
signr = dequeue_signal(current, &current->blocked, &info);
spin_unlock_irq(&current->sighand->siglock);
if (!signr)
break;
if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) { signr = get_signal_to_deliver(&info, regs, NULL);
/* Let the debugger run. */ if (signr > 0) {
current->exit_code = signr; handle_signal(signr, &info, oldset, regs, syscall);
set_current_state(TASK_STOPPED); if (current->ptrace & PT_SINGLESTEP)
notify_parent(current, SIGCHLD); ptrace_set_bpt(current);
schedule();
single_stepping |= ptrace_cancel_bpt(current);
/* We're back. Did the debugger cancel the sig? */
signr = current->exit_code;
if (signr == 0)
continue;
current->exit_code = 0;
/* The debugger continued. Ignore SIGSTOP. */
if (signr == SIGSTOP)
continue;
/* Update the siginfo structure. Is this good? */
if (signr != info.si_signo) {
info.si_signo = signr;
info.si_errno = 0;
info.si_code = SI_USER;
info.si_pid = current->parent->pid;
info.si_uid = current->parent->uid;
}
/* If the (new) signal is now blocked, requeue it. */
if (sigismember(&current->blocked, signr)) {
send_sig_info(signr, &info, current);
continue;
}
}
ka = &current->sig->action[signr-1];
if (ka->sa.sa_handler == SIG_IGN) {
if (signr != SIGCHLD)
continue;
/* Check for SIGCHLD: it's special. */
while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
/* nothing */;
continue;
}
if (ka->sa.sa_handler == SIG_DFL) {
int exit_code = signr;
/* Init gets no signals it doesn't want. */
if (current->pid == 1)
continue;
switch (signr) {
case SIGCONT: case SIGCHLD: case SIGWINCH: case SIGURG:
continue;
case SIGTSTP: case SIGTTIN: case SIGTTOU:
if (is_orphaned_pgrp(current->pgrp))
continue;
/* FALLTHRU */
case SIGSTOP: {
struct signal_struct *sig;
set_current_state(TASK_STOPPED);
current->exit_code = signr;
sig = current->parent->sig;
if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
notify_parent(current, SIGCHLD);
schedule();
single_stepping |= ptrace_cancel_bpt(current);
continue;
}
case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, exit_code, regs))
exit_code |= 0x80;
/* FALLTHRU */
default:
sig_exit(signr, exit_code, &info);
/* NOTREACHED */
}
}
/* Are we from a system call? */
if (syscall) {
/* If so, check system call restarting.. */
switch (regs->ARM_r0) {
case -ERESTART_RESTARTBLOCK:
current_thread_info()->restart_block.fn =
do_no_restart_syscall;
case -ERESTARTNOHAND:
regs->ARM_r0 = -EINTR;
break;
case -ERESTARTSYS:
if (!(ka->sa.sa_flags & SA_RESTART)) {
regs->ARM_r0 = -EINTR;
break;
}
/* fallthrough */
case -ERESTARTNOINTR:
regs->ARM_r0 = regs->ARM_ORIG_r0;
regs->ARM_pc -= 4;
}
}
/* Whee! Actually deliver the signal. */
handle_signal(signr, ka, &info, oldset, regs);
if (single_stepping)
ptrace_set_bpt(current);
return 1; return 1;
} }
...@@ -668,11 +585,10 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall) ...@@ -668,11 +585,10 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if (regs->ARM_r0 == -ERESTARTNOHAND || if (regs->ARM_r0 == -ERESTARTNOHAND ||
regs->ARM_r0 == -ERESTARTSYS || regs->ARM_r0 == -ERESTARTSYS ||
regs->ARM_r0 == -ERESTARTNOINTR) { regs->ARM_r0 == -ERESTARTNOINTR) {
regs->ARM_r0 = regs->ARM_ORIG_r0; restart_syscall(regs);
regs->ARM_pc -= 4;
} }
} }
if (single_stepping) if (current->ptrace & PT_SINGLESTEP)
ptrace_set_bpt(current); ptrace_set_bpt(current);
return 0; return 0;
} }
......
...@@ -52,9 +52,14 @@ static const char *handler[]= { "prefetch abort", "data abort", "address excepti ...@@ -52,9 +52,14 @@ static const char *handler[]= { "prefetch abort", "data abort", "address excepti
void dump_backtrace_entry(unsigned long where, unsigned long from) void dump_backtrace_entry(unsigned long where, unsigned long from)
{ {
#ifdef CONFIG_KALLSYMS
printk("[<%08lx>] ", where);
print_symbol("(%s) ", where);
printk("from [<%08lx>] ", from);
print_symbol("(%s)\n", from);
#else
printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from);
print_symbol(" %s", where); #endif
printk("\n");
} }
/* /*
...@@ -503,11 +508,11 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs) ...@@ -503,11 +508,11 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
die_if_kernel("unknown data abort code", regs, instr); die_if_kernel("unknown data abort code", regs, instr);
} }
void __bug(const char *file, int line, void *data) volatile void __bug(const char *file, int line, void *data)
{ {
printk(KERN_CRIT"kernel BUG at %s:%d!", file, line); printk(KERN_CRIT"kernel BUG at %s:%d!", file, line);
if (data) if (data)
printk(KERN_CRIT" - extra data = %p", data); printk(" - extra data = %p", data);
printk("\n"); printk("\n");
*(int *)0 = 0; *(int *)0 = 0;
} }
......
...@@ -82,11 +82,20 @@ ENTRY(c_backtrace) ...@@ -82,11 +82,20 @@ ENTRY(c_backtrace)
teq r3, r2 teq r3, r2
bleq .Ldumpstm bleq .Ldumpstm
teq frame, next /*
movne frame, next * A zero next framepointer means we're done.
teqne frame, #0 */
bne 3b teq next, #0
LOADREGS(fd, sp!, {r4 - r8, pc}) LOADREGS(eqfd, sp!, {r4 - r8, pc})
/*
* The next framepointer must be above the
* current framepointer.
*/
cmp next, frame
mov frame, next
bhi 3b
b 1007f
/* /*
* Fixup for LDMDB * Fixup for LDMDB
......
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/stddef.h>
#include <linux/timer.h>
#include <linux/list.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/irq.h> #include <asm/irq.h>
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
* 16-Mar-1999 RMK Added autodetect of ISA PICs * 16-Mar-1999 RMK Added autodetect of ISA PICs
*/ */
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/list.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
*/ */
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/list.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/irq.h> #include <asm/irq.h>
......
...@@ -360,6 +360,8 @@ int iop310_setup(int nr, struct pci_sys_data *sys) ...@@ -360,6 +360,8 @@ int iop310_setup(int nr, struct pci_sys_data *sys)
if (!res) if (!res)
panic("PCI: unable to alloc resources"); panic("PCI: unable to alloc resources");
memset(res, 0, sizeof(struct resource) * 2);
switch (nr) { switch (nr) {
case 0: case 0:
res[0].start = IOP310_PCIPRI_LOWER_IO + 0x6e000000; res[0].start = IOP310_PCIPRI_LOWER_IO + 0x6e000000;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
* Fixes for various revision boards - DS * Fixes for various revision boards - DS
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/list.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/list.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/irq.h> #include <asm/irq.h>
......
...@@ -85,19 +85,6 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type) ...@@ -85,19 +85,6 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
return 0; return 0;
} }
/*
* Since we can't actually physically mask edge triggered interrupts
* without the risk of missing transitions, we therefore logically mask
* them and defer their processing through tis function.
*/
static void pxa_manual_rerun(unsigned int irq)
{
struct pt_regs regs;
memset(&regs, 0, sizeof(regs));
irq_desc[irq].handle(irq, &irq_desc[irq], &regs);
}
/* /*
* GPIO IRQs must be acknoledged. This is for GPIO 0 and 1. * GPIO IRQs must be acknoledged. This is for GPIO 0 and 1.
*/ */
...@@ -111,7 +98,6 @@ static struct irqchip pxa_low_gpio_chip = { ...@@ -111,7 +98,6 @@ static struct irqchip pxa_low_gpio_chip = {
.ack = pxa_ack_low_gpio, .ack = pxa_ack_low_gpio,
.mask = pxa_mask_irq, .mask = pxa_mask_irq,
.unmask = pxa_unmask_irq, .unmask = pxa_unmask_irq,
.rerun = pxa_manual_rerun,
.type = pxa_gpio_irq_type, .type = pxa_gpio_irq_type,
}; };
......
#include <linux/init.h> #include <linux/init.h>
#include <linux/list.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/hardware/iomd.h> #include <asm/hardware/iomd.h>
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/device.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -24,20 +25,12 @@ ...@@ -24,20 +25,12 @@
/* /*
* SA1100 GPIO edge detection for IRQs: * SA1100 GPIO edge detection for IRQs:
* IRQs are generated on Falling-Edge, Rising-Edge, or both. * IRQs are generated on Falling-Edge, Rising-Edge, or both.
* This must be called *before* the appropriate IRQ is registered.
* Use this instead of directly setting GRER/GFER. * Use this instead of directly setting GRER/GFER.
*/ */
static int GPIO_IRQ_rising_edge; static int GPIO_IRQ_rising_edge;
static int GPIO_IRQ_falling_edge; static int GPIO_IRQ_falling_edge;
static int GPIO_IRQ_mask = (1 << 11) - 1; static int GPIO_IRQ_mask = (1 << 11) - 1;
static void sa1100_manual_rerun(unsigned int irq)
{
struct pt_regs regs;
memset(&regs, 0, sizeof(regs));
irq_desc[irq].handle(irq, &irq_desc[irq], &regs);
}
/* /*
* To get the GPIO number from an IRQ number * To get the GPIO number from an IRQ number
*/ */
...@@ -105,7 +98,6 @@ static struct irqchip sa1100_low_gpio_chip = { ...@@ -105,7 +98,6 @@ static struct irqchip sa1100_low_gpio_chip = {
.ack = sa1100_low_gpio_ack, .ack = sa1100_low_gpio_ack,
.mask = sa1100_low_gpio_mask, .mask = sa1100_low_gpio_mask,
.unmask = sa1100_low_gpio_unmask, .unmask = sa1100_low_gpio_unmask,
.rerun = sa1100_manual_rerun,
.type = sa1100_gpio_type, .type = sa1100_gpio_type,
.wake = sa1100_low_gpio_wake, .wake = sa1100_low_gpio_wake,
}; };
...@@ -189,7 +181,6 @@ static struct irqchip sa1100_high_gpio_chip = { ...@@ -189,7 +181,6 @@ static struct irqchip sa1100_high_gpio_chip = {
.ack = sa1100_high_gpio_ack, .ack = sa1100_high_gpio_ack,
.mask = sa1100_high_gpio_mask, .mask = sa1100_high_gpio_mask,
.unmask = sa1100_high_gpio_unmask, .unmask = sa1100_high_gpio_unmask,
.rerun = sa1100_manual_rerun,
.type = sa1100_gpio_type, .type = sa1100_gpio_type,
.wake = sa1100_high_gpio_wake, .wake = sa1100_high_gpio_wake,
}; };
...@@ -212,7 +203,6 @@ static struct irqchip sa1100_normal_chip = { ...@@ -212,7 +203,6 @@ static struct irqchip sa1100_normal_chip = {
.ack = sa1100_mask_irq, .ack = sa1100_mask_irq,
.mask = sa1100_mask_irq, .mask = sa1100_mask_irq,
.unmask = sa1100_unmask_irq, .unmask = sa1100_unmask_irq,
/* rerun should never be called */
}; };
static struct resource irq_resource = { static struct resource irq_resource = {
...@@ -267,10 +257,4 @@ void __init sa1100_init_irq(void) ...@@ -267,10 +257,4 @@ void __init sa1100_init_irq(void)
*/ */
set_irq_chip(IRQ_GPIO11_27, &sa1100_normal_chip); set_irq_chip(IRQ_GPIO11_27, &sa1100_normal_chip);
set_irq_chained_handler(IRQ_GPIO11_27, sa1100_high_gpio_handler); set_irq_chained_handler(IRQ_GPIO11_27, sa1100_high_gpio_handler);
/*
* We generally don't want the LCD IRQ being
* enabled as soon as we request it.
*/
set_irq_flags(IRQ_LCD, IRQF_VALID/* | IRQF_NOAUTOEN*/);
} }
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h> #include <asm/mach/serial_sa1100.h>
#include <asm/hardware/sa1111.h>
#include "generic.h" #include "generic.h"
#include "sa1111.h"
static void xp860_power_off(void) static void xp860_power_off(void)
......
...@@ -83,7 +83,7 @@ static void vm_region_dump(struct vm_region *head, char *fn) ...@@ -83,7 +83,7 @@ static void vm_region_dump(struct vm_region *head, char *fn)
struct vm_region *c; struct vm_region *c;
printk("Consistent Allocation Map (%s):\n", fn); printk("Consistent Allocation Map (%s):\n", fn);
list_for_each_entry(c, &head->list, vm_list) { list_for_each_entry(c, &head->vm_list, vm_list) {
printk(" %p: %08lx - %08lx (0x%08x)\n", c, printk(" %p: %08lx - %08lx (0x%08x)\n", c,
c->vm_start, c->vm_end, c->vm_end - c->vm_start); c->vm_start, c->vm_end, c->vm_end - c->vm_start);
} }
......
...@@ -678,7 +678,7 @@ __xscale_setup: ...@@ -678,7 +678,7 @@ __xscale_setup:
mcr p15, 0, r0, c15, c1, 0 @ affects USR or SVC modes mcr p15, 0, r0, c15, c1, 0 @ affects USR or SVC modes
mrc p15, 0, r0, c1, c0, 0 @ get control register mrc p15, 0, r0, c1, c0, 0 @ get control register
bic r0, r0, #0x0200 @ .... ..R. .... .... bic r0, r0, #0x0200 @ .... ..R. .... ....
bic r0, r0, #0x0082 @ .... .... B... ..A. bic r0, r0, #0x0002 @ .... .... .... ..A.
orr r0, r0, #0x0005 @ .... .... .... .C.M orr r0, r0, #0x0005 @ .... .... .... .C.M
orr r0, r0, #0x3900 @ ..VI Z..S .... .... orr r0, r0, #0x3900 @ ..VI Z..S .... ....
mov pc, lr mov pc, lr
......
...@@ -7,7 +7,11 @@ ...@@ -7,7 +7,11 @@
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(stext) ENTRY(stext)
#ifndef __ARMEB__
jiffies = jiffies_64; jiffies = jiffies_64;
#else
jiffies = jiffies_64 + 4;
#endif
SECTIONS SECTIONS
{ {
. = TEXTADDR; . = TEXTADDR;
......
...@@ -207,7 +207,7 @@ int __init eeprom_init(void) ...@@ -207,7 +207,7 @@ int __init eeprom_init(void)
* it will mirror the address space: * it will mirror the address space:
* 1. We read two locations (that are mirrored), * 1. We read two locations (that are mirrored),
* if the content differs * it's a 16kB EEPROM. * if the content differs * it's a 16kB EEPROM.
* 2. if it doesn't differ - write diferent value to one of the locations, * 2. if it doesn't differ - write different value to one of the locations,
* check the other - if content still is the same it's a 2k EEPROM, * check the other - if content still is the same it's a 2k EEPROM,
* restore original data. * restore original data.
*/ */
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/mc146818rtc.h> #include <linux/mc146818rtc.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/ptrace.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/highmem.h> #include <linux/highmem.h>
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/ptrace.h>
#ifdef CONFIG_EISA #ifdef CONFIG_EISA
#include <linux/ioport.h> #include <linux/ioport.h>
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/highmem.h> #include <linux/highmem.h>
#include <linux/ptrace.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
......
...@@ -57,7 +57,7 @@ voyager_thread_start(void) ...@@ -57,7 +57,7 @@ voyager_thread_start(void)
} }
static int static int
execute_helper(void *string) execute(const char *string)
{ {
int ret; int ret;
...@@ -74,22 +74,13 @@ execute_helper(void *string) ...@@ -74,22 +74,13 @@ execute_helper(void *string)
NULL, NULL,
}; };
if((ret = exec_usermodehelper(argv[0], argv, envp)) < 0) { if ((ret = call_usermodehelper(argv[0], argv, envp, 1)) != 0) {
printk(KERN_ERR "Voyager failed to execute \"%s\"\n", printk(KERN_ERR "Voyager failed to run \"%s\": %i\n",
(char *)string); string, ret);
} }
return ret; return ret;
} }
static void
execute(char *string)
{
if(kernel_thread(execute_helper, (void *)string, CLONE_VFORK | SIGCHLD) < 0) {
printk(KERN_ERR "Voyager failed to fork before exec of \"%s\"\n",
string);
}
}
static void static void
check_from_kernel(void) check_from_kernel(void)
{ {
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
+---------------------------------------------------------------------------*/ +---------------------------------------------------------------------------*/
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/ptrace.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/desc.h> #include <asm/desc.h>
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ptrace.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/fpu.h> #include <asm/fpu.h>
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <linux/ptrace.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/hardirq.h> #include <asm/hardirq.h>
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ptrace.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/fpu.h> #include <asm/fpu.h>
......
...@@ -109,7 +109,7 @@ ddb_set_pdar(u32 pdar, u32 phys, u32 size, int width, ...@@ -109,7 +109,7 @@ ddb_set_pdar(u32 pdar, u32 phys, u32 size, int width,
* When programming a PDAR, the register should be read immediately * When programming a PDAR, the register should be read immediately
* after writing it. This ensures that address decoders are properly * after writing it. This ensures that address decoders are properly
* configured. * configured.
* [jsun] is this really necesary? * [jsun] is this really necessary?
*/ */
ddb_in32(pdar); ddb_in32(pdar);
ddb_in32(pdar + 4); ddb_in32(pdar + 4);
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/ptrace.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/ptrace.h>
#include <asm/cachectl.h> #include <asm/cachectl.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/file.h> #include <linux/file.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/ptrace.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#include <linux/binfmts.h> #include <linux/binfmts.h>
#include <linux/namei.h> #include <linux/namei.h>
#include <linux/vfs.h> #include <linux/vfs.h>
#include <linux/ptrace.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Author: Dan Cox * Author: Dan Cox
* *
* 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Derived from arch/ppc/boot/prep/misc.c * Derived from arch/ppc/boot/prep/misc.c
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* mgreer@mvista.com * mgreer@mvista.com
* *
* 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others). * Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
* mgreer@mvista.com * mgreer@mvista.com
* *
* 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Author: Tom Rini <trini@mvista.com> # Author: Tom Rini <trini@mvista.com>
# #
# 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under # 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under
# the terms of the GNU General Public License version 2.1. This program # the terms of the GNU General Public License version 2. This program
# is licensed "as is" without any warranty of any kind, whether express # is licensed "as is" without any warranty of any kind, whether express
# or implied. # or implied.
# #
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Mark A. Greer <mgreer@mvista.com> * Author: Mark A. Greer <mgreer@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others). * Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Mark Greer <mgreer@mvista.com> * Author: Mark Greer <mgreer@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Derived from arch/ppc/boot/prep/misc.c * Derived from arch/ppc/boot/prep/misc.c
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* Derived from arch/ppc/boot/prep/misc.c * Derived from arch/ppc/boot/prep/misc.c
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others). * Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
* *
* 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
* Usage: addnote zImage * Usage: addnote zImage
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
......
...@@ -11,8 +11,10 @@ ...@@ -11,8 +11,10 @@
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <string.h>
#include "rs6000.h" #include "rs6000.h"
#define AOUT_MAGIC 0x010b #define AOUT_MAGIC 0x010b
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Matt Porter <mporter@mvista.com> * Author: Matt Porter <mporter@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <string.h>
#define PL(x) printf("%c%c%c%c", ((x)>>24)&0xff, ((x)>>16)&0xff, ((x)>>8)&0xff, (x)&0xff ); #define PL(x) printf("%c%c%c%c", ((x)>>24)&0xff, ((x)>>16)&0xff, ((x)>>8)&0xff, (x)&0xff );
......
...@@ -923,6 +923,8 @@ initial_mmu: ...@@ -923,6 +923,8 @@ initial_mmu:
ori r3,r3,KERNELBASE@l ori r3,r3,KERNELBASE@l
tophys(r4,r3) /* Load the kernel physical address */ tophys(r4,r3) /* Load the kernel physical address */
iccci r0,r3 /* Invalidate the i-cache before use */
/* Load the kernel PID. /* Load the kernel PID.
*/ */
li r0,0 li r0,0
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* The MPC8xx has an interrupt mask in the SIU. If a bit is set, the * The MPC8xx has an interrupt mask in the SIU. If a bit is set, the
* interrupt is _enabled_. As expected, IRQ0 is bit 0 in the 32-bit * interrupt is _enabled_. As expected, IRQ0 is bit 0 in the 32-bit
* mask register (of which only 16 are defined), hence the weird shifting * mask register (of which only 16 are defined), hence the weird shifting
* and compliment of the cached_irq_mask. I want to be able to stuff * and complement of the cached_irq_mask. I want to be able to stuff
* this right into the SIU SMASK register. * this right into the SIU SMASK register.
* Many of the prep/chrp functions are conditional compiled on CONFIG_8xx * Many of the prep/chrp functions are conditional compiled on CONFIG_8xx
* to reduce code space and undefined function references. * to reduce code space and undefined function references.
......
...@@ -1273,8 +1273,8 @@ _GLOBAL(sys_call_table) ...@@ -1273,8 +1273,8 @@ _GLOBAL(sys_call_table)
.long sys_io_getevents .long sys_io_getevents
.long sys_io_submit /* 230 */ .long sys_io_submit /* 230 */
.long sys_io_cancel .long sys_io_cancel
.long sys_ni_syscall /* reserved for alloc_hugepages */ .long sys_set_tid_address
.long sys_ni_syscall /* reserved for free_hugepages */ .long sys_fadvise64
.long sys_exit_group .long sys_exit_group
.long sys_lookup_dcookie /* 235 */ .long sys_lookup_dcookie /* 235 */
.long sys_epoll_create .long sys_epoll_create
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/pm.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
...@@ -69,8 +70,6 @@ long long __ashldi3(long long, int); ...@@ -69,8 +70,6 @@ long long __ashldi3(long long, int);
long long __lshrdi3(long long, int); long long __lshrdi3(long long, int);
int abs(int); int abs(int);
extern unsigned char __res[];
extern unsigned long mm_ptov (unsigned long paddr); extern unsigned long mm_ptov (unsigned long paddr);
EXPORT_SYMBOL(clear_page); EXPORT_SYMBOL(clear_page);
...@@ -180,6 +179,7 @@ EXPORT_SYMBOL(pci_bus_to_phys); ...@@ -180,6 +179,7 @@ EXPORT_SYMBOL(pci_bus_to_phys);
EXPORT_SYMBOL(consistent_alloc); EXPORT_SYMBOL(consistent_alloc);
EXPORT_SYMBOL(consistent_free); EXPORT_SYMBOL(consistent_free);
EXPORT_SYMBOL(consistent_sync); EXPORT_SYMBOL(consistent_sync);
EXPORT_SYMBOL(flush_dcache_all);
#endif #endif
EXPORT_SYMBOL(open); EXPORT_SYMBOL(open);
...@@ -269,6 +269,8 @@ EXPORT_SYMBOL(pmac_xpram_write); ...@@ -269,6 +269,8 @@ EXPORT_SYMBOL(pmac_xpram_write);
#endif /* CONFIG_NVRAM */ #endif /* CONFIG_NVRAM */
EXPORT_SYMBOL(to_tm); EXPORT_SYMBOL(to_tm);
EXPORT_SYMBOL(pm_power_off);
EXPORT_SYMBOL_NOVERS(__ashrdi3); EXPORT_SYMBOL_NOVERS(__ashrdi3);
EXPORT_SYMBOL_NOVERS(__ashldi3); EXPORT_SYMBOL_NOVERS(__ashldi3);
EXPORT_SYMBOL_NOVERS(__lshrdi3); EXPORT_SYMBOL_NOVERS(__lshrdi3);
...@@ -329,10 +331,12 @@ EXPORT_SYMBOL(debugger_fault_handler); ...@@ -329,10 +331,12 @@ EXPORT_SYMBOL(debugger_fault_handler);
#endif #endif
#ifdef CONFIG_8xx #ifdef CONFIG_8xx
EXPORT_SYMBOL(__res);
EXPORT_SYMBOL(cpm_install_handler); EXPORT_SYMBOL(cpm_install_handler);
EXPORT_SYMBOL(cpm_free_handler); EXPORT_SYMBOL(cpm_free_handler);
#endif /* CONFIG_8xx */ #endif /* CONFIG_8xx */
#if defined(CONFIG_8xx) || defined(CONFIG_4xx)
EXPORT_SYMBOL(__res);
#endif
#if defined(CONFIG_8xx) || defined(CONFIG_8260) #if defined(CONFIG_8xx) || defined(CONFIG_8260)
EXPORT_SYMBOL(request_8xxirq); EXPORT_SYMBOL(request_8xxirq);
#endif #endif
......
...@@ -54,6 +54,7 @@ struct task_struct *last_task_used_altivec = NULL; ...@@ -54,6 +54,7 @@ struct task_struct *last_task_used_altivec = NULL;
static struct fs_struct init_fs = INIT_FS; static struct fs_struct init_fs = INIT_FS;
static struct files_struct init_files = INIT_FILES; static struct files_struct init_files = INIT_FILES;
static struct signal_struct init_signals = INIT_SIGNALS(init_signals); static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
struct mm_struct init_mm = INIT_MM(init_mm); struct mm_struct init_mm = INIT_MM(init_mm);
/* this is 8kB-aligned so we can get to the thread_info struct /* this is 8kB-aligned so we can get to the thread_info struct
......
...@@ -369,11 +369,9 @@ void do_syscall_trace(void) ...@@ -369,11 +369,9 @@ void do_syscall_trace(void)
if (!test_thread_flag(TIF_SYSCALL_TRACE) if (!test_thread_flag(TIF_SYSCALL_TRACE)
|| !(current->ptrace & PT_PTRACED)) || !(current->ptrace & PT_PTRACED))
return; return;
current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
? 0x80 : 0); ? 0x80 : 0));
current->state = TASK_STOPPED;
notify_parent(current, SIGCHLD);
schedule();
/* /*
* this isn't the same as continuing with a signal, but it will do * this isn't the same as continuing with a signal, but it will do
* for normal use. strace only continues with a signal if the * for normal use. strace only continues with a signal if the
......
...@@ -129,6 +129,8 @@ void machine_halt(void) ...@@ -129,6 +129,8 @@ void machine_halt(void)
ppc_md.halt(); ppc_md.halt();
} }
void (*pm_power_off)(void) = machine_power_off;
#ifdef CONFIG_TAU #ifdef CONFIG_TAU
extern u32 cpu_temp(unsigned long cpu); extern u32 cpu_temp(unsigned long cpu);
extern u32 cpu_temp_both(unsigned long cpu); extern u32 cpu_temp_both(unsigned long cpu);
......
...@@ -389,7 +389,7 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset, ...@@ -389,7 +389,7 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
{ {
struct sigcontext *sc; struct sigcontext *sc;
struct rt_sigframe *rt_sf; struct rt_sigframe *rt_sf;
struct k_sigaction *ka = &current->sig->action[sig-1]; struct k_sigaction *ka = &current->sighand->action[sig-1];
if (TRAP(regs) == 0x0C00 /* System Call! */ if (TRAP(regs) == 0x0C00 /* System Call! */
&& ((int)regs->result == -ERESTARTNOHAND || && ((int)regs->result == -ERESTARTNOHAND ||
...@@ -486,7 +486,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) ...@@ -486,7 +486,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
signr = get_signal_to_deliver(&info, regs, NULL); signr = get_signal_to_deliver(&info, regs, NULL);
if (signr > 0) { if (signr > 0) {
ka = &current->sig->action[signr-1]; ka = &current->sighand->action[signr-1];
if ( (ka->sa.sa_flags & SA_ONSTACK) if ( (ka->sa.sa_flags & SA_ONSTACK)
&& (! on_sig_stack(regs->gpr[1]))) && (! on_sig_stack(regs->gpr[1])))
newsp = (current->sas_ss_sp + current->sas_ss_size); newsp = (current->sas_ss_sp + current->sas_ss_size);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2001-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000 (c) MontaVista, Software, Inc. This file is licensed under * 2000 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Matthew Locke <mlocke@mvista.com> * Author: Matthew Locke <mlocke@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Matthew Locke <mlocke@mvista.com> * Author: Matthew Locke <mlocke@mvista.com>
* *
* 2000 (c) MontaVista, Software, Inc. This file is licensed under * 2000 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster akuster@mvista.com * Author: Armin Kuster akuster@mvista.com
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Authors: Armin Kuster <akuster@mvista.com>, Tom Rini <trini@mvista.com> * Authors: Armin Kuster <akuster@mvista.com>, Tom Rini <trini@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Frank Rowand <frank_rowand@mvista.com>, or source@mvista.com * Author: Frank Rowand <frank_rowand@mvista.com>, or source@mvista.com
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Frank Rowand <frank_rowand@mvista.com>, or source@mvista.com * Author: Frank Rowand <frank_rowand@mvista.com>, or source@mvista.com
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2001 (c) MontaVista, Software, Inc. This file is licensed under * 2001 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under * 2000-2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com> * Author: Armin Kuster <akuster@mvista.com>
* *
* 2000 (c) MontaVista, Software, Inc. This file is licensed under * 2000 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Copyright(c) 1999-2000 Grant Erickson <grant@lcse.umn.edu> * Copyright(c) 1999-2000 Grant Erickson <grant@lcse.umn.edu>
* *
* 2002 (c) MontaVista, Software, Inc. This file is licensed under * 2002 (c) MontaVista, Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2.1. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
*/ */
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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