summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/s390/Debugging390.txt2
-rw-r--r--Makefile4
-rw-r--r--arch/alpha/kernel/asm-offsets.c1
-rw-r--r--arch/alpha/kernel/core_marvel.c4
-rw-r--r--arch/alpha/kernel/systbls.S1
-rw-r--r--arch/alpha/lib/csum_ipv6_magic.S2
-rw-r--r--arch/alpha/mm/numa.c69
-rw-r--r--arch/arm/common/sa1111-pcibuf.c2
-rw-r--r--arch/arm/common/sa1111.c10
-rw-r--r--arch/arm/def-configs/epxa10db493
-rw-r--r--arch/arm/kernel/init_task.c1
-rw-r--r--arch/arm/kernel/irq.c61
-rw-r--r--arch/arm/kernel/ptrace.c15
-rw-r--r--arch/arm/kernel/ptrace.h18
-rw-r--r--arch/arm/kernel/signal.c178
-rw-r--r--arch/arm/kernel/traps.c13
-rw-r--r--arch/arm/lib/backtrace.S19
-rw-r--r--arch/arm/mach-epxa10db/irq.c3
-rw-r--r--arch/arm/mach-footbridge/irq.c1
-rw-r--r--arch/arm/mach-footbridge/isa-irq.c1
-rw-r--r--arch/arm/mach-iop310/iop310-irq.c1
-rw-r--r--arch/arm/mach-iop310/iop310-pci.c2
-rw-r--r--arch/arm/mach-iop310/iq80310-irq.c1
-rw-r--r--arch/arm/mach-iop310/xs80200-irq.c1
-rw-r--r--arch/arm/mach-pxa/irq.c14
-rw-r--r--arch/arm/mach-rpc/irq.c1
-rw-r--r--arch/arm/mach-sa1100/irq.c18
-rw-r--r--arch/arm/mach-sa1100/xp860.c2
-rw-r--r--arch/arm/mm/consistent.c2
-rw-r--r--arch/arm/mm/proc-xscale.S2
-rw-r--r--arch/arm/vmlinux-armv.lds.in4
-rw-r--r--arch/cris/drivers/eeprom.c2
-rw-r--r--arch/i386/kernel/process.c1
-rw-r--r--arch/i386/kernel/traps.c1
-rw-r--r--arch/i386/kernel/vm86.c1
-rw-r--r--arch/i386/mach-voyager/voyager_thread.c17
-rw-r--r--arch/i386/math-emu/fpu_entry.c1
-rw-r--r--arch/m68k/kernel/traps.c1
-rw-r--r--arch/m68knommu/kernel/asm-offsets.c1
-rw-r--r--arch/m68knommu/kernel/traps.c1
-rw-r--r--arch/mips/ddb5xxx/common/nile4.c2
-rw-r--r--arch/mips/kernel/irixsig.c1
-rw-r--r--arch/mips/kernel/sysmips.c1
-rw-r--r--arch/parisc/hpux/fs.c1
-rw-r--r--arch/parisc/kernel/sys_parisc32.c1
-rw-r--r--arch/ppc/boot/common/cpc700_memory.c2
-rw-r--r--arch/ppc/boot/common/misc-common.c2
-rw-r--r--arch/ppc/boot/common/mpc10x_memory.c2
-rw-r--r--arch/ppc/boot/common/util.S2
-rw-r--r--arch/ppc/boot/include/mpc10x.h2
-rw-r--r--arch/ppc/boot/simple/Makefile2
-rw-r--r--arch/ppc/boot/simple/gt64260_tty.c2
-rw-r--r--arch/ppc/boot/simple/head.S2
-rw-r--r--arch/ppc/boot/simple/misc-ev64260.S2
-rw-r--r--arch/ppc/boot/simple/misc-spruce.c2
-rw-r--r--arch/ppc/boot/simple/misc.c2
-rw-r--r--arch/ppc/boot/simple/relocate.S2
-rw-r--r--arch/ppc/boot/utils/addnote.c1
-rw-r--r--arch/ppc/boot/utils/hack-coff.c2
-rw-r--r--arch/ppc/boot/utils/mkbugboot.c2
-rw-r--r--arch/ppc/boot/utils/mknote.c1
-rw-r--r--arch/ppc/kernel/head_4xx.S2
-rw-r--r--arch/ppc/kernel/irq.c2
-rw-r--r--arch/ppc/kernel/misc.S4
-rw-r--r--arch/ppc/kernel/ppc_ksyms.c10
-rw-r--r--arch/ppc/kernel/process.c1
-rw-r--r--arch/ppc/kernel/ptrace.c8
-rw-r--r--arch/ppc/kernel/setup.c2
-rw-r--r--arch/ppc/kernel/signal.c4
-rw-r--r--arch/ppc/platforms/4xx/ash.c2
-rw-r--r--arch/ppc/platforms/4xx/ash.h2
-rw-r--r--arch/ppc/platforms/4xx/cedar.c2
-rw-r--r--arch/ppc/platforms/4xx/cedar.h2
-rw-r--r--arch/ppc/platforms/4xx/ep405.c2
-rw-r--r--arch/ppc/platforms/4xx/ep405.h2
-rw-r--r--arch/ppc/platforms/4xx/ibm405gp.c2
-rw-r--r--arch/ppc/platforms/4xx/ibm405gp.h2
-rw-r--r--arch/ppc/platforms/4xx/ibm405gpr.c2
-rw-r--r--arch/ppc/platforms/4xx/ibm405gpr.h2
-rw-r--r--arch/ppc/platforms/4xx/ibmnp405h.c2
-rw-r--r--arch/ppc/platforms/4xx/ibmnp405h.h2
-rw-r--r--arch/ppc/platforms/4xx/ibmnp405l.c2
-rw-r--r--arch/ppc/platforms/4xx/ibmnp405l.h2
-rw-r--r--arch/ppc/platforms/4xx/ibmnp4gs.c2
-rw-r--r--arch/ppc/platforms/4xx/ibmnp4gs.h2
-rw-r--r--arch/ppc/platforms/4xx/ibmstb3.c2
-rw-r--r--arch/ppc/platforms/4xx/ibmstb3.h2
-rw-r--r--arch/ppc/platforms/4xx/ibmstb4.c2
-rw-r--r--arch/ppc/platforms/4xx/ibmstb4.h2
-rw-r--r--arch/ppc/platforms/4xx/ibmstbx25.c2
-rw-r--r--arch/ppc/platforms/4xx/ibmstbx25.h2
-rw-r--r--arch/ppc/platforms/4xx/redwood.c2
-rw-r--r--arch/ppc/platforms/4xx/redwood.h2
-rw-r--r--arch/ppc/platforms/4xx/redwood5.c2
-rw-r--r--arch/ppc/platforms/4xx/redwood5.h2
-rw-r--r--arch/ppc/platforms/4xx/redwood6.c2
-rwxr-xr-xarch/ppc/platforms/4xx/redwood6.h2
-rw-r--r--arch/ppc/platforms/4xx/sycamore.c2
-rwxr-xr-xarch/ppc/platforms/4xx/sycamore.h2
-rw-r--r--arch/ppc/platforms/4xx/walnut.c2
-rw-r--r--arch/ppc/platforms/4xx/walnut.h2
-rw-r--r--arch/ppc/platforms/ev64260.h2
-rw-r--r--arch/ppc/platforms/ev64260_setup.c2
-rw-r--r--arch/ppc/platforms/k2.h2
-rw-r--r--arch/ppc/platforms/k2_pci.c2
-rw-r--r--arch/ppc/platforms/k2_setup.c2
-rw-r--r--arch/ppc/platforms/lopec_pci.c2
-rw-r--r--arch/ppc/platforms/lopec_serial.h2
-rw-r--r--arch/ppc/platforms/lopec_setup.c2
-rw-r--r--arch/ppc/platforms/mcpn765.h2
-rw-r--r--arch/ppc/platforms/mcpn765_pci.c2
-rw-r--r--arch/ppc/platforms/mcpn765_serial.h2
-rw-r--r--arch/ppc/platforms/mcpn765_setup.c2
-rw-r--r--arch/ppc/platforms/menf1.h2
-rw-r--r--arch/ppc/platforms/menf1_pci.c2
-rw-r--r--arch/ppc/platforms/menf1_setup.c2
-rw-r--r--arch/ppc/platforms/mvme5100.h2
-rw-r--r--arch/ppc/platforms/mvme5100_pci.c2
-rw-r--r--arch/ppc/platforms/mvme5100_serial.h2
-rw-r--r--arch/ppc/platforms/mvme5100_setup.c2
-rw-r--r--arch/ppc/platforms/pal4.h2
-rw-r--r--arch/ppc/platforms/pal4_pci.c2
-rw-r--r--arch/ppc/platforms/pal4_serial.h2
-rw-r--r--arch/ppc/platforms/pal4_setup.c2
-rw-r--r--arch/ppc/platforms/pcore.h2
-rw-r--r--arch/ppc/platforms/pcore_pci.c2
-rw-r--r--arch/ppc/platforms/pcore_setup.c2
-rw-r--r--arch/ppc/platforms/powerpmc250.c2
-rw-r--r--arch/ppc/platforms/powerpmc250.h2
-rw-r--r--arch/ppc/platforms/powerpmc250_serial.h2
-rw-r--r--arch/ppc/platforms/pplus_pci.c2
-rw-r--r--arch/ppc/platforms/pplus_setup.c2
-rw-r--r--arch/ppc/platforms/prpmc750_pci.c2
-rw-r--r--arch/ppc/platforms/prpmc750_serial.h2
-rw-r--r--arch/ppc/platforms/prpmc750_setup.c2
-rw-r--r--arch/ppc/platforms/prpmc800.h2
-rw-r--r--arch/ppc/platforms/prpmc800_pci.c2
-rw-r--r--arch/ppc/platforms/prpmc800_serial.h2
-rw-r--r--arch/ppc/platforms/prpmc800_setup.c2
-rw-r--r--arch/ppc/platforms/sandpoint.h2
-rw-r--r--arch/ppc/platforms/sandpoint_pci.c2
-rw-r--r--arch/ppc/platforms/sandpoint_serial.h2
-rw-r--r--arch/ppc/platforms/sandpoint_setup.c2
-rw-r--r--arch/ppc/platforms/spruce.h2
-rw-r--r--arch/ppc/platforms/spruce_pci.c2
-rw-r--r--arch/ppc/platforms/spruce_serial.h2
-rw-r--r--arch/ppc/platforms/spruce_setup.c2
-rw-r--r--arch/ppc/platforms/zx4500.h2
-rw-r--r--arch/ppc/platforms/zx4500_pci.c2
-rw-r--r--arch/ppc/platforms/zx4500_serial.h2
-rw-r--r--arch/ppc/platforms/zx4500_setup.c2
-rw-r--r--arch/ppc/syslib/cpc700.h2
-rw-r--r--arch/ppc/syslib/cpc700_pic.c2
-rw-r--r--arch/ppc/syslib/cpc710.h2
-rw-r--r--arch/ppc/syslib/gt64260_common.c2
-rw-r--r--arch/ppc/syslib/gt64260_pic.c2
-rw-r--r--arch/ppc/syslib/harrier.c2
-rw-r--r--arch/ppc/syslib/mpc10x_common.c2
-rw-r--r--arch/ppc/syslib/pci_auto.c2
-rw-r--r--arch/ppc/syslib/ppc405_pci.c2
-rw-r--r--arch/ppc/syslib/ppc4xx_dma.c2
-rw-r--r--arch/ppc/syslib/ppc4xx_pm.c2
-rw-r--r--arch/ppc/syslib/ppc4xx_serial.c2
-rw-r--r--arch/ppc/syslib/pplus_common.c2
-rw-r--r--arch/ppc/syslib/todc_time.c2
-rw-r--r--arch/ppc64/kernel/process.c1
-rw-r--r--arch/ppc64/kernel/sys_ppc32.c1
-rw-r--r--arch/s390x/kernel/linux32.c1
-rw-r--r--arch/sh/kernel/process.c1
-rw-r--r--arch/sparc64/kernel/sys_sparc32.c1
-rw-r--r--arch/um/kernel/exec_kern.c1
-rw-r--r--arch/um/kernel/signal_kern.c1
-rw-r--r--arch/um/kernel/skas/process_kern.c1
-rw-r--r--arch/um/kernel/tt/process_kern.c1
-rw-r--r--arch/um/kernel/tt/syscall_kern.c1
-rw-r--r--arch/v850/kernel/asm-consts.c1
-rw-r--r--arch/x86_64/ia32/sys_ia32.c1
-rw-r--r--drivers/acorn/block/fd1772.c2
-rw-r--r--drivers/acorn/scsi/acornscsi.c108
-rw-r--r--drivers/acorn/scsi/fas216.c159
-rw-r--r--drivers/acorn/scsi/queue.c8
-rw-r--r--drivers/acorn/scsi/scsi.h4
-rw-r--r--drivers/acpi/thermal.c2
-rw-r--r--drivers/base/hotplug.c2
-rw-r--r--drivers/block/deadline-iosched.c10
-rw-r--r--drivers/block/elevator.c2
-rw-r--r--drivers/bluetooth/bt3c_cs.c61
-rw-r--r--drivers/char/rio/rioboot.c2
-rw-r--r--drivers/char/watchdog/wdt285.c171
-rw-r--r--drivers/char/watchdog/wdt977.c32
-rw-r--r--drivers/ide/pci/amd74xx.c2
-rw-r--r--drivers/ieee1394/nodemgr.c2
-rw-r--r--drivers/input/input.c2
-rw-r--r--drivers/input/serio/sa1111ps2.c2
-rw-r--r--drivers/isdn/hardware/eicon/divasmain.c2
-rw-r--r--drivers/isdn/hisax/amd7930_fn.c2
-rw-r--r--drivers/mtd/chips/jedec.c2
-rw-r--r--drivers/mtd/maps/sa1100-flash.c11
-rw-r--r--drivers/net/8139too.c2
-rw-r--r--drivers/net/hamradio/baycom_epp.c45
-rw-r--r--drivers/net/shaper.c2
-rw-r--r--drivers/pnp/pnpbios/core.c2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.reg2
-rw-r--r--drivers/usb/image/scanner.c2
-rw-r--r--fs/befs/ChangeLog6
-rw-r--r--fs/befs/btree.c12
-rw-r--r--fs/befs/datastream.c2
-rw-r--r--fs/binfmt_aout.c1
-rw-r--r--fs/jfs/jfs_logmgr.c98
-rw-r--r--fs/jfs/jfs_logmgr.h1
-rw-r--r--fs/jfs/jfs_txnmgr.c3
-rw-r--r--fs/jfs/jfs_umount.c4
-rw-r--r--fs/proc/array.c95
-rw-r--r--fs/proc/base.c1
-rw-r--r--include/asm-alpha/io.h3
-rw-r--r--include/asm-alpha/unistd.h3
-rw-r--r--include/asm-arm/arch-iop310/serial.h4
-rw-r--r--include/asm-arm/arch-pxa/time.h2
-rw-r--r--include/asm-arm/arch-sa1100/time.h2
-rw-r--r--include/asm-arm/mach/irq.h8
-rw-r--r--include/asm-arm/proc-armv/processor.h2
-rw-r--r--include/asm-arm/proc-armv/system.h11
-rw-r--r--include/asm-arm/signal.h4
-rw-r--r--include/asm-m68knommu/mcfne.h2
-rw-r--r--include/asm-mips64/sn/launch.h2
-rw-r--r--include/asm-mips64/sn/nmi.h2
-rw-r--r--include/asm-ppc/gt64260.h2
-rw-r--r--include/asm-ppc/gt64260_defs.h2
-rw-r--r--include/asm-ppc/harrier.h2
-rw-r--r--include/asm-ppc/ibm403.h2
-rw-r--r--include/asm-ppc/ibm405.h2
-rw-r--r--include/asm-ppc/ibm_ocp_pci.h2
-rw-r--r--include/asm-ppc/mpc10x.h2
-rw-r--r--include/asm-ppc/ppc405_dma.h2
-rw-r--r--include/asm-ppc/pplus.h2
-rw-r--r--include/asm-ppc/rtc.h2
-rw-r--r--include/asm-ppc/todc.h2
-rw-r--r--include/asm-ppc/unistd.h2
-rw-r--r--include/asm-sparc64/ptrace.h2
-rw-r--r--include/linux/kmod.h4
-rw-r--r--include/linux/ptrace.h31
-rw-r--r--include/linux/rtc.h4
-rw-r--r--include/linux/sched.h15
-rw-r--r--include/linux/signal.h2
-rw-r--r--include/linux/wireless.h2
-rw-r--r--kernel/compat.c5
-rw-r--r--kernel/exit.c10
-rw-r--r--kernel/kmod.c272
-rw-r--r--kernel/ptrace.c25
-rw-r--r--kernel/sched.c15
-rw-r--r--kernel/signal.c17
-rw-r--r--net/bluetooth/hci_core.c2
-rw-r--r--net/core/dev.c2
-rw-r--r--net/ipv4/ip_gre.c2
-rw-r--r--net/ipv4/ipip.c2
-rw-r--r--net/sched/sch_cbq.c2
-rw-r--r--security/capability.c1
-rw-r--r--sound/oss/trident.c2
-rw-r--r--sound/pci/cs46xx/dsp_spos_scb_lib.c2
259 files changed, 1200 insertions, 1399 deletions
diff --git a/Documentation/s390/Debugging390.txt b/Documentation/s390/Debugging390.txt
index cd16bb3f39b6..e5277d460e7a 100644
--- a/Documentation/s390/Debugging390.txt
+++ b/Documentation/s390/Debugging390.txt
@@ -10,7 +10,7 @@ Overview of Document:
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
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.
It is intended like the Enterprise Systems Architecture/390 Reference Summary
diff --git a/Makefile b/Makefile
index 29464fef3632..0f542ded8c10 100644
--- a/Makefile
+++ b/Makefile
@@ -704,8 +704,8 @@ clean: archclean $(clean-dirs)
$(call cmd,rmclean)
@find . $(RCS_FIND_IGNORE) \
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
- -o -name '.*.d' -o -name '.*.tmp' \) -type f \
- -print | xargs rm -f
+ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
+ -type f -print | xargs rm -f
# mrproper - delete configuration + modules + core files
#
diff --git a/arch/alpha/kernel/asm-offsets.c b/arch/alpha/kernel/asm-offsets.c
index c1f42cb25d3b..79b9b27166a3 100644
--- a/arch/alpha/kernel/asm-offsets.c
+++ b/arch/alpha/kernel/asm-offsets.c
@@ -7,6 +7,7 @@
#include <linux/types.h>
#include <linux/stddef.h>
#include <linux/sched.h>
+#include <linux/ptrace.h>
#include <asm/io.h>
#define DEFINE(sym, val) \
diff --git a/arch/alpha/kernel/core_marvel.c b/arch/alpha/kernel/core_marvel.c
index 0ecfee1a2ddd..5d2ea7f914c3 100644
--- a/arch/alpha/kernel/core_marvel.c
+++ b/arch/alpha/kernel/core_marvel.c
@@ -1058,11 +1058,11 @@ marvel_agp_info(void)
}
}
- printk("MARVEL - using hose %d as AGP\n", hose->index);
-
if (!hose || !hose->sg_pci)
return NULL;
+ printk("MARVEL - using hose %d as AGP\n", hose->index);
+
/*
* Get the csrs from the hose.
*/
diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S
index 68b7141f01d2..392a312b8907 100644
--- a/arch/alpha/kernel/systbls.S
+++ b/arch/alpha/kernel/systbls.S
@@ -432,6 +432,7 @@ sys_call_table:
.quad sys_remap_file_pages /* 410 */
.quad sys_set_tid_address
.quad sys_restart_syscall
+ .quad sys_fadvise64
.size sys_call_table, . - sys_call_table
.type sys_call_table, @object
diff --git a/arch/alpha/lib/csum_ipv6_magic.S b/arch/alpha/lib/csum_ipv6_magic.S
index 5a6e69c54d1f..e09748dbf2ed 100644
--- a/arch/alpha/lib/csum_ipv6_magic.S
+++ b/arch/alpha/lib/csum_ipv6_magic.S
@@ -84,7 +84,7 @@ csum_ipv6_magic:
extwl $0,2,$1 # e0 : fold 17-bit value
zapnot $0,3,$0 # .. e1 :
addq $0,$1,$0 # e0 :
- not $0,$0 # e1 : and compliment.
+ not $0,$0 # e1 : and complement.
zapnot $0,3,$0 # e0 :
ret # .. e1 :
diff --git a/arch/alpha/mm/numa.c b/arch/alpha/mm/numa.c
index 99680b5c2470..152eac7c2c37 100644
--- a/arch/alpha/mm/numa.c
+++ b/arch/alpha/mm/numa.c
@@ -64,6 +64,7 @@ setup_memory_node(int nid, void *kernel_end)
unsigned long bootmap_size, bootmap_pages, bootmap_start;
unsigned long start, end;
unsigned long node_pfn_start, node_pfn_end;
+ unsigned long node_min_pfn, node_max_pfn;
int i;
unsigned long node_datasz = PFN_UP(sizeof(pg_data_t));
int show_init = 0;
@@ -76,8 +77,9 @@ setup_memory_node(int nid, void *kernel_end)
memdesc = (struct memdesc_struct *)
(hwrpb->mddt_offset + (unsigned long) hwrpb);
- /* find the bounds of this node (min_low_pfn/max_low_pfn) */
- min_low_pfn = ~0UL;
+ /* find the bounds of this node (node_min_pfn/node_max_pfn) */
+ node_min_pfn = ~0UL;
+ node_max_pfn = 0UL;
for_each_mem_cluster(memdesc, cluster, i) {
/* Bit 0 is console/PALcode reserved. Bit 1 is
non-volatile memory -- we might want to mark
@@ -104,42 +106,48 @@ setup_memory_node(int nid, void *kernel_end)
if (end > node_pfn_end)
end = node_pfn_end;
- if (start < min_low_pfn)
- min_low_pfn = start;
- if (end > max_low_pfn)
- max_pfn = max_low_pfn = end;
+ if (start < node_min_pfn)
+ node_min_pfn = start;
+ if (end > node_max_pfn)
+ 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;
if (!msg_shown) {
msg_shown = 1;
printk("setup: forcing memory size to %ldK (from %ldK).\n",
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;
- 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 */
/* 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
/* Quasi-mark the pg_data_t as in-use */
- min_low_pfn += node_datasz;
- if (min_low_pfn >= max_low_pfn) {
+ node_min_pfn += node_datasz;
+ if (node_min_pfn >= node_max_pfn) {
printk(" not enough mem to reserve NODE_DATA");
return;
}
NODE_DATA(nid)->bdata = &node_bdata[nid];
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)->bdata is at 0x%p\n", nid, NODE_DATA(nid)->bdata);
@@ -149,15 +157,15 @@ setup_memory_node(int nid, void *kernel_end)
end_kernel_pfn = PFN_UP(virt_to_phys(kernel_end));
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");
/* 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'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. */
for_each_mem_cluster(memdesc, cluster, i) {
@@ -167,13 +175,13 @@ setup_memory_node(int nid, void *kernel_end)
start = cluster->start_pfn;
end = start + cluster->numpages;
- if (start >= max_low_pfn || end <= min_low_pfn)
+ if (start >= node_max_pfn || end <= node_min_pfn)
continue;
- if (end > max_low_pfn)
- end = max_low_pfn;
- if (start < min_low_pfn)
- start = min_low_pfn;
+ if (end > node_max_pfn)
+ end = node_max_pfn;
+ if (start < node_min_pfn)
+ start = node_min_pfn;
if (start < start_kernel_pfn) {
if (end > end_kernel_pfn
@@ -195,7 +203,7 @@ setup_memory_node(int nid, void *kernel_end)
/* Allocate the bootmap and mark the whole MM as reserved. */
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",
bootmap_start, bootmap_size, bootmap_pages);
@@ -207,13 +215,13 @@ setup_memory_node(int nid, void *kernel_end)
start = cluster->start_pfn;
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;
- if (end > max_low_pfn)
- end = max_low_pfn;
- if (start < min_low_pfn)
- start = min_low_pfn;
+ if (end > node_max_pfn)
+ end = node_max_pfn;
+ if (start < node_min_pfn)
+ start = node_min_pfn;
if (start < start_kernel_pfn) {
if (end > end_kernel_pfn) {
@@ -249,6 +257,9 @@ setup_memory(void *kernel_end)
show_mem_layout();
numnodes = 0;
+
+ min_low_pfn = ~0UL;
+ max_low_pfn = 0UL;
for (nid = 0; nid < MAX_NUMNODES; nid++)
setup_memory_node(nid, kernel_end);
diff --git a/arch/arm/common/sa1111-pcibuf.c b/arch/arm/common/sa1111-pcibuf.c
index 05acb901c3b5..06e66a58728c 100644
--- a/arch/arm/common/sa1111-pcibuf.c
+++ b/arch/arm/common/sa1111-pcibuf.c
@@ -54,7 +54,7 @@ struct safe_buffer {
dma_addr_t safe_dma_addr;
};
-LIST_HEAD(safe_buffers);
+static LIST_HEAD(safe_buffers);
#define SIZE_SMALL 1024
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index 038101ed24a6..f6b61ce5d8c3 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -218,7 +218,7 @@ static void sa1111_unmask_lowirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get
* 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);
int i;
@@ -233,6 +233,7 @@ static void sa1111_rerun_lowirq(unsigned int irq)
if (i == 8)
printk(KERN_ERR "Danger Will Robinson: failed to "
"re-trigger IRQ%d\n", irq);
+ return i == 8 ? -1 : 0;
}
static int sa1111_type_lowirq(unsigned int irq, unsigned int flags)
@@ -270,7 +271,7 @@ static struct irqchip sa1111_low_chip = {
.ack = sa1111_ack_irq,
.mask = sa1111_mask_lowirq,
.unmask = sa1111_unmask_lowirq,
- .rerun = sa1111_rerun_lowirq,
+ .retrigger = sa1111_retrigger_lowirq,
.type = sa1111_type_lowirq,
.wake = sa1111_wake_lowirq,
};
@@ -292,7 +293,7 @@ static void sa1111_unmask_highirq(unsigned int irq)
* be triggered. In fact, its very difficult, if not impossible to get
* 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);
int i;
@@ -307,6 +308,7 @@ static void sa1111_rerun_highirq(unsigned int irq)
if (i == 8)
printk(KERN_ERR "Danger Will Robinson: failed to "
"re-trigger IRQ%d\n", irq);
+ return i == 8 ? -1 : 0;
}
static int sa1111_type_highirq(unsigned int irq, unsigned int flags)
@@ -344,7 +346,7 @@ static struct irqchip sa1111_high_chip = {
.ack = sa1111_ack_irq,
.mask = sa1111_mask_highirq,
.unmask = sa1111_unmask_highirq,
- .rerun = sa1111_rerun_highirq,
+ .retrigger = sa1111_retrigger_highirq,
.type = sa1111_type_highirq,
.wake = sa1111_wake_highirq,
};
diff --git a/arch/arm/def-configs/epxa10db b/arch/arm/def-configs/epxa10db
index 5440be8aa9bf..87e9c7c2d752 100644
--- a/arch/arm/def-configs/epxa10db
+++ b/arch/arm/def-configs/epxa10db
@@ -1,27 +1,31 @@
#
-# Automatically generated by make menuconfig: don't edit
+# Automatically generated make config: don't edit
#
CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
+CONFIG_MMU=y
+CONFIG_SWAP=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
+
+#
+# General setup
+#
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_LOG_BUF_SHIFT=14
#
# Loadable module support
#
CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
# CONFIG_KMOD is not set
#
@@ -33,6 +37,7 @@ CONFIG_MODULES=y
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_EBSA110 is not set
CONFIG_ARCH_CAMELOT=y
# CONFIG_ARCH_FOOTBRIDGE is not set
@@ -46,106 +51,71 @@ CONFIG_ARCH_CAMELOT=y
#
# Archimedes/A5000 Implementations
#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
+#
+
+#
+# CLPS711X/EP721X Implementations
+#
+
+#
+# Epxa10db
+#
+
+#
+# PLD hotswap support
+#
+CONFIG_PLD=y
+# CONFIG_PLD_HOTSWAP is not set
#
# Footbridge Implementations
#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
+
+#
+# IOP310 Implementation Options
+#
+
+#
+# IOP310 Chipset Features
+#
+
+#
+# Intel PXA250/210 Implementations
+#
#
# SA11x0 Implementations
#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_H3XXX is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-# CONFIG_SA1100_USB is not set
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-# CONFIG_H3600_SLEEVE is not set
#
-# CLPS711X/EP721X Implementations
+# Processor Type
#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_32v3 is not set
-CONFIG_CPU_32v4=y
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
CONFIG_CPU_ARM922T=y
-CONFIG_CPU_ARM922_CPU_IDLE=y
-CONFIG_CPU_ARM922_I_CACHE_ON=y
-CONFIG_CPU_ARM922_D_CACHE_ON=y
-# CONFIG_CPU_ARM922_WRITETHROUGH is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_SA110 is not set
-# CONFIG_CPU_SA1100 is not set
-# CONFIG_XSCALE_PMU is not set
+CONFIG_CPU_32v4=y
+
+#
+# Processor Features
+#
# CONFIG_ARM_THUMB is not set
-# CONFIG_DISCONTIGMEM is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
#
# General setup
#
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_FIQ is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_HOTPLUG is not set
-# CONFIG_PCMCIA is not set
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+
+#
+# At least one math emulation must be selected
+#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_FASTFPE is not set
CONFIG_KCORE_ELF=y
@@ -154,7 +124,7 @@ CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PM is not set
-# CONFIG_APM is not set
+# CONFIG_PREEMPT is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="mem=32M console=ttyUA0,38400 root=/dev/mtdblock0 rw"
CONFIG_ALIGNMENT_TRAP=y
@@ -171,9 +141,14 @@ CONFIG_MTD=y
CONFIG_MTD_DEBUG=y
CONFIG_MTD_DEBUG_VERBOSE=0
CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_BOOTLDR_PARTS=y
+# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
@@ -192,9 +167,6 @@ CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
#
# Mapping drivers for chip access
@@ -202,24 +174,23 @@ CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_NORA is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
CONFIG_MTD_EPXA10DB=y
-# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_UCLINUX is not set
#
# Self-contained MTD device drivers
#
-# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
# CONFIG_MTD_DOC1000 is not set
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOCPROBE is not set
#
# NAND Flash Device Drivers
@@ -227,21 +198,14 @@ CONFIG_MTD_EPXA10DB=y
# CONFIG_MTD_NAND is not set
#
-# Plug and Play configuration
+# Plug and Play support
#
# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
CONFIG_BLK_DEV_RAM=y
@@ -252,23 +216,22 @@ CONFIG_BLK_DEV_RAM_SIZE=8192
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking support
+#
+CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK is not set
+# CONFIG_NETLINK_DEV is not set
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -278,19 +241,26 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_XFRM_USER is not set
# CONFIG_IPV6 is not set
-# CONFIG_KHTTPD is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+CONFIG_IPV6_SCTP__=y
+# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
+# CONFIG_LLC is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -303,54 +273,27 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_NET_SCHED is not set
#
-# Network device support
+# Network testing
#
+# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
-# CONFIG_ARM_AM79C961A is not set
CONFIG_ETHER00=m
-# CONFIG_SUNLANCE is not set
-# CONFIG_SUNBMAC is not set
-# CONFIG_SUNQE is not set
-# CONFIG_SUNLANCE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-# CONFIG_NET_POCKET is not set
#
# Ethernet (1000 Mbit)
#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
# CONFIG_PPP_DEFLATE is not set
@@ -364,11 +307,8 @@ CONFIG_PPP_SYNC_TTY=y
# CONFIG_NET_RADIO is not set
#
-# Token Ring devices
+# Token Ring devices (depends on LLC=y)
#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
#
@@ -377,21 +317,19 @@ CONFIG_PPP_SYNC_TTY=y
# CONFIG_WAN is not set
#
-# Amateur Radio support
+# IrDA (infrared) support
#
-# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
#
-# IrDA (infrared) support
+# Amateur Radio support
#
-# CONFIG_IRDA is not set
+# CONFIG_HAMRADIO is not set
#
-# ATA/IDE/MFM/RLL support
+# ATA/ATAPI/MFM/RLL support
#
# CONFIG_IDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
#
# SCSI support
@@ -402,59 +340,48 @@ CONFIG_PPP_SYNC_TTY=y
# I2O device support
#
# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
#
# ISDN subsystem
#
-# CONFIG_ISDN is not set
+# CONFIG_ISDN_BOOL is not set
#
-# Input core support
+# Input device support
#
# CONFIG_INPUT is not set
-# CONFIG_INPUT_KEYBDEV is not set
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_EVDEV is not set
+
+#
+# Userland interfaces
+#
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+# CONFIG_SERIO is not set
+
+#
+# Input Device Drivers
+#
#
# Character devices
#
-# CONFIG_VT is not set
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_DZ is not set
CONFIG_SERIAL_UART00=y
CONFIG_SERIAL_UART00_CONSOLE=y
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_ATOMWIDE_SERIAL is not set
-# CONFIG_DUALSP_SERIAL is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_RSA is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
@@ -466,33 +393,36 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_I2C is not set
#
+# I2C Hardware Sensors Mainboard support
+#
+
+#
+# I2C Hardware Sensors Chip support
+#
+
+#
# L3 serial bus support
#
# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_BIT_SA1100_GPIO is not set
#
# Mice
#
# CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
+# CONFIG_QIC02_TAPE is not set
#
-# Joysticks
+# IPMI
#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
@@ -503,6 +433,7 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
#
# Multimedia devices
@@ -516,50 +447,39 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
+# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
-# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
-# CONFIG_MSDOS_FS is not set
-# CONFIG_UMSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
+# CONFIG_JFFS2_FS_NAND is not set
# CONFIG_CRAMFS is not set
CONFIG_TMPFS=y
CONFIG_RAMFS=y
# CONFIG_ISO9660_FS is not set
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
+# CONFIG_JFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVFS_MOUNT is not set
-# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
CONFIG_ROMFS_FS=y
CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_XFS_FS is not set
#
# Network File Systems
@@ -568,107 +488,52 @@ CONFIG_EXT2_FS=y
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
# CONFIG_ROOT_NFS is not set
# CONFIG_NFSD is not set
-# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_GSS is not set
CONFIG_LOCKD=y
+# CONFIG_EXPORTFS is not set
+# CONFIG_CIFS is not set
# CONFIG_SMB_FS is not set
# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-# CONFIG_ZLIB_FS_INFLATE is not set
+# CONFIG_AFS_FS is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_SMB_NLS is not set
-# CONFIG_NLS is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Misc devices
+#
#
# Multimedia Capabilities Port drivers
#
# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
+
+#
+# Console Switches
+#
+# CONFIG_SWITCHES is not set
#
# USB support
#
-# CONFIG_USB is not set
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-# CONFIG_USB_OHCI is not set
-# CONFIG_USB_OHCI_SA1111 is not set
-# CONFIG_USB_AUDIO is not set
-# CONFIG_USB_BLUETOOTH is not set
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CDCETHER is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
#
# Bluetooth support
@@ -681,19 +546,21 @@ CONFIG_MSDOS_PARTITION=y
CONFIG_FRAME_POINTER=y
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
+
+#
+# Security options
+#
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
#
# Library routines
#
# CONFIG_CRC32 is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/arch/arm/kernel/init_task.c b/arch/arm/kernel/init_task.c
index e1c830d099d5..a8371b453b53 100644
--- a/arch/arm/kernel/init_task.c
+++ b/arch/arm/kernel/init_task.c
@@ -13,6 +13,7 @@
static struct fs_struct init_fs = INIT_FS;
static struct files_struct init_files = INIT_FILES;
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);
/*
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index 054be68a77eb..74f4c0bbc725 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -29,6 +29,7 @@
#include <linux/init.h>
#include <linux/seq_file.h>
#include <linux/errno.h>
+#include <linux/list.h>
#include <asm/irq.h>
#include <asm/system.h>
@@ -45,6 +46,7 @@
static volatile unsigned long irq_err_count;
static spinlock_t irq_controller_lock;
+static LIST_HEAD(irq_pending);
struct irqdesc irq_desc[NR_IRQS];
void (*init_arch_irq)(void) __initdata = NULL;
@@ -69,9 +71,10 @@ static struct irqchip bad_chip = {
};
static struct irqdesc bad_irq_desc = {
- .chip = &bad_chip,
- .handle = do_bad_IRQ,
- .depth = 1,
+ .chip = &bad_chip,
+ .handle = do_bad_IRQ,
+ .pend = LIST_HEAD_INIT(bad_irq_desc.pend),
+ .disable_depth = 1,
};
/**
@@ -90,6 +93,7 @@ void disable_irq(unsigned int irq)
spin_lock_irqsave(&irq_controller_lock, flags);
desc->disable_depth++;
+ list_del_init(&desc->pend);
spin_unlock_irqrestore(&irq_controller_lock, flags);
}
@@ -122,9 +126,11 @@ void enable_irq(unsigned int irq)
* from here since the caller might be in an
* interrupt-protected region.
*/
- if (desc->pending) {
+ if (desc->pending && list_empty(&desc->pend)) {
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);
@@ -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
* come via this function. Instead, they should provide their
@@ -365,6 +405,13 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
irq_enter();
spin_lock(&irq_controller_lock);
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);
irq_exit();
}
@@ -740,8 +787,10 @@ void __init init_IRQ(void)
extern void init_dma(void);
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;
+ INIT_LIST_HEAD(&desc->pend);
+ }
init_arch_irq();
init_dma();
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index 7fd91413caca..eee41a18b7e4 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -446,7 +446,7 @@ void ptrace_set_bpt(struct task_struct *child)
* Ensure no single-step breakpoint is pending. Returns non-zero
* 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;
@@ -468,7 +468,8 @@ void __ptrace_cancel_bpt(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)
if (tsk->thread.debug.nsaved == 0)
printk(KERN_ERR "ptrace: bogus breakpoint trap\n");
- __ptrace_cancel_bpt(tsk);
+ ptrace_cancel_bpt(tsk);
info.si_signo = SIGTRAP;
info.si_errno = 0;
@@ -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);
child->exit_code = data;
/* make sure single-step breakpoint is gone. */
- __ptrace_cancel_bpt(child);
+ child->ptrace &= ~PT_SINGLESTEP;
+ ptrace_cancel_bpt(child);
wake_up_process(child);
ret = 0;
break;
@@ -649,7 +651,8 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
*/
case PTRACE_KILL:
/* make sure single-step breakpoint is gone. */
- __ptrace_cancel_bpt(child);
+ child->ptrace &= ~PT_SINGLESTEP;
+ ptrace_cancel_bpt(child);
if (child->state != TASK_ZOMBIE) {
child->exit_code = SIGKILL;
wake_up_process(child);
@@ -664,7 +667,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
ret = -EIO;
if ((unsigned long) data > _NSIG)
break;
- child->thread.debug.nsaved = -1;
+ child->ptrace |= PT_SINGLESTEP;
clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
child->exit_code = data;
/* give it a chance to run. */
diff --git a/arch/arm/kernel/ptrace.h b/arch/arm/kernel/ptrace.h
index 48434fe2a90b..f7cad13a22e9 100644
--- a/arch/arm/kernel/ptrace.h
+++ b/arch/arm/kernel/ptrace.h
@@ -1,26 +1,12 @@
/*
* 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
* it under the terms of the GNU General Public License version 2 as
* 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_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;
-}
-
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index e5903e79021d..65f00dc85bbe 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -216,8 +216,10 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
goto badframe;
/* 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);
+ }
return regs->ARM_r0;
@@ -256,8 +258,10 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
goto badframe;
/* 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);
+ }
return regs->ARM_r0;
@@ -441,19 +445,48 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
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
*/
static void
-handle_signal(unsigned long sig, struct k_sigaction *ka,
- siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
+handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
+ struct pt_regs * regs, int syscall)
{
struct thread_info *thread = current_thread_info();
struct task_struct *tsk = current;
+ struct k_sigaction *ka = &tsk->sighand->action[sig-1];
int usig = sig;
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
*/
if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap)
@@ -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)
{
siginfo_t info;
- int single_stepping;
+ int signr;
/*
* 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)
if (!user_mode(regs))
return 0;
- single_stepping = 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_SINGLESTEP)
+ ptrace_cancel_bpt(current);
- if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
- /* Let the debugger run. */
- current->exit_code = signr;
- set_current_state(TASK_STOPPED);
- notify_parent(current, SIGCHLD);
- 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);
+ signr = get_signal_to_deliver(&info, regs, NULL);
+ if (signr > 0) {
+ handle_signal(signr, &info, oldset, regs, syscall);
+ if (current->ptrace & PT_SINGLESTEP)
+ ptrace_set_bpt(current);
return 1;
}
@@ -668,11 +585,10 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
if (regs->ARM_r0 == -ERESTARTNOHAND ||
regs->ARM_r0 == -ERESTARTSYS ||
regs->ARM_r0 == -ERESTARTNOINTR) {
- regs->ARM_r0 = regs->ARM_ORIG_r0;
- regs->ARM_pc -= 4;
+ restart_syscall(regs);
}
}
- if (single_stepping)
+ if (current->ptrace & PT_SINGLESTEP)
ptrace_set_bpt(current);
return 0;
}
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 20cbe15b14d1..ad0516f80f61 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -52,9 +52,14 @@ static const char *handler[]= { "prefetch abort", "data abort", "address excepti
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);
- print_symbol(" %s", where);
- printk("\n");
+#endif
}
/*
@@ -503,11 +508,11 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
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);
if (data)
- printk(KERN_CRIT" - extra data = %p", data);
+ printk(" - extra data = %p", data);
printk("\n");
*(int *)0 = 0;
}
diff --git a/arch/arm/lib/backtrace.S b/arch/arm/lib/backtrace.S
index b158ee7982cf..eef83e76eb18 100644
--- a/arch/arm/lib/backtrace.S
+++ b/arch/arm/lib/backtrace.S
@@ -82,11 +82,20 @@ ENTRY(c_backtrace)
teq r3, r2
bleq .Ldumpstm
- teq frame, next
- movne frame, next
- teqne frame, #0
- bne 3b
- LOADREGS(fd, sp!, {r4 - r8, pc})
+ /*
+ * A zero next framepointer means we're done.
+ */
+ teq next, #0
+ 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
diff --git a/arch/arm/mach-epxa10db/irq.c b/arch/arm/mach-epxa10db/irq.c
index 440ad3ef12a8..9bf927e13309 100644
--- a/arch/arm/mach-epxa10db/irq.c
+++ b/arch/arm/mach-epxa10db/irq.c
@@ -19,6 +19,9 @@
*/
#include <linux/init.h>
#include <linux/ioport.h>
+#include <linux/stddef.h>
+#include <linux/timer.h>
+#include <linux/list.h>
#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/irq.h>
diff --git a/arch/arm/mach-footbridge/irq.c b/arch/arm/mach-footbridge/irq.c
index d4d2662ab040..0889cb86e161 100644
--- a/arch/arm/mach-footbridge/irq.c
+++ b/arch/arm/mach-footbridge/irq.c
@@ -15,6 +15,7 @@
* 16-Mar-1999 RMK Added autodetect of ISA PICs
*/
#include <linux/ioport.h>
+#include <linux/list.h>
#include <linux/init.h>
#include <asm/mach/irq.h>
diff --git a/arch/arm/mach-footbridge/isa-irq.c b/arch/arm/mach-footbridge/isa-irq.c
index 1f021054d732..4320bcb23085 100644
--- a/arch/arm/mach-footbridge/isa-irq.c
+++ b/arch/arm/mach-footbridge/isa-irq.c
@@ -16,6 +16,7 @@
*/
#include <linux/ioport.h>
#include <linux/interrupt.h>
+#include <linux/list.h>
#include <linux/init.h>
#include <asm/mach/irq.h>
diff --git a/arch/arm/mach-iop310/iop310-irq.c b/arch/arm/mach-iop310/iop310-irq.c
index 67639c9142cc..f30219db9d19 100644
--- a/arch/arm/mach-iop310/iop310-irq.c
+++ b/arch/arm/mach-iop310/iop310-irq.c
@@ -15,6 +15,7 @@
*/
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/irq.h>
diff --git a/arch/arm/mach-iop310/iop310-pci.c b/arch/arm/mach-iop310/iop310-pci.c
index d5585f12430c..3cf19682f279 100644
--- a/arch/arm/mach-iop310/iop310-pci.c
+++ b/arch/arm/mach-iop310/iop310-pci.c
@@ -360,6 +360,8 @@ int iop310_setup(int nr, struct pci_sys_data *sys)
if (!res)
panic("PCI: unable to alloc resources");
+ memset(res, 0, sizeof(struct resource) * 2);
+
switch (nr) {
case 0:
res[0].start = IOP310_PCIPRI_LOWER_IO + 0x6e000000;
diff --git a/arch/arm/mach-iop310/iq80310-irq.c b/arch/arm/mach-iop310/iq80310-irq.c
index 7fdd36e1c1f4..674868193728 100644
--- a/arch/arm/mach-iop310/iq80310-irq.c
+++ b/arch/arm/mach-iop310/iq80310-irq.c
@@ -15,6 +15,7 @@
* Fixes for various revision boards - DS
*/
#include <linux/init.h>
+#include <linux/list.h>
#include <asm/irq.h>
#include <asm/mach/irq.h>
diff --git a/arch/arm/mach-iop310/xs80200-irq.c b/arch/arm/mach-iop310/xs80200-irq.c
index d5d5784df8f8..8c030039ccc6 100644
--- a/arch/arm/mach-iop310/xs80200-irq.c
+++ b/arch/arm/mach-iop310/xs80200-irq.c
@@ -11,6 +11,7 @@
* published by the Free Software Foundation.
*/
#include <linux/init.h>
+#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/irq.h>
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c
index 81c6e8a72496..698d8bbf090c 100644
--- a/arch/arm/mach-pxa/irq.c
+++ b/arch/arm/mach-pxa/irq.c
@@ -86,19 +86,6 @@ static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
}
/*
- * 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.
*/
@@ -111,7 +98,6 @@ static struct irqchip pxa_low_gpio_chip = {
.ack = pxa_ack_low_gpio,
.mask = pxa_mask_irq,
.unmask = pxa_unmask_irq,
- .rerun = pxa_manual_rerun,
.type = pxa_gpio_irq_type,
};
diff --git a/arch/arm/mach-rpc/irq.c b/arch/arm/mach-rpc/irq.c
index 4c137511f01d..56b2716f8cf5 100644
--- a/arch/arm/mach-rpc/irq.c
+++ b/arch/arm/mach-rpc/irq.c
@@ -1,4 +1,5 @@
#include <linux/init.h>
+#include <linux/list.h>
#include <asm/mach/irq.h>
#include <asm/hardware/iomd.h>
diff --git a/arch/arm/mach-sa1100/irq.c b/arch/arm/mach-sa1100/irq.c
index 794734139372..87e4f29511a9 100644
--- a/arch/arm/mach-sa1100/irq.c
+++ b/arch/arm/mach-sa1100/irq.c
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/ioport.h>
#include <linux/ptrace.h>
+#include <linux/device.h>
#include <asm/hardware.h>
#include <asm/irq.h>
@@ -24,20 +25,12 @@
/*
* SA1100 GPIO edge detection for IRQs:
* 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.
*/
static int GPIO_IRQ_rising_edge;
static int GPIO_IRQ_falling_edge;
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
*/
@@ -105,7 +98,6 @@ static struct irqchip sa1100_low_gpio_chip = {
.ack = sa1100_low_gpio_ack,
.mask = sa1100_low_gpio_mask,
.unmask = sa1100_low_gpio_unmask,
- .rerun = sa1100_manual_rerun,
.type = sa1100_gpio_type,
.wake = sa1100_low_gpio_wake,
};
@@ -189,7 +181,6 @@ static struct irqchip sa1100_high_gpio_chip = {
.ack = sa1100_high_gpio_ack,
.mask = sa1100_high_gpio_mask,
.unmask = sa1100_high_gpio_unmask,
- .rerun = sa1100_manual_rerun,
.type = sa1100_gpio_type,
.wake = sa1100_high_gpio_wake,
};
@@ -212,7 +203,6 @@ static struct irqchip sa1100_normal_chip = {
.ack = sa1100_mask_irq,
.mask = sa1100_mask_irq,
.unmask = sa1100_unmask_irq,
- /* rerun should never be called */
};
static struct resource irq_resource = {
@@ -267,10 +257,4 @@ void __init sa1100_init_irq(void)
*/
set_irq_chip(IRQ_GPIO11_27, &sa1100_normal_chip);
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*/);
}
diff --git a/arch/arm/mach-sa1100/xp860.c b/arch/arm/mach-sa1100/xp860.c
index 46170858675b..35fc6b833a72 100644
--- a/arch/arm/mach-sa1100/xp860.c
+++ b/arch/arm/mach-sa1100/xp860.c
@@ -15,9 +15,9 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
+#include <asm/hardware/sa1111.h>
#include "generic.h"
-#include "sa1111.h"
static void xp860_power_off(void)
diff --git a/arch/arm/mm/consistent.c b/arch/arm/mm/consistent.c
index 897669e0e5bf..d67ce3eb8029 100644
--- a/arch/arm/mm/consistent.c
+++ b/arch/arm/mm/consistent.c
@@ -83,7 +83,7 @@ static void vm_region_dump(struct vm_region *head, char *fn)
struct vm_region *c;
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,
c->vm_start, c->vm_end, c->vm_end - c->vm_start);
}
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S
index de8d0a72c495..2e96fd8178f7 100644
--- a/arch/arm/mm/proc-xscale.S
+++ b/arch/arm/mm/proc-xscale.S
@@ -678,7 +678,7 @@ __xscale_setup:
mcr p15, 0, r0, c15, c1, 0 @ affects USR or SVC modes
mrc p15, 0, r0, c1, c0, 0 @ get control register
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, #0x3900 @ ..VI Z..S .... ....
mov pc, lr
diff --git a/arch/arm/vmlinux-armv.lds.in b/arch/arm/vmlinux-armv.lds.in
index 572fb3524703..242937274c7c 100644
--- a/arch/arm/vmlinux-armv.lds.in
+++ b/arch/arm/vmlinux-armv.lds.in
@@ -7,7 +7,11 @@
OUTPUT_ARCH(arm)
ENTRY(stext)
+#ifndef __ARMEB__
jiffies = jiffies_64;
+#else
+jiffies = jiffies_64 + 4;
+#endif
SECTIONS
{
. = TEXTADDR;
diff --git a/arch/cris/drivers/eeprom.c b/arch/cris/drivers/eeprom.c
index 4936d7bfc3f3..82028175b927 100644
--- a/arch/cris/drivers/eeprom.c
+++ b/arch/cris/drivers/eeprom.c
@@ -207,7 +207,7 @@ int __init eeprom_init(void)
* it will mirror the address space:
* 1. We read two locations (that are mirrored),
* 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,
* restore original data.
*/
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index f9934af388ed..c6d707e5bdf3 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -36,6 +36,7 @@
#include <linux/mc146818rtc.h>
#include <linux/module.h>
#include <linux/kallsyms.h>
+#include <linux/ptrace.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
index 234ced527110..bca393dbee66 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -24,6 +24,7 @@
#include <linux/interrupt.h>
#include <linux/highmem.h>
#include <linux/kallsyms.h>
+#include <linux/ptrace.h>
#ifdef CONFIG_EISA
#include <linux/ioport.h>
diff --git a/arch/i386/kernel/vm86.c b/arch/i386/kernel/vm86.c
index 269cf00ddf4e..ea5b776be202 100644
--- a/arch/i386/kernel/vm86.c
+++ b/arch/i386/kernel/vm86.c
@@ -40,6 +40,7 @@
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/highmem.h>
+#include <linux/ptrace.h>
#include <asm/uaccess.h>
#include <asm/pgalloc.h>
diff --git a/arch/i386/mach-voyager/voyager_thread.c b/arch/i386/mach-voyager/voyager_thread.c
index c82afd309f4b..6f74f51992fb 100644
--- a/arch/i386/mach-voyager/voyager_thread.c
+++ b/arch/i386/mach-voyager/voyager_thread.c
@@ -57,7 +57,7 @@ voyager_thread_start(void)
}
static int
-execute_helper(void *string)
+execute(const char *string)
{
int ret;
@@ -74,23 +74,14 @@ execute_helper(void *string)
NULL,
};
- if((ret = exec_usermodehelper(argv[0], argv, envp)) < 0) {
- printk(KERN_ERR "Voyager failed to execute \"%s\"\n",
- (char *)string);
+ if ((ret = call_usermodehelper(argv[0], argv, envp, 1)) != 0) {
+ printk(KERN_ERR "Voyager failed to run \"%s\": %i\n",
+ string, 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
check_from_kernel(void)
{
if(voyager_status.switch_off) {
diff --git a/arch/i386/math-emu/fpu_entry.c b/arch/i386/math-emu/fpu_entry.c
index c37a93bea50b..baebe5c08da7 100644
--- a/arch/i386/math-emu/fpu_entry.c
+++ b/arch/i386/math-emu/fpu_entry.c
@@ -25,6 +25,7 @@
+---------------------------------------------------------------------------*/
#include <linux/signal.h>
+#include <linux/ptrace.h>
#include <asm/uaccess.h>
#include <asm/desc.h>
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
index 65860c3865a5..3fa05f5351b4 100644
--- a/arch/m68k/kernel/traps.c
+++ b/arch/m68k/kernel/traps.c
@@ -29,6 +29,7 @@
#include <linux/string.h>
#include <linux/linkage.h>
#include <linux/init.h>
+#include <linux/ptrace.h>
#include <asm/setup.h>
#include <asm/fpu.h>
diff --git a/arch/m68knommu/kernel/asm-offsets.c b/arch/m68knommu/kernel/asm-offsets.c
index 8c81e421a030..c803fe64e2ce 100644
--- a/arch/m68knommu/kernel/asm-offsets.c
+++ b/arch/m68knommu/kernel/asm-offsets.c
@@ -11,6 +11,7 @@
#include <linux/stddef.h>
#include <linux/sched.h>
#include <linux/kernel_stat.h>
+#include <linux/ptrace.h>
#include <asm/bootinfo.h>
#include <asm/irq.h>
#include <asm/hardirq.h>
diff --git a/arch/m68knommu/kernel/traps.c b/arch/m68knommu/kernel/traps.c
index 45283b564eb8..7373bbf38db6 100644
--- a/arch/m68knommu/kernel/traps.c
+++ b/arch/m68knommu/kernel/traps.c
@@ -27,6 +27,7 @@
#include <linux/string.h>
#include <linux/linkage.h>
#include <linux/init.h>
+#include <linux/ptrace.h>
#include <asm/setup.h>
#include <asm/fpu.h>
diff --git a/arch/mips/ddb5xxx/common/nile4.c b/arch/mips/ddb5xxx/common/nile4.c
index e8a8d013bba3..a9e8110d4793 100644
--- a/arch/mips/ddb5xxx/common/nile4.c
+++ b/arch/mips/ddb5xxx/common/nile4.c
@@ -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
* after writing it. This ensures that address decoders are properly
* configured.
- * [jsun] is this really necesary?
+ * [jsun] is this really necessary?
*/
ddb_in32(pdar);
ddb_in32(pdar + 4);
diff --git a/arch/mips/kernel/irixsig.c b/arch/mips/kernel/irixsig.c
index cc687306facc..088f746119c6 100644
--- a/arch/mips/kernel/irixsig.c
+++ b/arch/mips/kernel/irixsig.c
@@ -12,6 +12,7 @@
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/time.h>
+#include <linux/ptrace.h>
#include <asm/ptrace.h>
#include <asm/uaccess.h>
diff --git a/arch/mips/kernel/sysmips.c b/arch/mips/kernel/sysmips.c
index f8664242b8d7..5a21cd0083e9 100644
--- a/arch/mips/kernel/sysmips.c
+++ b/arch/mips/kernel/sysmips.c
@@ -16,6 +16,7 @@
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/utsname.h>
+#include <linux/ptrace.h>
#include <asm/cachectl.h>
#include <asm/pgalloc.h>
diff --git a/arch/parisc/hpux/fs.c b/arch/parisc/hpux/fs.c
index afe8ae65540f..c22c789091e1 100644
--- a/arch/parisc/hpux/fs.c
+++ b/arch/parisc/hpux/fs.c
@@ -9,6 +9,7 @@
#include <linux/file.h>
#include <linux/smp_lock.h>
#include <linux/slab.h>
+#include <linux/ptrace.h>
#include <asm/errno.h>
#include <asm/uaccess.h>
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c
index 3e2d0013d340..4d6a5cf7dd21 100644
--- a/arch/parisc/kernel/sys_parisc32.c
+++ b/arch/parisc/kernel/sys_parisc32.c
@@ -53,6 +53,7 @@
#include <linux/binfmts.h>
#include <linux/namei.h>
#include <linux/vfs.h>
+#include <linux/ptrace.h>
#include <asm/types.h>
#include <asm/uaccess.h>
diff --git a/arch/ppc/boot/common/cpc700_memory.c b/arch/ppc/boot/common/cpc700_memory.c
index 3f30b8b161a9..8c75cf6c2383 100644
--- a/arch/ppc/boot/common/cpc700_memory.c
+++ b/arch/ppc/boot/common/cpc700_memory.c
@@ -6,7 +6,7 @@
* Author: Dan Cox
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/common/misc-common.c b/arch/ppc/boot/common/misc-common.c
index 006f6eeab696..235d8c54843f 100644
--- a/arch/ppc/boot/common/misc-common.c
+++ b/arch/ppc/boot/common/misc-common.c
@@ -9,7 +9,7 @@
* Derived from arch/ppc/boot/prep/misc.c
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/common/mpc10x_memory.c b/arch/ppc/boot/common/mpc10x_memory.c
index 79ab3887aa67..12bf9cb7ee64 100644
--- a/arch/ppc/boot/common/mpc10x_memory.c
+++ b/arch/ppc/boot/common/mpc10x_memory.c
@@ -10,7 +10,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/common/util.S b/arch/ppc/boot/common/util.S
index c4cd43dbb6c1..9d3b34de0b87 100644
--- a/arch/ppc/boot/common/util.S
+++ b/arch/ppc/boot/common/util.S
@@ -15,7 +15,7 @@
* Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/include/mpc10x.h b/arch/ppc/boot/include/mpc10x.h
index 9f5c73dde9e9..6cd40ecabc74 100644
--- a/arch/ppc/boot/include/mpc10x.h
+++ b/arch/ppc/boot/include/mpc10x.h
@@ -13,7 +13,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/simple/Makefile b/arch/ppc/boot/simple/Makefile
index 40cd523f7587..7ae3a2a17273 100644
--- a/arch/ppc/boot/simple/Makefile
+++ b/arch/ppc/boot/simple/Makefile
@@ -4,7 +4,7 @@
# Author: Tom Rini <trini@mvista.com>
#
# 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
# or implied.
#
diff --git a/arch/ppc/boot/simple/gt64260_tty.c b/arch/ppc/boot/simple/gt64260_tty.c
index ea0e30c2ce9d..1aa1dfc450eb 100644
--- a/arch/ppc/boot/simple/gt64260_tty.c
+++ b/arch/ppc/boot/simple/gt64260_tty.c
@@ -7,7 +7,7 @@
* Author: Mark A. Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/simple/head.S b/arch/ppc/boot/simple/head.S
index 5850de282c5c..d4d2dbf016c2 100644
--- a/arch/ppc/boot/simple/head.S
+++ b/arch/ppc/boot/simple/head.S
@@ -8,7 +8,7 @@
* Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/simple/misc-ev64260.S b/arch/ppc/boot/simple/misc-ev64260.S
index 805504845554..9b48a521c79d 100644
--- a/arch/ppc/boot/simple/misc-ev64260.S
+++ b/arch/ppc/boot/simple/misc-ev64260.S
@@ -7,7 +7,7 @@
* Author: Mark Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/simple/misc-spruce.c b/arch/ppc/boot/simple/misc-spruce.c
index f949cd68a987..0cb3baa5c89f 100644
--- a/arch/ppc/boot/simple/misc-spruce.c
+++ b/arch/ppc/boot/simple/misc-spruce.c
@@ -9,7 +9,7 @@
* Derived from arch/ppc/boot/prep/misc.c
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/simple/misc.c b/arch/ppc/boot/simple/misc.c
index 6b2909ed4eae..8d39708a041e 100644
--- a/arch/ppc/boot/simple/misc.c
+++ b/arch/ppc/boot/simple/misc.c
@@ -11,7 +11,7 @@
* Derived from arch/ppc/boot/prep/misc.c
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/simple/relocate.S b/arch/ppc/boot/simple/relocate.S
index 976edeb662b3..36c5ad879f53 100644
--- a/arch/ppc/boot/simple/relocate.S
+++ b/arch/ppc/boot/simple/relocate.S
@@ -10,7 +10,7 @@
* Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/utils/addnote.c b/arch/ppc/boot/utils/addnote.c
index b2374df7c1d9..6c52b18f2d04 100644
--- a/arch/ppc/boot/utils/addnote.c
+++ b/arch/ppc/boot/utils/addnote.c
@@ -14,6 +14,7 @@
* Usage: addnote zImage
*/
#include <stdio.h>
+#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
diff --git a/arch/ppc/boot/utils/hack-coff.c b/arch/ppc/boot/utils/hack-coff.c
index 1fcff85eb807..5e5a6573a1ef 100644
--- a/arch/ppc/boot/utils/hack-coff.c
+++ b/arch/ppc/boot/utils/hack-coff.c
@@ -11,8 +11,10 @@
* 2 of the License, or (at your option) any later version.
*/
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
+#include <string.h>
#include "rs6000.h"
#define AOUT_MAGIC 0x010b
diff --git a/arch/ppc/boot/utils/mkbugboot.c b/arch/ppc/boot/utils/mkbugboot.c
index 41ef7f3408fa..eb67db150c28 100644
--- a/arch/ppc/boot/utils/mkbugboot.c
+++ b/arch/ppc/boot/utils/mkbugboot.c
@@ -7,7 +7,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/boot/utils/mknote.c b/arch/ppc/boot/utils/mknote.c
index 120cc1d89739..b9fbb2cbfc8f 100644
--- a/arch/ppc/boot/utils/mknote.c
+++ b/arch/ppc/boot/utils/mknote.c
@@ -11,6 +11,7 @@
*/
#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 );
diff --git a/arch/ppc/kernel/head_4xx.S b/arch/ppc/kernel/head_4xx.S
index 721d5d6fe800..495859bfdb38 100644
--- a/arch/ppc/kernel/head_4xx.S
+++ b/arch/ppc/kernel/head_4xx.S
@@ -923,6 +923,8 @@ initial_mmu:
ori r3,r3,KERNELBASE@l
tophys(r4,r3) /* Load the kernel physical address */
+ iccci r0,r3 /* Invalidate the i-cache before use */
+
/* Load the kernel PID.
*/
li r0,0
diff --git a/arch/ppc/kernel/irq.c b/arch/ppc/kernel/irq.c
index 87f0f6fbd59c..a2cddb7f1c60 100644
--- a/arch/ppc/kernel/irq.c
+++ b/arch/ppc/kernel/irq.c
@@ -20,7 +20,7 @@
* 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
* 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.
* Many of the prep/chrp functions are conditional compiled on CONFIG_8xx
* to reduce code space and undefined function references.
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S
index 750e43f14df0..f653bebb23d8 100644
--- a/arch/ppc/kernel/misc.S
+++ b/arch/ppc/kernel/misc.S
@@ -1273,8 +1273,8 @@ _GLOBAL(sys_call_table)
.long sys_io_getevents
.long sys_io_submit /* 230 */
.long sys_io_cancel
- .long sys_ni_syscall /* reserved for alloc_hugepages */
- .long sys_ni_syscall /* reserved for free_hugepages */
+ .long sys_set_tid_address
+ .long sys_fadvise64
.long sys_exit_group
.long sys_lookup_dcookie /* 235 */
.long sys_epoll_create
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c
index 1e2963261b93..12192810db5d 100644
--- a/arch/ppc/kernel/ppc_ksyms.c
+++ b/arch/ppc/kernel/ppc_ksyms.c
@@ -14,6 +14,7 @@
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/ide.h>
+#include <linux/pm.h>
#include <asm/page.h>
#include <asm/semaphore.h>
@@ -69,8 +70,6 @@ long long __ashldi3(long long, int);
long long __lshrdi3(long long, int);
int abs(int);
-extern unsigned char __res[];
-
extern unsigned long mm_ptov (unsigned long paddr);
EXPORT_SYMBOL(clear_page);
@@ -180,6 +179,7 @@ EXPORT_SYMBOL(pci_bus_to_phys);
EXPORT_SYMBOL(consistent_alloc);
EXPORT_SYMBOL(consistent_free);
EXPORT_SYMBOL(consistent_sync);
+EXPORT_SYMBOL(flush_dcache_all);
#endif
EXPORT_SYMBOL(open);
@@ -269,6 +269,8 @@ EXPORT_SYMBOL(pmac_xpram_write);
#endif /* CONFIG_NVRAM */
EXPORT_SYMBOL(to_tm);
+EXPORT_SYMBOL(pm_power_off);
+
EXPORT_SYMBOL_NOVERS(__ashrdi3);
EXPORT_SYMBOL_NOVERS(__ashldi3);
EXPORT_SYMBOL_NOVERS(__lshrdi3);
@@ -329,10 +331,12 @@ EXPORT_SYMBOL(debugger_fault_handler);
#endif
#ifdef CONFIG_8xx
-EXPORT_SYMBOL(__res);
EXPORT_SYMBOL(cpm_install_handler);
EXPORT_SYMBOL(cpm_free_handler);
#endif /* CONFIG_8xx */
+#if defined(CONFIG_8xx) || defined(CONFIG_4xx)
+EXPORT_SYMBOL(__res);
+#endif
#if defined(CONFIG_8xx) || defined(CONFIG_8260)
EXPORT_SYMBOL(request_8xxirq);
#endif
diff --git a/arch/ppc/kernel/process.c b/arch/ppc/kernel/process.c
index a87ad56ccc2e..0194e65053e9 100644
--- a/arch/ppc/kernel/process.c
+++ b/arch/ppc/kernel/process.c
@@ -54,6 +54,7 @@ struct task_struct *last_task_used_altivec = NULL;
static struct fs_struct init_fs = INIT_FS;
static struct files_struct init_files = INIT_FILES;
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);
/* this is 8kB-aligned so we can get to the thread_info struct
diff --git a/arch/ppc/kernel/ptrace.c b/arch/ppc/kernel/ptrace.c
index b21072890612..b7cba8a7a37e 100644
--- a/arch/ppc/kernel/ptrace.c
+++ b/arch/ppc/kernel/ptrace.c
@@ -369,11 +369,9 @@ void do_syscall_trace(void)
if (!test_thread_flag(TIF_SYSCALL_TRACE)
|| !(current->ptrace & PT_PTRACED))
return;
- current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
- ? 0x80 : 0);
- current->state = TASK_STOPPED;
- notify_parent(current, SIGCHLD);
- schedule();
+ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
+ ? 0x80 : 0));
+
/*
* 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
diff --git a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c
index ebb244e6eaa5..e729d81d3aad 100644
--- a/arch/ppc/kernel/setup.c
+++ b/arch/ppc/kernel/setup.c
@@ -129,6 +129,8 @@ void machine_halt(void)
ppc_md.halt();
}
+void (*pm_power_off)(void) = machine_power_off;
+
#ifdef CONFIG_TAU
extern u32 cpu_temp(unsigned long cpu);
extern u32 cpu_temp_both(unsigned long cpu);
diff --git a/arch/ppc/kernel/signal.c b/arch/ppc/kernel/signal.c
index e2fe74ec238b..0a624ce61320 100644
--- a/arch/ppc/kernel/signal.c
+++ b/arch/ppc/kernel/signal.c
@@ -389,7 +389,7 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
{
struct sigcontext *sc;
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! */
&& ((int)regs->result == -ERESTARTNOHAND ||
@@ -486,7 +486,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
signr = get_signal_to_deliver(&info, regs, NULL);
if (signr > 0) {
- ka = &current->sig->action[signr-1];
+ ka = &current->sighand->action[signr-1];
if ( (ka->sa.sa_flags & SA_ONSTACK)
&& (! on_sig_stack(regs->gpr[1])))
newsp = (current->sas_ss_sp + current->sas_ss_size);
diff --git a/arch/ppc/platforms/4xx/ash.c b/arch/ppc/platforms/4xx/ash.c
index b1cb7ee6c34f..02def0f94599 100644
--- a/arch/ppc/platforms/4xx/ash.c
+++ b/arch/ppc/platforms/4xx/ash.c
@@ -6,7 +6,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ash.h b/arch/ppc/platforms/4xx/ash.h
index 7a65fc6eb68d..afa00015bc0c 100644
--- a/arch/ppc/platforms/4xx/ash.h
+++ b/arch/ppc/platforms/4xx/ash.h
@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/cedar.c b/arch/ppc/platforms/4xx/cedar.c
index 1365aba8caef..c2f5c56dd967 100644
--- a/arch/ppc/platforms/4xx/cedar.c
+++ b/arch/ppc/platforms/4xx/cedar.c
@@ -6,7 +6,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/cedar.h b/arch/ppc/platforms/4xx/cedar.h
index e0289a3241b0..becb3412c91a 100644
--- a/arch/ppc/platforms/4xx/cedar.h
+++ b/arch/ppc/platforms/4xx/cedar.h
@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ep405.c b/arch/ppc/platforms/4xx/ep405.c
index e17320e63ebd..91700162e84b 100644
--- a/arch/ppc/platforms/4xx/ep405.c
+++ b/arch/ppc/platforms/4xx/ep405.c
@@ -7,7 +7,7 @@
* Author: Matthew Locke <mlocke@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ep405.h b/arch/ppc/platforms/4xx/ep405.h
index c2487cf4fa9d..ea3eb21338fb 100644
--- a/arch/ppc/platforms/4xx/ep405.h
+++ b/arch/ppc/platforms/4xx/ep405.h
@@ -7,7 +7,7 @@
* Author: Matthew Locke <mlocke@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibm405gp.c b/arch/ppc/platforms/4xx/ibm405gp.c
index d833a0766cf6..aec4ebce72b3 100644
--- a/arch/ppc/platforms/4xx/ibm405gp.c
+++ b/arch/ppc/platforms/4xx/ibm405gp.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibm405gp.h b/arch/ppc/platforms/4xx/ibm405gp.h
index 21b64857dda2..ae2fe03d31f1 100644
--- a/arch/ppc/platforms/4xx/ibm405gp.h
+++ b/arch/ppc/platforms/4xx/ibm405gp.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster akuster@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibm405gpr.c b/arch/ppc/platforms/4xx/ibm405gpr.c
index d18b3b49532e..2e21c430d483 100644
--- a/arch/ppc/platforms/4xx/ibm405gpr.c
+++ b/arch/ppc/platforms/4xx/ibm405gpr.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibm405gpr.h b/arch/ppc/platforms/4xx/ibm405gpr.h
index 4212cd741112..afeb48c3406d 100644
--- a/arch/ppc/platforms/4xx/ibm405gpr.h
+++ b/arch/ppc/platforms/4xx/ibm405gpr.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmnp405h.c b/arch/ppc/platforms/4xx/ibmnp405h.c
index 4fe1432d863b..09dfe0d1a849 100644
--- a/arch/ppc/platforms/4xx/ibmnp405h.c
+++ b/arch/ppc/platforms/4xx/ibmnp405h.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmnp405h.h b/arch/ppc/platforms/4xx/ibmnp405h.h
index 596733e26ad9..d1566b01ffc1 100644
--- a/arch/ppc/platforms/4xx/ibmnp405h.h
+++ b/arch/ppc/platforms/4xx/ibmnp405h.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmnp405l.c b/arch/ppc/platforms/4xx/ibmnp405l.c
index bd48409e3b7b..3cebb9111b7e 100644
--- a/arch/ppc/platforms/4xx/ibmnp405l.c
+++ b/arch/ppc/platforms/4xx/ibmnp405l.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmnp405l.h b/arch/ppc/platforms/4xx/ibmnp405l.h
index 112157d517de..d6cf897dce48 100644
--- a/arch/ppc/platforms/4xx/ibmnp405l.h
+++ b/arch/ppc/platforms/4xx/ibmnp405l.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmnp4gs.c b/arch/ppc/platforms/4xx/ibmnp4gs.c
index 0b7daf809199..25f654ea5363 100644
--- a/arch/ppc/platforms/4xx/ibmnp4gs.c
+++ b/arch/ppc/platforms/4xx/ibmnp4gs.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmnp4gs.h b/arch/ppc/platforms/4xx/ibmnp4gs.h
index 4585f7a2de92..4f05bdf57fbf 100644
--- a/arch/ppc/platforms/4xx/ibmnp4gs.h
+++ b/arch/ppc/platforms/4xx/ibmnp4gs.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmstb3.c b/arch/ppc/platforms/4xx/ibmstb3.c
index ead8a768b98f..e55e8de3d8c6 100644
--- a/arch/ppc/platforms/4xx/ibmstb3.c
+++ b/arch/ppc/platforms/4xx/ibmstb3.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmstb3.h b/arch/ppc/platforms/4xx/ibmstb3.h
index 0c85d43f347b..ff78f804abfc 100644
--- a/arch/ppc/platforms/4xx/ibmstb3.h
+++ b/arch/ppc/platforms/4xx/ibmstb3.h
@@ -4,7 +4,7 @@
* Authors: Armin Kuster <akuster@mvista.com>, Tom Rini <trini@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmstb4.c b/arch/ppc/platforms/4xx/ibmstb4.c
index fb5d007f5a17..2fed8f19c586 100644
--- a/arch/ppc/platforms/4xx/ibmstb4.c
+++ b/arch/ppc/platforms/4xx/ibmstb4.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmstb4.h b/arch/ppc/platforms/4xx/ibmstb4.h
index 0a300a8457a3..367012fa0331 100644
--- a/arch/ppc/platforms/4xx/ibmstb4.h
+++ b/arch/ppc/platforms/4xx/ibmstb4.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmstbx25.c b/arch/ppc/platforms/4xx/ibmstbx25.c
index d150e6db7ec3..894254446fb7 100644
--- a/arch/ppc/platforms/4xx/ibmstbx25.c
+++ b/arch/ppc/platforms/4xx/ibmstbx25.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/ibmstbx25.h b/arch/ppc/platforms/4xx/ibmstbx25.h
index d1b2adbd6fe2..954831398c63 100644
--- a/arch/ppc/platforms/4xx/ibmstbx25.h
+++ b/arch/ppc/platforms/4xx/ibmstbx25.h
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/redwood.c b/arch/ppc/platforms/4xx/redwood.c
index 0de889354876..3edaeb4ea429 100644
--- a/arch/ppc/platforms/4xx/redwood.c
+++ b/arch/ppc/platforms/4xx/redwood.c
@@ -4,7 +4,7 @@
* Author: Frank Rowand <frank_rowand@mvista.com>, or source@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/redwood.h b/arch/ppc/platforms/4xx/redwood.h
index 40cc9a8ed44f..da544898e6ae 100644
--- a/arch/ppc/platforms/4xx/redwood.h
+++ b/arch/ppc/platforms/4xx/redwood.h
@@ -7,7 +7,7 @@
* Author: Frank Rowand <frank_rowand@mvista.com>, or source@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/redwood5.c b/arch/ppc/platforms/4xx/redwood5.c
index b43efb73fd59..f47cc7f150bf 100644
--- a/arch/ppc/platforms/4xx/redwood5.c
+++ b/arch/ppc/platforms/4xx/redwood5.c
@@ -6,7 +6,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/redwood5.h b/arch/ppc/platforms/4xx/redwood5.h
index 3cbfab641879..42bc41ac8a24 100644
--- a/arch/ppc/platforms/4xx/redwood5.h
+++ b/arch/ppc/platforms/4xx/redwood5.h
@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/redwood6.c b/arch/ppc/platforms/4xx/redwood6.c
index a0a970f46e65..103b4df0f21e 100644
--- a/arch/ppc/platforms/4xx/redwood6.c
+++ b/arch/ppc/platforms/4xx/redwood6.c
@@ -4,7 +4,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/redwood6.h b/arch/ppc/platforms/4xx/redwood6.h
index 812cd23b9dc6..84dfef719222 100755
--- a/arch/ppc/platforms/4xx/redwood6.h
+++ b/arch/ppc/platforms/4xx/redwood6.h
@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/sycamore.c b/arch/ppc/platforms/4xx/sycamore.c
index 2359d64c5097..cd3b712bb8e6 100644
--- a/arch/ppc/platforms/4xx/sycamore.c
+++ b/arch/ppc/platforms/4xx/sycamore.c
@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/sycamore.h b/arch/ppc/platforms/4xx/sycamore.h
index a858614ac4f2..3e7b4e2c8c57 100755
--- a/arch/ppc/platforms/4xx/sycamore.h
+++ b/arch/ppc/platforms/4xx/sycamore.h
@@ -7,7 +7,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/walnut.c b/arch/ppc/platforms/4xx/walnut.c
index 25c59237021f..763b18ae9af3 100644
--- a/arch/ppc/platforms/4xx/walnut.c
+++ b/arch/ppc/platforms/4xx/walnut.c
@@ -9,7 +9,7 @@
* Copyright(c) 1999-2000 Grant Erickson <grant@lcse.umn.edu>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/4xx/walnut.h b/arch/ppc/platforms/4xx/walnut.h
index d3cab0bf30c5..04cfbf3696b9 100644
--- a/arch/ppc/platforms/4xx/walnut.h
+++ b/arch/ppc/platforms/4xx/walnut.h
@@ -11,7 +11,7 @@
* Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/ev64260.h b/arch/ppc/platforms/ev64260.h
index f54ee9fe0972..f08f7ddecdd1 100644
--- a/arch/ppc/platforms/ev64260.h
+++ b/arch/ppc/platforms/ev64260.h
@@ -6,7 +6,7 @@
* Author: Mark A. Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/ev64260_setup.c b/arch/ppc/platforms/ev64260_setup.c
index e39b20d0004b..eb090a3d7aaa 100644
--- a/arch/ppc/platforms/ev64260_setup.c
+++ b/arch/ppc/platforms/ev64260_setup.c
@@ -6,7 +6,7 @@
* Author: Mark A. Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/k2.h b/arch/ppc/platforms/k2.h
index acae11647c1a..eeafcae1d6f0 100644
--- a/arch/ppc/platforms/k2.h
+++ b/arch/ppc/platforms/k2.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/k2_pci.c b/arch/ppc/platforms/k2_pci.c
index f0b3acecb91a..922ab669bf70 100644
--- a/arch/ppc/platforms/k2_pci.c
+++ b/arch/ppc/platforms/k2_pci.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/k2_setup.c b/arch/ppc/platforms/k2_setup.c
index ecbfe9bfde73..8a7396a18da1 100644
--- a/arch/ppc/platforms/k2_setup.c
+++ b/arch/ppc/platforms/k2_setup.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/lopec_pci.c b/arch/ppc/platforms/lopec_pci.c
index 680373fcfbab..716d5f5ed94b 100644
--- a/arch/ppc/platforms/lopec_pci.c
+++ b/arch/ppc/platforms/lopec_pci.c
@@ -7,7 +7,7 @@
* danc@mvista.com (or, alternately, source@mvista.com)
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/lopec_serial.h b/arch/ppc/platforms/lopec_serial.h
index c723c0bec851..63f935e85e13 100644
--- a/arch/ppc/platforms/lopec_serial.h
+++ b/arch/ppc/platforms/lopec_serial.h
@@ -7,7 +7,7 @@
* danc@mvista.com (or, alternately, source@mvista.com)
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/lopec_setup.c b/arch/ppc/platforms/lopec_setup.c
index f6a9caa835ac..4d929ec1f331 100644
--- a/arch/ppc/platforms/lopec_setup.c
+++ b/arch/ppc/platforms/lopec_setup.c
@@ -7,7 +7,7 @@
* danc@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mcpn765.h b/arch/ppc/platforms/mcpn765.h
index 11513351b193..54e486b0432f 100644
--- a/arch/ppc/platforms/mcpn765.h
+++ b/arch/ppc/platforms/mcpn765.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mcpn765_pci.c b/arch/ppc/platforms/mcpn765_pci.c
index 182f91dc7ccc..299d26cb7e45 100644
--- a/arch/ppc/platforms/mcpn765_pci.c
+++ b/arch/ppc/platforms/mcpn765_pci.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mcpn765_serial.h b/arch/ppc/platforms/mcpn765_serial.h
index 4166ee215557..021d91978bd1 100644
--- a/arch/ppc/platforms/mcpn765_serial.h
+++ b/arch/ppc/platforms/mcpn765_serial.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mcpn765_setup.c b/arch/ppc/platforms/mcpn765_setup.c
index 76d3b8aceb46..140d572013ae 100644
--- a/arch/ppc/platforms/mcpn765_setup.c
+++ b/arch/ppc/platforms/mcpn765_setup.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/menf1.h b/arch/ppc/platforms/menf1.h
index 67d6f2ec2130..ecb9f094ce93 100644
--- a/arch/ppc/platforms/menf1.h
+++ b/arch/ppc/platforms/menf1.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/menf1_pci.c b/arch/ppc/platforms/menf1_pci.c
index 7fd3aed884d7..303d8756ffd6 100644
--- a/arch/ppc/platforms/menf1_pci.c
+++ b/arch/ppc/platforms/menf1_pci.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/menf1_setup.c b/arch/ppc/platforms/menf1_setup.c
index 9fe3c756e2ad..6d8e19b6c1a7 100644
--- a/arch/ppc/platforms/menf1_setup.c
+++ b/arch/ppc/platforms/menf1_setup.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mvme5100.h b/arch/ppc/platforms/mvme5100.h
index 7ef64b708643..891ac6c1195d 100644
--- a/arch/ppc/platforms/mvme5100.h
+++ b/arch/ppc/platforms/mvme5100.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mvme5100_pci.c b/arch/ppc/platforms/mvme5100_pci.c
index 0b9e1971f969..9372623d2897 100644
--- a/arch/ppc/platforms/mvme5100_pci.c
+++ b/arch/ppc/platforms/mvme5100_pci.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mvme5100_serial.h b/arch/ppc/platforms/mvme5100_serial.h
index 417b7fb205dc..d34d91899610 100644
--- a/arch/ppc/platforms/mvme5100_serial.h
+++ b/arch/ppc/platforms/mvme5100_serial.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/mvme5100_setup.c b/arch/ppc/platforms/mvme5100_setup.c
index e35a7735e638..9c5883ec7701 100644
--- a/arch/ppc/platforms/mvme5100_setup.c
+++ b/arch/ppc/platforms/mvme5100_setup.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pal4.h b/arch/ppc/platforms/pal4.h
index 696b1b9401b3..62e6c0e138cf 100644
--- a/arch/ppc/platforms/pal4.h
+++ b/arch/ppc/platforms/pal4.h
@@ -6,7 +6,7 @@
* Author: Dan Cox
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pal4_pci.c b/arch/ppc/platforms/pal4_pci.c
index 6cd325039d9c..478753ad6b88 100644
--- a/arch/ppc/platforms/pal4_pci.c
+++ b/arch/ppc/platforms/pal4_pci.c
@@ -6,7 +6,7 @@
* Author: Dan Cox
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pal4_serial.h b/arch/ppc/platforms/pal4_serial.h
index b734cb56d350..87995409ea07 100644
--- a/arch/ppc/platforms/pal4_serial.h
+++ b/arch/ppc/platforms/pal4_serial.h
@@ -6,7 +6,7 @@
* Author: Dan Cox
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pal4_setup.c b/arch/ppc/platforms/pal4_setup.c
index 7afad1ab146b..48a3db47fc88 100644
--- a/arch/ppc/platforms/pal4_setup.c
+++ b/arch/ppc/platforms/pal4_setup.c
@@ -6,7 +6,7 @@
* Author: Dan Cox
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pcore.h b/arch/ppc/platforms/pcore.h
index b2528561dacb..69868caf13e9 100644
--- a/arch/ppc/platforms/pcore.h
+++ b/arch/ppc/platforms/pcore.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pcore_pci.c b/arch/ppc/platforms/pcore_pci.c
index fea96fc20610..b0a15c68fe7a 100644
--- a/arch/ppc/platforms/pcore_pci.c
+++ b/arch/ppc/platforms/pcore_pci.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pcore_setup.c b/arch/ppc/platforms/pcore_setup.c
index 6c15fbbf085e..cf0503959265 100644
--- a/arch/ppc/platforms/pcore_setup.c
+++ b/arch/ppc/platforms/pcore_setup.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/powerpmc250.c b/arch/ppc/platforms/powerpmc250.c
index bc93d98718dd..9be3f52e6b1e 100644
--- a/arch/ppc/platforms/powerpmc250.c
+++ b/arch/ppc/platforms/powerpmc250.c
@@ -8,7 +8,7 @@
* Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/powerpmc250.h b/arch/ppc/platforms/powerpmc250.h
index 76010bd0299d..db600e36fb32 100644
--- a/arch/ppc/platforms/powerpmc250.h
+++ b/arch/ppc/platforms/powerpmc250.h
@@ -8,7 +8,7 @@
* Borrowed heavily from prpmc750.h by Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/powerpmc250_serial.h b/arch/ppc/platforms/powerpmc250_serial.h
index cce33410e5ac..2c6a2a046275 100644
--- a/arch/ppc/platforms/powerpmc250_serial.h
+++ b/arch/ppc/platforms/powerpmc250_serial.h
@@ -6,7 +6,7 @@
* Author: Troy Benjegerdes <tbenjegerdes@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pplus_pci.c b/arch/ppc/platforms/pplus_pci.c
index b7716ff63009..7886834e9174 100644
--- a/arch/ppc/platforms/pplus_pci.c
+++ b/arch/ppc/platforms/pplus_pci.c
@@ -10,7 +10,7 @@
* Troy Benjegerdes.
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/pplus_setup.c b/arch/ppc/platforms/pplus_setup.c
index b4afcdb50140..2d7e98956624 100644
--- a/arch/ppc/platforms/pplus_setup.c
+++ b/arch/ppc/platforms/pplus_setup.c
@@ -10,7 +10,7 @@
* Troy Benjegerdes.
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc750_pci.c b/arch/ppc/platforms/prpmc750_pci.c
index d06c9cbc4ae1..a7f5b722efd1 100644
--- a/arch/ppc/platforms/prpmc750_pci.c
+++ b/arch/ppc/platforms/prpmc750_pci.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc750_serial.h b/arch/ppc/platforms/prpmc750_serial.h
index 3d358b0e23d9..33021bbd95ea 100644
--- a/arch/ppc/platforms/prpmc750_serial.h
+++ b/arch/ppc/platforms/prpmc750_serial.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc750_setup.c b/arch/ppc/platforms/prpmc750_setup.c
index 6e35c8c3aa58..0857a1d13765 100644
--- a/arch/ppc/platforms/prpmc750_setup.c
+++ b/arch/ppc/platforms/prpmc750_setup.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc800.h b/arch/ppc/platforms/prpmc800.h
index 25ea7d647d67..a09744a0524c 100644
--- a/arch/ppc/platforms/prpmc800.h
+++ b/arch/ppc/platforms/prpmc800.h
@@ -6,7 +6,7 @@
* Author: Dale Farnsworth <dale.farnsworth@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc800_pci.c b/arch/ppc/platforms/prpmc800_pci.c
index 87ca1e2e7c20..d539880de7d7 100644
--- a/arch/ppc/platforms/prpmc800_pci.c
+++ b/arch/ppc/platforms/prpmc800_pci.c
@@ -6,7 +6,7 @@
* Author: Dale Farnsworth <dale.farnsworth@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc800_serial.h b/arch/ppc/platforms/prpmc800_serial.h
index 44c5cc557343..8aa9dd87932f 100644
--- a/arch/ppc/platforms/prpmc800_serial.h
+++ b/arch/ppc/platforms/prpmc800_serial.h
@@ -6,7 +6,7 @@
* Author: Dale Farnsworth dale.farnsworth@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/prpmc800_setup.c b/arch/ppc/platforms/prpmc800_setup.c
index 04f886f8f6f7..2ce1c3b1e6db 100644
--- a/arch/ppc/platforms/prpmc800_setup.c
+++ b/arch/ppc/platforms/prpmc800_setup.c
@@ -3,7 +3,7 @@
* Author: Dale Farnsworth <dale.farnsworth@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/sandpoint.h b/arch/ppc/platforms/sandpoint.h
index 6f0280491682..e1a5b36c5de4 100644
--- a/arch/ppc/platforms/sandpoint.h
+++ b/arch/ppc/platforms/sandpoint.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/sandpoint_pci.c b/arch/ppc/platforms/sandpoint_pci.c
index 10b4b8716dbd..e585637f05f4 100644
--- a/arch/ppc/platforms/sandpoint_pci.c
+++ b/arch/ppc/platforms/sandpoint_pci.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/sandpoint_serial.h b/arch/ppc/platforms/sandpoint_serial.h
index 123718c51087..0981c415fa57 100644
--- a/arch/ppc/platforms/sandpoint_serial.h
+++ b/arch/ppc/platforms/sandpoint_serial.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/sandpoint_setup.c b/arch/ppc/platforms/sandpoint_setup.c
index 7870fbd7683a..ebdb7b227c3f 100644
--- a/arch/ppc/platforms/sandpoint_setup.c
+++ b/arch/ppc/platforms/sandpoint_setup.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/spruce.h b/arch/ppc/platforms/spruce.h
index 313e49062249..6dac0238faff 100644
--- a/arch/ppc/platforms/spruce.h
+++ b/arch/ppc/platforms/spruce.h
@@ -8,7 +8,7 @@
* jpeters@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/spruce_pci.c b/arch/ppc/platforms/spruce_pci.c
index 69ce9719a12f..75c793c9a3ce 100644
--- a/arch/ppc/platforms/spruce_pci.c
+++ b/arch/ppc/platforms/spruce_pci.c
@@ -7,7 +7,7 @@
* jpeters@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/spruce_serial.h b/arch/ppc/platforms/spruce_serial.h
index cf4bd37f7045..43e8ed849630 100644
--- a/arch/ppc/platforms/spruce_serial.h
+++ b/arch/ppc/platforms/spruce_serial.h
@@ -8,7 +8,7 @@
* jpeters@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/spruce_setup.c b/arch/ppc/platforms/spruce_setup.c
index 42e07817338e..d2d5acd68660 100644
--- a/arch/ppc/platforms/spruce_setup.c
+++ b/arch/ppc/platforms/spruce_setup.c
@@ -7,7 +7,7 @@
* Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/zx4500.h b/arch/ppc/platforms/zx4500.h
index b1d294f7c171..8a26e691e940 100644
--- a/arch/ppc/platforms/zx4500.h
+++ b/arch/ppc/platforms/zx4500.h
@@ -6,7 +6,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/zx4500_pci.c b/arch/ppc/platforms/zx4500_pci.c
index 275a35346163..325ecfe31c93 100644
--- a/arch/ppc/platforms/zx4500_pci.c
+++ b/arch/ppc/platforms/zx4500_pci.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/zx4500_serial.h b/arch/ppc/platforms/zx4500_serial.h
index e8b99025e3ed..e1f8c70337ba 100644
--- a/arch/ppc/platforms/zx4500_serial.h
+++ b/arch/ppc/platforms/zx4500_serial.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/platforms/zx4500_setup.c b/arch/ppc/platforms/zx4500_setup.c
index 3d0d7dbc3bec..739bdc373b67 100644
--- a/arch/ppc/platforms/zx4500_setup.c
+++ b/arch/ppc/platforms/zx4500_setup.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/cpc700.h b/arch/ppc/syslib/cpc700.h
index a198762a376c..e6f7f94e1f98 100644
--- a/arch/ppc/syslib/cpc700.h
+++ b/arch/ppc/syslib/cpc700.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/cpc700_pic.c b/arch/ppc/syslib/cpc700_pic.c
index bc986aa5f0a0..38f0bf9b4a09 100644
--- a/arch/ppc/syslib/cpc700_pic.c
+++ b/arch/ppc/syslib/cpc700_pic.c
@@ -9,7 +9,7 @@
* jpeters@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/cpc710.h b/arch/ppc/syslib/cpc710.h
index afb605d8ba33..44f0f6b69b6f 100644
--- a/arch/ppc/syslib/cpc710.h
+++ b/arch/ppc/syslib/cpc710.h
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/gt64260_common.c b/arch/ppc/syslib/gt64260_common.c
index 391053c7c695..fa505ab79a32 100644
--- a/arch/ppc/syslib/gt64260_common.c
+++ b/arch/ppc/syslib/gt64260_common.c
@@ -8,7 +8,7 @@
* Author: Mark A. Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/gt64260_pic.c b/arch/ppc/syslib/gt64260_pic.c
index 18a88af7db6d..1fbd6af01907 100644
--- a/arch/ppc/syslib/gt64260_pic.c
+++ b/arch/ppc/syslib/gt64260_pic.c
@@ -9,7 +9,7 @@
* Based on sources from Rabeeh Khoury / Galileo Technology
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/harrier.c b/arch/ppc/syslib/harrier.c
index 87efbcd84108..2e0512f4ffb6 100644
--- a/arch/ppc/syslib/harrier.c
+++ b/arch/ppc/syslib/harrier.c
@@ -7,7 +7,7 @@
* dale.farnsworth@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/mpc10x_common.c b/arch/ppc/syslib/mpc10x_common.c
index 6ffd29aa7afc..151e6f825860 100644
--- a/arch/ppc/syslib/mpc10x_common.c
+++ b/arch/ppc/syslib/mpc10x_common.c
@@ -8,7 +8,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/pci_auto.c b/arch/ppc/syslib/pci_auto.c
index 4257cea07a7f..d03425d2528e 100644
--- a/arch/ppc/syslib/pci_auto.c
+++ b/arch/ppc/syslib/pci_auto.c
@@ -6,7 +6,7 @@
* Author: Matt Porter <mporter@mvista.com>
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/ppc405_pci.c b/arch/ppc/syslib/ppc405_pci.c
index 6180639765c1..32c92fdafb37 100644
--- a/arch/ppc/syslib/ppc405_pci.c
+++ b/arch/ppc/syslib/ppc405_pci.c
@@ -4,7 +4,7 @@
* Further modifications by Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*
diff --git a/arch/ppc/syslib/ppc4xx_dma.c b/arch/ppc/syslib/ppc4xx_dma.c
index f2a861eb58b2..e1a0a848bd30 100644
--- a/arch/ppc/syslib/ppc4xx_dma.c
+++ b/arch/ppc/syslib/ppc4xx_dma.c
@@ -4,7 +4,7 @@
* arch/ppc/kernel/ppc405_dma.c
*
* 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
* or implied.
*
diff --git a/arch/ppc/syslib/ppc4xx_pm.c b/arch/ppc/syslib/ppc4xx_pm.c
index 6fba9d0c1b3a..60a479204885 100644
--- a/arch/ppc/syslib/ppc4xx_pm.c
+++ b/arch/ppc/syslib/ppc4xx_pm.c
@@ -2,7 +2,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*
diff --git a/arch/ppc/syslib/ppc4xx_serial.c b/arch/ppc/syslib/ppc4xx_serial.c
index 3b3b1fbb1f2e..20d7a98e25a6 100644
--- a/arch/ppc/syslib/ppc4xx_serial.c
+++ b/arch/ppc/syslib/ppc4xx_serial.c
@@ -9,7 +9,7 @@
* be merged with other similar processor/boards. -- Dan
*
* 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
* or implied.
*
diff --git a/arch/ppc/syslib/pplus_common.c b/arch/ppc/syslib/pplus_common.c
index 1324afb9ed7a..451c5e95b4d9 100644
--- a/arch/ppc/syslib/pplus_common.c
+++ b/arch/ppc/syslib/pplus_common.c
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc/syslib/todc_time.c b/arch/ppc/syslib/todc_time.c
index 5535e134477b..baf6078a4202 100644
--- a/arch/ppc/syslib/todc_time.c
+++ b/arch/ppc/syslib/todc_time.c
@@ -8,7 +8,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/arch/ppc64/kernel/process.c b/arch/ppc64/kernel/process.c
index c81d2cd02772..3b40722bd703 100644
--- a/arch/ppc64/kernel/process.c
+++ b/arch/ppc64/kernel/process.c
@@ -31,6 +31,7 @@
#include <linux/init.h>
#include <linux/init_task.h>
#include <linux/prctl.h>
+#include <linux/ptrace.h>
#include <asm/pgtable.h>
#include <asm/uaccess.h>
diff --git a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c
index b8a0424c0e6c..b5ddbaac34de 100644
--- a/arch/ppc64/kernel/sys_ppc32.c
+++ b/arch/ppc64/kernel/sys_ppc32.c
@@ -58,6 +58,7 @@
#include <linux/dnotify.h>
#include <linux/security.h>
#include <linux/compat.h>
+#include <linux/ptrace.h>
#include <asm/types.h>
#include <asm/ipc.h>
diff --git a/arch/s390x/kernel/linux32.c b/arch/s390x/kernel/linux32.c
index fce07ff5aae3..fc87ddddf687 100644
--- a/arch/s390x/kernel/linux32.c
+++ b/arch/s390x/kernel/linux32.c
@@ -58,6 +58,7 @@
#include <linux/binfmts.h>
#include <linux/compat.h>
#include <linux/vfs.h>
+#include <linux/ptrace.h>
#include <asm/types.h>
#include <asm/ipc.h>
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
index 62fdca125d9d..7f3653647f6b 100644
--- a/arch/sh/kernel/process.c
+++ b/arch/sh/kernel/process.c
@@ -15,6 +15,7 @@
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/a.out.h>
+#include <linux/ptrace.h>
#include <asm/io.h>
#include <asm/uaccess.h>
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c
index 1f2fb2b35849..eadc30630cd8 100644
--- a/arch/sparc64/kernel/sys_sparc32.c
+++ b/arch/sparc64/kernel/sys_sparc32.c
@@ -54,6 +54,7 @@
#include <linux/compat.h>
#include <linux/vfs.h>
#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/ptrace.h>
#include <asm/types.h>
#include <asm/ipc.h>
diff --git a/arch/um/kernel/exec_kern.c b/arch/um/kernel/exec_kern.c
index eaae628fa902..a6be6b542b4a 100644
--- a/arch/um/kernel/exec_kern.c
+++ b/arch/um/kernel/exec_kern.c
@@ -5,6 +5,7 @@
#include "linux/slab.h"
#include "linux/smp_lock.h"
+#include "linux/ptrace.h"
#include "asm/ptrace.h"
#include "asm/pgtable.h"
#include "asm/tlbflush.h"
diff --git a/arch/um/kernel/signal_kern.c b/arch/um/kernel/signal_kern.c
index cc9ab3416c9a..6e13847edb75 100644
--- a/arch/um/kernel/signal_kern.c
+++ b/arch/um/kernel/signal_kern.c
@@ -14,6 +14,7 @@
#include "linux/slab.h"
#include "linux/tty.h"
#include "linux/binfmts.h"
+#include "linux/ptrace.h"
#include "asm/signal.h"
#include "asm/uaccess.h"
#include "asm/unistd.h"
diff --git a/arch/um/kernel/skas/process_kern.c b/arch/um/kernel/skas/process_kern.c
index 01ccfb478ebd..e0ea56be1dae 100644
--- a/arch/um/kernel/skas/process_kern.c
+++ b/arch/um/kernel/skas/process_kern.c
@@ -5,6 +5,7 @@
#include "linux/sched.h"
#include "linux/slab.h"
+#include "linux/ptrace.h"
#include "kern_util.h"
#include "time_user.h"
#include "signal_user.h"
diff --git a/arch/um/kernel/tt/process_kern.c b/arch/um/kernel/tt/process_kern.c
index 6e8bb62bf77b..b4a855f44adc 100644
--- a/arch/um/kernel/tt/process_kern.c
+++ b/arch/um/kernel/tt/process_kern.c
@@ -7,6 +7,7 @@
#include "linux/signal.h"
#include "linux/kernel.h"
#include "linux/interrupt.h"
+#include "linux/ptrace.h"
#include "asm/system.h"
#include "asm/pgalloc.h"
#include "asm/ptrace.h"
diff --git a/arch/um/kernel/tt/syscall_kern.c b/arch/um/kernel/tt/syscall_kern.c
index 7401449b1a2e..1b71f9ce5184 100644
--- a/arch/um/kernel/tt/syscall_kern.c
+++ b/arch/um/kernel/tt/syscall_kern.c
@@ -6,6 +6,7 @@
#include "linux/types.h"
#include "linux/utime.h"
#include "linux/sys.h"
+#include "linux/ptrace.h"
#include "asm/unistd.h"
#include "asm/ptrace.h"
#include "asm/uaccess.h"
diff --git a/arch/v850/kernel/asm-consts.c b/arch/v850/kernel/asm-consts.c
index 44e042344612..666930d9cea6 100644
--- a/arch/v850/kernel/asm-consts.c
+++ b/arch/v850/kernel/asm-consts.c
@@ -11,6 +11,7 @@
#include <linux/stddef.h>
#include <linux/sched.h>
#include <linux/kernel_stat.h>
+#include <linux/ptrace.h>
#include <asm/irq.h>
#include <asm/hardirq.h>
#include <asm/errno.h>
diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c
index 3849c0ad3ec0..a7d36b41c593 100644
--- a/arch/x86_64/ia32/sys_ia32.c
+++ b/arch/x86_64/ia32/sys_ia32.c
@@ -59,6 +59,7 @@
#include <linux/aio_abi.h>
#include <linux/compat.h>
#include <linux/vfs.h>
+#include <linux/ptrace.h>
#include <asm/mman.h>
#include <asm/types.h>
#include <asm/uaccess.h>
diff --git a/drivers/acorn/block/fd1772.c b/drivers/acorn/block/fd1772.c
index 9fbd6d828da8..1af34c29bf41 100644
--- a/drivers/acorn/block/fd1772.c
+++ b/drivers/acorn/block/fd1772.c
@@ -336,7 +336,7 @@ DECLARE_WORK(fd1772_tq, (void *)fd1772_checkint, NULL);
*/
static int Probing = 0;
-/* This flag is set when a dummy seek is necesary to make the WP
+/* This flag is set when a dummy seek is necessary to make the WP
* status bit accessible.
*/
static int NeedSeek = 0;
diff --git a/drivers/acorn/scsi/acornscsi.c b/drivers/acorn/scsi/acornscsi.c
index ff126d11e6ad..ed4f7312b8cd 100644
--- a/drivers/acorn/scsi/acornscsi.c
+++ b/drivers/acorn/scsi/acornscsi.c
@@ -116,7 +116,7 @@
#ifdef DEBUG_TARGET
#define DBG(cmd,xxx...) \
- if (cmd->target == DEBUG_TARGET) { \
+ if (cmd->device->id == DEBUG_TARGET) { \
xxx; \
}
#else
@@ -575,7 +575,7 @@ static
char acornscsi_target(AS_Host *host)
{
if (host->SCpnt)
- return '0' + host->SCpnt->target;
+ return '0' + host->SCpnt->device->id;
return 'H';
}
@@ -742,7 +742,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
* In this case, we don't want to write to the registers
*/
if (!(sbic_arm_read(host->scsi.io_port, ASR) & (ASR_INT|ASR_BSY|ASR_CIP))) {
- sbic_arm_write(host->scsi.io_port, DESTID, SCpnt->target);
+ sbic_arm_write(host->scsi.io_port, DESTID, SCpnt->device->id);
sbic_arm_write(host->scsi.io_port, CMND, CMND_SELWITHATN);
}
@@ -759,7 +759,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
#if (DEBUG & (DEBUG_ABORT|DEBUG_CONNECT))
DBG(SCpnt,printk("scsi%d.%c: starting cmd %02X\n",
- host->host->host_no, '0' + SCpnt->target,
+ host->host->host_no, '0' + SCpnt->device->id,
SCpnt->cmnd[0]));
#endif
@@ -775,7 +775,7 @@ intr_ret_t acornscsi_kick(AS_Host *host)
SCpnt->tag = SCpnt->device->current_tag;
} else
#endif
- set_bit(SCpnt->target * 8 + SCpnt->lun, host->busyluns);
+ set_bit(SCpnt->device->id * 8 + SCpnt->device->lun, host->busyluns);
host->stats.removes += 1;
@@ -868,7 +868,7 @@ void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result)
host->host->host_no, SCpnt->result);
print_command(SCpnt->cmnd);
acornscsi_dumpdma(host, "done");
- acornscsi_dumplog(host, SCpnt->target);
+ acornscsi_dumplog(host, SCpnt->device->id);
SCpnt->result &= 0xffff;
SCpnt->result |= DID_ERROR << 16;
}
@@ -878,7 +878,7 @@ void acornscsi_done(AS_Host *host, Scsi_Cmnd **SCpntp, unsigned int result)
if (!SCpnt->scsi_done)
panic("scsi%d.H: null scsi_done function in acornscsi_done", host->host->host_no);
- clear_bit(SCpnt->target * 8 + SCpnt->lun, host->busyluns);
+ clear_bit(SCpnt->device->id * 8 + SCpnt->device->lun, host->busyluns);
SCpnt->scsi_done(SCpnt);
} else
@@ -1035,7 +1035,7 @@ void acornscsi_dma_setup(AS_Host *host, dmadir_t direction)
if (direction == DMA_OUT) {
#if (DEBUG & DEBUG_NO_WRITE)
- if (NO_WRITE & (1 << host->SCpnt->target)) {
+ if (NO_WRITE & (1 << host->SCpnt->device->id)) {
printk(KERN_CRIT "scsi%d.%c: I can't handle DMA_OUT!\n",
host->host->host_no, acornscsi_target(host));
return;
@@ -1511,7 +1511,7 @@ void acornscsi_message(AS_Host *host)
if (host->scsi.phase != PHASE_STATUSIN) {
printk(KERN_ERR "scsi%d.%c: command complete following non-status in phase?\n",
host->host->host_no, acornscsi_target(host));
- acornscsi_dumplog(host, host->SCpnt->target);
+ acornscsi_dumplog(host, host->SCpnt->device->id);
}
host->scsi.phase = PHASE_DONE;
host->scsi.SCp.Message = message[0];
@@ -1567,8 +1567,8 @@ void acornscsi_message(AS_Host *host)
* transfer. Re-initiate sync transfer negociation now, and if
* we got a REJECT in response to SDTR, then it'll be set to DONE.
*/
- if (host->device[host->SCpnt->target].sync_state == SYNC_SENT_REQUEST)
- host->device[host->SCpnt->target].sync_state = SYNC_NEGOCIATE;
+ if (host->device[host->SCpnt->device->id].sync_state == SYNC_SENT_REQUEST)
+ host->device[host->SCpnt->device->id].sync_state = SYNC_NEGOCIATE;
#endif
/*
@@ -1591,7 +1591,7 @@ void acornscsi_message(AS_Host *host)
printk(KERN_NOTICE "scsi%d.%c: disabling tagged queueing\n",
host->host->host_no, acornscsi_target(host));
host->SCpnt->device->tagged_queue = 0;
- set_bit(host->SCpnt->target * 8 + host->SCpnt->lun, host->busyluns);
+ set_bit(host->SCpnt->device->id * 8 + host->SCpnt->device->lun, host->busyluns);
break;
#endif
case EXTENDED_MESSAGE | (EXTENDED_SDTR << 8):
@@ -1600,9 +1600,9 @@ void acornscsi_message(AS_Host *host)
*/
printk(KERN_NOTICE "scsi%d.%c: Using asynchronous transfer\n",
host->host->host_no, acornscsi_target(host));
- host->device[host->SCpnt->target].sync_xfer = SYNCHTRANSFER_2DBA;
- host->device[host->SCpnt->target].sync_state = SYNC_ASYNCHRONOUS;
- sbic_arm_write(host->scsi.io_port, SYNCHTRANSFER, host->device[host->SCpnt->target].sync_xfer);
+ host->device[host->SCpnt->device->id].sync_xfer = SYNCHTRANSFER_2DBA;
+ host->device[host->SCpnt->device->id].sync_state = SYNC_ASYNCHRONOUS;
+ sbic_arm_write(host->scsi.io_port, SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer);
break;
default:
@@ -1625,18 +1625,18 @@ void acornscsi_message(AS_Host *host)
switch (message[2]) {
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
case EXTENDED_SDTR:
- if (host->device[host->SCpnt->target].sync_state == SYNC_SENT_REQUEST) {
+ if (host->device[host->SCpnt->device->id].sync_state == SYNC_SENT_REQUEST) {
/*
* We requested synchronous transfers. This isn't quite right...
* We can only say if this succeeded if we proceed on to execute the
* command from this message. If we get a MESSAGE PARITY ERROR,
* and the target retries fail, then we fallback to asynchronous mode
*/
- host->device[host->SCpnt->target].sync_state = SYNC_COMPLETED;
+ host->device[host->SCpnt->device->id].sync_state = SYNC_COMPLETED;
printk(KERN_NOTICE "scsi%d.%c: Using synchronous transfer, offset %d, %d ns\n",
host->host->host_no, acornscsi_target(host),
message[4], message[3] * 4);
- host->device[host->SCpnt->target].sync_xfer =
+ host->device[host->SCpnt->device->id].sync_xfer =
calc_sync_xfer(message[3] * 4, message[4]);
} else {
unsigned char period, length;
@@ -1649,10 +1649,10 @@ void acornscsi_message(AS_Host *host)
length = min_t(unsigned int, message[4], sdtr_size);
msgqueue_addmsg(&host->scsi.msgs, 5, EXTENDED_MESSAGE, 3,
EXTENDED_SDTR, period, length);
- host->device[host->SCpnt->target].sync_xfer =
+ host->device[host->SCpnt->device->id].sync_xfer =
calc_sync_xfer(period * 4, length);
}
- sbic_arm_write(host->scsi.io_port, SYNCHTRANSFER, host->device[host->SCpnt->target].sync_xfer);
+ sbic_arm_write(host->scsi.io_port, SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer);
break;
#else
/* We do not accept synchronous transfers. Respond with a
@@ -1738,8 +1738,8 @@ void acornscsi_buildmessages(AS_Host *host)
#endif
msgqueue_addmsg(&host->scsi.msgs, 1,
- IDENTIFY(host->device[host->SCpnt->target].disconnect_ok,
- host->SCpnt->lun));
+ IDENTIFY(host->device[host->SCpnt->device->id].disconnect_ok,
+ host->SCpnt->device->lun));
#if 0
/* does the device need the current command aborted */
@@ -1764,8 +1764,8 @@ void acornscsi_buildmessages(AS_Host *host)
#endif
#ifdef CONFIG_SCSI_ACORNSCSI_SYNC
- if (host->device[host->SCpnt->target].sync_state == SYNC_NEGOCIATE) {
- host->device[host->SCpnt->target].sync_state = SYNC_SENT_REQUEST;
+ if (host->device[host->SCpnt->device->id].sync_state == SYNC_NEGOCIATE) {
+ host->device[host->SCpnt->device->id].sync_state = SYNC_SENT_REQUEST;
msgqueue_addmsg(&host->scsi.msgs, 5,
EXTENDED_MESSAGE, 3, EXTENDED_SDTR,
sdtr_period / 4, sdtr_size);
@@ -1792,7 +1792,7 @@ int acornscsi_starttransfer(AS_Host *host)
residual = host->SCpnt->request_bufflen - host->scsi.SCp.scsi_xferred;
- sbic_arm_write(host->scsi.io_port, SYNCHTRANSFER, host->device[host->SCpnt->target].sync_xfer);
+ sbic_arm_write(host->scsi.io_port, SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer);
sbic_arm_writenext(host->scsi.io_port, residual >> 16);
sbic_arm_writenext(host->scsi.io_port, residual >> 8);
sbic_arm_writenext(host->scsi.io_port, residual);
@@ -1828,7 +1828,7 @@ int acornscsi_reconnect(AS_Host *host)
if (host->SCpnt && !host->scsi.disconnectable) {
printk(KERN_ERR "scsi%d.%d: reconnected while command in "
"progress to target %d?\n",
- host->host->host_no, target, host->SCpnt->target);
+ host->host->host_no, target, host->SCpnt->device->id);
host->SCpnt = NULL;
}
@@ -1839,7 +1839,7 @@ int acornscsi_reconnect(AS_Host *host)
host->scsi.reconnected.tag = 0;
if (host->scsi.disconnectable && host->SCpnt &&
- host->SCpnt->target == target && host->SCpnt->lun == lun)
+ host->SCpnt->device->id == target && host->SCpnt->device->lun == lun)
ok = 1;
if (!ok && queue_probetgtlun(&host->queues.disconnected, target, lun))
@@ -1876,9 +1876,9 @@ int acornscsi_reconnect_finish(AS_Host *host)
{
if (host->scsi.disconnectable && host->SCpnt) {
host->scsi.disconnectable = 0;
- if (host->SCpnt->target == host->scsi.reconnected.target &&
- host->SCpnt->lun == host->scsi.reconnected.lun &&
- host->SCpnt->tag == host->scsi.reconnected.tag) {
+ if (host->SCpnt->device->id == host->scsi.reconnected.target &&
+ host->SCpnt->device->lun == host->scsi.reconnected.lun &&
+ host->SCpnt->tag == host->scsi.reconnected.tag) {
#if (DEBUG & (DEBUG_QUEUES|DEBUG_DISCON))
DBG(host->SCpnt, printk("scsi%d.%c: reconnected",
host->host->host_no, acornscsi_target(host)));
@@ -1992,7 +1992,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
ADD_STATUS(8, ssr, host->scsi.phase, in_irq);
if (host->SCpnt && !host->scsi.disconnectable)
- ADD_STATUS(host->SCpnt->target, ssr, host->scsi.phase, in_irq);
+ ADD_STATUS(host->SCpnt->device->id, ssr, host->scsi.phase, in_irq);
switch (ssr) {
case 0x00: /* reset state - not advanced */
@@ -2030,7 +2030,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
break;
ssr = sbic_arm_read(host->scsi.io_port, SSR);
ADD_STATUS(8, ssr, host->scsi.phase, 1);
- ADD_STATUS(host->SCpnt->target, ssr, host->scsi.phase, 1);
+ ADD_STATUS(host->SCpnt->device->id, ssr, host->scsi.phase, 1);
goto connected;
case 0x42: /* select timed out */
@@ -2049,7 +2049,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTING, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
acornscsi_abortcmd(host, host->SCpnt->tag);
}
return INTR_PROCESSING;
@@ -2085,7 +2085,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_CONNECTED, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
acornscsi_abortcmd(host, host->SCpnt->tag);
}
return INTR_PROCESSING;
@@ -2123,7 +2123,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_MSGOUT, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2168,7 +2168,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_COMMAND, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2181,7 +2181,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
} else {
printk(KERN_ERR "scsi%d.%c: PHASE_DISCONNECT, SSR %02X instead of disconnect?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_NEXT_COMMAND;
@@ -2191,7 +2191,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
else {
printk(KERN_ERR "scsi%d.%c: PHASE_IDLE, SSR %02X while idle?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2206,7 +2206,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
*/
if (ssr != 0x8f && !acornscsi_reconnect_finish(host))
return INTR_IDLE;
- ADD_STATUS(host->SCpnt->target, ssr, host->scsi.phase, in_irq);
+ ADD_STATUS(host->SCpnt->device->id, ssr, host->scsi.phase, in_irq);
switch (ssr) {
case 0x88: /* data out phase */
/* -> PHASE_DATAOUT */
@@ -2251,7 +2251,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_RECONNECTED, SSR %02X after reconnect?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2300,7 +2300,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_DATAIN, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2352,7 +2352,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_DATAOUT, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2373,7 +2373,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_STATUSIN, SSR %02X instead of MESSAGE_IN?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2396,14 +2396,14 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
case 0x85:
printk("scsi%d.%c: strange message in disconnection\n",
host->host->host_no, acornscsi_target(host));
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
acornscsi_done(host, &host->SCpnt, DID_ERROR);
break;
default:
printk(KERN_ERR "scsi%d.%c: PHASE_MSGIN, SSR %02X after message in?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2421,7 +2421,7 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_DONE, SSR %02X instead of disconnect?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
@@ -2447,14 +2447,14 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq)
default:
printk(KERN_ERR "scsi%d.%c: PHASE_ABORTED, SSR %02X?\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
default:
printk(KERN_ERR "scsi%d.%c: unknown driver phase %d\n",
host->host->host_no, acornscsi_target(host), ssr);
- acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->target : 8);
+ acornscsi_dumplog(host, host->SCpnt ? host->SCpnt->device->id : 8);
}
return INTR_PROCESSING;
}
@@ -2531,9 +2531,9 @@ int acornscsi_queuecmd(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
}
#if (DEBUG & DEBUG_NO_WRITE)
- if (acornscsi_cmdtype(SCpnt->cmnd[0]) == CMD_WRITE && (NO_WRITE & (1 << SCpnt->target))) {
+ if (acornscsi_cmdtype(SCpnt->cmnd[0]) == CMD_WRITE && (NO_WRITE & (1 << SCpnt->device->id))) {
printk(KERN_CRIT "scsi%d.%c: WRITE attempted with NO_WRITE flag set\n",
- SCpnt->host->host_no, '0' + SCpnt->target);
+ SCpnt->host->host_no, '0' + SCpnt->device->id);
SCpnt->result = DID_NO_CONNECT << 16;
done(SCpnt);
return 0;
@@ -2708,7 +2708,7 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
printk(KERN_WARNING "acornscsi_abort: ");
print_sbic_status(asr, ssr, host->scsi.phase);
- acornscsi_dumplog(host, SCpnt->target);
+ acornscsi_dumplog(host, SCpnt->device->id);
}
#endif
@@ -2724,7 +2724,7 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
//#if (DEBUG & DEBUG_ABORT)
printk("clear ");
//#endif
- clear_bit(SCpnt->target * 8 + SCpnt->lun, host->busyluns);
+ clear_bit(SCpnt->device->id * 8 + SCpnt->device->lun, host->busyluns);
/*
* We found the command, and cleared it out. Either
@@ -2758,7 +2758,7 @@ int acornscsi_abort(Scsi_Cmnd *SCpnt)
*/
default:
case res_not_running:
- acornscsi_dumplog(host, SCpnt->target);
+ acornscsi_dumplog(host, SCpnt->device->id);
#if (DEBUG & DEBUG_ABORT)
result = SCSI_ABORT_SNOOZE;
#else
@@ -2796,7 +2796,7 @@ int acornscsi_reset(Scsi_Cmnd *SCpnt, unsigned int reset_flags)
printk(KERN_WARNING "acornscsi_reset: ");
print_sbic_status(asr, ssr, host->scsi.phase);
- acornscsi_dumplog(host, SCpnt->target);
+ acornscsi_dumplog(host, SCpnt->device->id);
}
#endif
diff --git a/drivers/acorn/scsi/fas216.c b/drivers/acorn/scsi/fas216.c
index 5bdaf3ff9362..978d3d7e1a7f 100644
--- a/drivers/acorn/scsi/fas216.c
+++ b/drivers/acorn/scsi/fas216.c
@@ -96,6 +96,47 @@
static int level_mask = LOG_ERROR;
+static int __init fas216_log_setup(char *str)
+{
+ char *s;
+
+ level_mask = 0;
+
+ while ((s = strsep(&str, ",")) != NULL) {
+ switch (s[0]) {
+ case 'a':
+ if (strcmp(s, "all") == 0)
+ level_mask |= -1;
+ break;
+ case 'b':
+ if (strncmp(s, "bus", 3) == 0)
+ level_mask |= LOG_BUSSERVICE;
+ if (strncmp(s, "buf", 3) == 0)
+ level_mask |= LOG_BUFFER;
+ break;
+ case 'c':
+ level_mask |= LOG_CONNECT;
+ break;
+ case 'e':
+ level_mask |= LOG_ERROR;
+ break;
+ case 'm':
+ level_mask |= LOG_MESSAGES;
+ break;
+ case 'n':
+ if (strcmp(s, "none") == 0)
+ level_mask = 0;
+ break;
+ case 's':
+ level_mask |= LOG_FUNCTIONDONE;
+ break;
+ }
+ }
+ return 1;
+}
+
+__setup("fas216_logging=", fas216_log_setup);
+
static inline unsigned char fas216_readb(FAS216_Info *info, unsigned int reg)
{
unsigned int off = reg << info->scsi.io_shift;
@@ -244,7 +285,7 @@ static const char *fas216_drv_phase(FAS216_Info *info)
static char fas216_target(FAS216_Info *info)
{
if (info->SCpnt)
- return '0' + info->SCpnt->target;
+ return '0' + info->SCpnt->device->id;
else
return 'H';
}
@@ -267,7 +308,7 @@ fas216_log_command(FAS216_Info *info, int level, Scsi_Cmnd *SCpnt, char *fmt, ..
return;
va_start(args, fmt);
- fas216_do_log(info, '0' + SCpnt->target, fmt, args);
+ fas216_do_log(info, '0' + SCpnt->device->id, fmt, args);
va_end(args);
printk(" CDB: ");
@@ -495,7 +536,7 @@ static void fas216_set_sync(FAS216_Info *info, int target)
*/
static void fas216_handlesync(FAS216_Info *info, char *msg)
{
- struct fas216_device *dev = &info->device[info->SCpnt->target];
+ struct fas216_device *dev = &info->device[info->SCpnt->device->id];
enum { sync, async, none, reject } res = none;
#ifdef SCSI2_SYNC
@@ -578,7 +619,7 @@ static void fas216_handlesync(FAS216_Info *info, char *msg)
dev->period = msg[3];
dev->sof = msg[4];
dev->stp = fas216_syncperiod(info, msg[3] * 4);
- fas216_set_sync(info, info->SCpnt->target);
+ fas216_set_sync(info, info->SCpnt->device->id);
break;
case reject:
@@ -591,7 +632,7 @@ static void fas216_handlesync(FAS216_Info *info, char *msg)
dev->period = info->ifcfg.asyncperiod / 4;
dev->sof = 0;
dev->stp = info->scsi.async_stp;
- fas216_set_sync(info, info->SCpnt->target);
+ fas216_set_sync(info, info->SCpnt->device->id);
break;
case none:
@@ -608,7 +649,7 @@ static void fas216_handlesync(FAS216_Info *info, char *msg)
*/
static void fas216_handlewide(FAS216_Info *info, char *msg)
{
- struct fas216_device *dev = &info->device[info->SCpnt->target];
+ struct fas216_device *dev = &info->device[info->SCpnt->device->id];
enum { wide, bit8, none, reject } res = none;
#ifdef SCSI2_WIDE
@@ -725,7 +766,7 @@ static void fas216_updateptrs(FAS216_Info *info, int bytes_transferred)
bytes_transferred -= SCp->this_residual;
if (!next_SCp(SCp) && bytes_transferred) {
printk(KERN_WARNING "scsi%d.%c: out of buffers\n",
- info->host->host_no, '0' + info->SCpnt->target);
+ info->host->host_no, '0' + info->SCpnt->device->id);
return;
}
}
@@ -848,7 +889,7 @@ static void fas216_transfer(FAS216_Info *info)
* use DMA mode. If we are using asynchronous transfers, we may
* use DMA mode or PIO mode.
*/
- if (info->device[info->SCpnt->target].sof)
+ if (info->device[info->SCpnt->device->id].sof)
dmatype = fasdma_real_all;
else
dmatype = fasdma_pio;
@@ -1023,10 +1064,10 @@ fas216_reselected_intr(FAS216_Info *info)
info->origSCpnt = SCpnt;
info->SCpnt = NULL;
- if (info->device[SCpnt->target].wide_state == neg_inprogress)
- info->device[SCpnt->target].wide_state = neg_wait;
- if (info->device[SCpnt->target].sync_state == neg_inprogress)
- info->device[SCpnt->target].sync_state = neg_wait;
+ if (info->device[SCpnt->device->id].wide_state == neg_inprogress)
+ info->device[SCpnt->device->id].wide_state = neg_wait;
+ if (info->device[SCpnt->device->id].sync_state == neg_inprogress)
+ info->device[SCpnt->device->id].sync_state = neg_wait;
}
fas216_log(info, LOG_CONNECT, "reconnect phase=%02X", info->scsi.phase);
@@ -1073,7 +1114,7 @@ fas216_reselected_intr(FAS216_Info *info)
ok = 0;
if (info->scsi.disconnectable && info->SCpnt &&
- info->SCpnt->target == target && info->SCpnt->lun == identify_msg)
+ info->SCpnt->device->id == target && info->SCpnt->device->lun == identify_msg)
ok = 1;
if (!ok && queue_probetgtlun(&info->queues.disconnected, target, identify_msg))
@@ -1118,15 +1159,15 @@ fas216_finish_reconnect(FAS216_Info *info)
fas216_checkmagic(info);
fas216_log(info, LOG_CONNECT, "Connected: %1x %1x %02x, reconnected: %1x %1x %02x",
- info->SCpnt->target, info->SCpnt->lun, info->SCpnt->tag,
+ info->SCpnt->device->id, info->SCpnt->device->lun, info->SCpnt->tag,
info->scsi.reconnected.target, info->scsi.reconnected.lun,
info->scsi.reconnected.tag);
if (info->scsi.disconnectable && info->SCpnt) {
info->scsi.disconnectable = 0;
- if (info->SCpnt->target == info->scsi.reconnected.target &&
- info->SCpnt->lun == info->scsi.reconnected.lun &&
- info->SCpnt->tag == info->scsi.reconnected.tag) {
+ if (info->SCpnt->device->id == info->scsi.reconnected.target &&
+ info->SCpnt->device->lun == info->scsi.reconnected.lun &&
+ info->SCpnt->tag == info->scsi.reconnected.tag) {
fas216_log(info, LOG_CONNECT, "reconnected");
} else {
queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt);
@@ -1617,13 +1658,13 @@ static void fas216_busservice_intr(FAS216_Info *info, unsigned int stat, unsigne
* set of messages. If we have more than one byte to
* send, we need to assert ATN again.
*/
- if (info->device[info->SCpnt->target].parity_check) {
+ if (info->device[info->SCpnt->device->id].parity_check) {
/*
* We were testing... good, the device
* supports parity checking.
*/
- info->device[info->SCpnt->target].parity_check = 0;
- info->device[info->SCpnt->target].parity_enabled = 1;
+ info->device[info->SCpnt->device->id].parity_check = 0;
+ info->device[info->SCpnt->device->id].parity_enabled = 1;
fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
}
@@ -1831,11 +1872,11 @@ static void __fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
fas216_cmd(info, CMD_FLUSHFIFO);
/* load bus-id and timeout */
- fas216_writeb(info, REG_SDID, BUSID(SCpnt->target));
+ fas216_writeb(info, REG_SDID, BUSID(SCpnt->device->id));
fas216_writeb(info, REG_STIM, info->ifcfg.select_timeout);
/* synchronous transfers */
- fas216_set_sync(info, SCpnt->target);
+ fas216_set_sync(info, SCpnt->device->id);
tot_msglen = msgqueue_msglength(&info->scsi.msgs);
@@ -1845,7 +1886,7 @@ static void __fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
int msgnr = 0, i;
printk("scsi%d.%c: message out: ",
- info->host->host_no, '0' + SCpnt->target);
+ info->host->host_no, '0' + SCpnt->device->id);
while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) {
printk("{ ");
for (i = 0; i < msg->length; i++)
@@ -1923,7 +1964,7 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
info->SCpnt = SCpnt;
info->dma.transfer_type = fasdma_none;
- if (parity_test(info, SCpnt->target))
+ if (parity_test(info, SCpnt->device->id))
fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0] | CNTL1_PTE);
else
fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
@@ -1932,13 +1973,13 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
* Don't allow request sense commands to disconnect.
*/
disconnect_ok = SCpnt->cmnd[0] != REQUEST_SENSE &&
- info->device[SCpnt->target].disconnect_ok;
+ info->device[SCpnt->device->id].disconnect_ok;
/*
* build outgoing message bytes
*/
msgqueue_flush(&info->scsi.msgs);
- msgqueue_addmsg(&info->scsi.msgs, 1, IDENTIFY(disconnect_ok, SCpnt->lun));
+ msgqueue_addmsg(&info->scsi.msgs, 1, IDENTIFY(disconnect_ok, SCpnt->device->lun));
/*
* add tag message if required
@@ -1948,8 +1989,8 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
do {
#ifdef SCSI2_WIDE
- if (info->device[SCpnt->target].wide_state == neg_wait) {
- info->device[SCpnt->target].wide_state = neg_inprogress;
+ if (info->device[SCpnt->device->id].wide_state == neg_wait) {
+ info->device[SCpnt->device->id].wide_state = neg_inprogress;
msgqueue_addmsg(&info->scsi.msgs, 4,
EXTENDED_MESSAGE, 2, EXTENDED_WDTR,
info->ifcfg.wide_max_size);
@@ -1957,11 +1998,11 @@ static void fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
}
#endif
#ifdef SCSI2_SYNC
- if ((info->device[SCpnt->target].sync_state == neg_wait ||
- info->device[SCpnt->target].sync_state == neg_complete) &&
+ if ((info->device[SCpnt->device->id].sync_state == neg_wait ||
+ info->device[SCpnt->device->id].sync_state == neg_complete) &&
(SCpnt->cmnd[0] == REQUEST_SENSE ||
SCpnt->cmnd[0] == INQUIRY)) {
- info->device[SCpnt->target].sync_state = neg_inprogress;
+ info->device[SCpnt->device->id].sync_state = neg_inprogress;
msgqueue_addmsg(&info->scsi.msgs, 5,
EXTENDED_MESSAGE, 3, EXTENDED_SDTR,
1000 / info->ifcfg.clockrate,
@@ -1988,7 +2029,7 @@ static void fas216_allocate_tag(FAS216_Info *info, Scsi_Cmnd *SCpnt)
SCpnt->tag = SCpnt->device->current_tag;
} else
#endif
- set_bit(SCpnt->target * 8 + SCpnt->lun, info->busyluns);
+ set_bit(SCpnt->device->id * 8 + SCpnt->device->lun, info->busyluns);
info->stats.removes += 1;
switch (SCpnt->cmnd[0]) {
@@ -2033,11 +2074,11 @@ static void fas216_do_bus_device_reset(FAS216_Info *info, Scsi_Cmnd *SCpnt)
fas216_cmd(info, CMD_FLUSHFIFO);
/* load bus-id and timeout */
- fas216_writeb(info, REG_SDID, BUSID(SCpnt->target));
+ fas216_writeb(info, REG_SDID, BUSID(SCpnt->device->id));
fas216_writeb(info, REG_STIM, info->ifcfg.select_timeout);
/* synchronous transfers */
- fas216_set_sync(info, SCpnt->target);
+ fas216_set_sync(info, SCpnt->device->id);
msg = msgqueue_getmsg(&info->scsi.msgs, 0);
@@ -2102,7 +2143,7 @@ static void fas216_kick(FAS216_Info *info)
if (info->scsi.disconnectable && info->SCpnt) {
fas216_log(info, LOG_CONNECT,
"moved command for %d to disconnected queue",
- info->SCpnt->target);
+ info->SCpnt->device->id);
queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt);
info->scsi.disconnectable = 0;
info->SCpnt = NULL;
@@ -2155,7 +2196,7 @@ fas216_devicereset_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result
static void
fas216_rq_sns_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
{
- fas216_log_target(info, LOG_CONNECT, SCpnt->target,
+ fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
"request sense complete, result=0x%04x%02x%02x",
result, SCpnt->SCp.Message, SCpnt->SCp.Status);
@@ -2166,7 +2207,7 @@ fas216_rq_sns_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
* confuse the higher levels.
*/
memset(SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer));
-//printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->target);
+//printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->device->id);
//{ int i; for (i = 0; i < 32; i++) printk("%02x ", SCpnt->sense_buffer[i]); printk("\n"); }
/*
* Note that we don't set SCpnt->result, since that should
@@ -2235,7 +2276,7 @@ fas216_std_done(FAS216_Info *info, Scsi_Cmnd *SCpnt, unsigned int result)
default:
printk(KERN_ERR "scsi%d.%c: incomplete data transfer "
"detected: res=%08X ptr=%p len=%X CDB: ",
- info->host->host_no, '0' + SCpnt->target,
+ info->host->host_no, '0' + SCpnt->device->id,
SCpnt->result, info->scsi.SCp.ptr,
info->scsi.SCp.this_residual);
print_command(SCpnt->cmnd);
@@ -2259,11 +2300,11 @@ request_sense:
if (SCpnt->cmnd[0] == REQUEST_SENSE)
goto done;
- fas216_log_target(info, LOG_CONNECT, SCpnt->target,
+ fas216_log_target(info, LOG_CONNECT, SCpnt->device->id,
"requesting sense");
memset(SCpnt->cmnd, 0, sizeof (SCpnt->cmnd));
SCpnt->cmnd[0] = REQUEST_SENSE;
- SCpnt->cmnd[1] = SCpnt->lun << 5;
+ SCpnt->cmnd[1] = SCpnt->device->lun << 5;
SCpnt->cmnd[4] = sizeof(SCpnt->sense_buffer);
SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
SCpnt->SCp.buffer = NULL;
@@ -2285,7 +2326,7 @@ request_sense:
*/
if (info->reqSCpnt)
printk(KERN_WARNING "scsi%d.%c: loosing request command\n",
- info->host->host_no, '0' + SCpnt->target);
+ info->host->host_no, '0' + SCpnt->device->id);
info->reqSCpnt = SCpnt;
}
@@ -2324,7 +2365,7 @@ static void fas216_done(FAS216_Info *info, unsigned int result)
if (info->scsi.SCp.ptr && info->scsi.SCp.this_residual == 0) {
printk("scsi%d.%c: zero bytes left to transfer, but "
"buffer pointer still valid: ptr=%p len=%08x CDB: ",
- info->host->host_no, '0' + SCpnt->target,
+ info->host->host_no, '0' + SCpnt->device->id,
info->scsi.SCp.ptr, info->scsi.SCp.this_residual);
info->scsi.SCp.ptr = NULL;
print_command(SCpnt->cmnd);
@@ -2335,8 +2376,8 @@ static void fas216_done(FAS216_Info *info, unsigned int result)
* the sense information, fas216_kick will re-assert the busy
* status.
*/
- info->device[SCpnt->target].parity_check = 0;
- clear_bit(SCpnt->target * 8 + SCpnt->lun, info->busyluns);
+ info->device[SCpnt->device->id].parity_check = 0;
+ clear_bit(SCpnt->device->id * 8 + SCpnt->device->lun, info->busyluns);
fn = (void (*)(FAS216_Info *, Scsi_Cmnd *, unsigned int))SCpnt->host_scribble;
fn(info, SCpnt, result);
@@ -2365,7 +2406,7 @@ no_command:
*/
int fas216_queue_command(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
int result;
fas216_checkmagic(info);
@@ -2412,7 +2453,7 @@ int fas216_queue_command(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
*/
static void fas216_internal_done(Scsi_Cmnd *SCpnt)
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
fas216_checkmagic(info);
@@ -2429,7 +2470,7 @@ static void fas216_internal_done(Scsi_Cmnd *SCpnt)
*/
int fas216_command(Scsi_Cmnd *SCpnt)
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
fas216_checkmagic(info);
@@ -2555,7 +2596,7 @@ static enum res_find fas216_find_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
* been set.
*/
info->origSCpnt = NULL;
- clear_bit(SCpnt->target * 8 + SCpnt->lun, info->busyluns);
+ clear_bit(SCpnt->device->id * 8 + SCpnt->device->lun, info->busyluns);
printk("waiting for execution ");
res = res_success;
} else
@@ -2574,7 +2615,7 @@ static enum res_find fas216_find_command(FAS216_Info *info, Scsi_Cmnd *SCpnt)
*/
int fas216_eh_abort(Scsi_Cmnd *SCpnt)
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
int result = FAILED;
fas216_checkmagic(info);
@@ -2631,9 +2672,9 @@ int fas216_eh_abort(Scsi_Cmnd *SCpnt)
*/
int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
unsigned long flags;
- int i, res = FAILED, target = SCpnt->target;
+ int i, res = FAILED, target = SCpnt->device->id;
fas216_log(info, LOG_ERROR, "device reset for target %d", target);
@@ -2647,7 +2688,7 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
* and we need a bus reset.
*/
if (info->SCpnt && !info->scsi.disconnectable &&
- info->SCpnt->target == SCpnt->target)
+ info->SCpnt->device->id == SCpnt->device->id)
break;
/*
@@ -2658,9 +2699,9 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
*/
queue_remove_all_target(&info->queues.issue, target);
queue_remove_all_target(&info->queues.disconnected, target);
- if (info->origSCpnt && info->origSCpnt->target == target)
+ if (info->origSCpnt && info->origSCpnt->device->id == target)
info->origSCpnt = NULL;
- if (info->reqSCpnt && info->reqSCpnt->target == target)
+ if (info->reqSCpnt && info->reqSCpnt->device->id == target)
info->reqSCpnt = NULL;
for (i = 0; i < 8; i++)
clear_bit(target * 8 + i, info->busyluns);
@@ -2712,7 +2753,7 @@ int fas216_eh_device_reset(Scsi_Cmnd *SCpnt)
*/
int fas216_eh_bus_reset(Scsi_Cmnd *SCpnt)
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
unsigned long flags;
Scsi_Device *SDpnt;
@@ -2750,9 +2791,9 @@ int fas216_eh_bus_reset(Scsi_Cmnd *SCpnt)
queue_remove_all_target(&info->queues.issue, SDpnt->id);
queue_remove_all_target(&info->queues.disconnected, SDpnt->id);
- if (info->origSCpnt && info->origSCpnt->target == SDpnt->id)
+ if (info->origSCpnt && info->origSCpnt->device->id == SDpnt->id)
info->origSCpnt = NULL;
- if (info->reqSCpnt && info->reqSCpnt->target == SDpnt->id)
+ if (info->reqSCpnt && info->reqSCpnt->device->id == SDpnt->id)
info->reqSCpnt = NULL;
info->SCpnt = NULL;
@@ -2809,12 +2850,12 @@ static void fas216_init_chip(FAS216_Info *info)
*/
int fas216_eh_host_reset(Scsi_Cmnd *SCpnt)
{
- FAS216_Info *info = (FAS216_Info *)SCpnt->host->hostdata;
+ FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
fas216_checkmagic(info);
printk("scsi%d.%c: %s: resetting host\n",
- info->host->host_no, '0' + SCpnt->target, __FUNCTION__);
+ info->host->host_no, '0' + SCpnt->device->id, __FUNCTION__);
/*
* Reset the SCSI chip.
diff --git a/drivers/acorn/scsi/queue.c b/drivers/acorn/scsi/queue.c
index b7e585490122..eae5a8d180df 100644
--- a/drivers/acorn/scsi/queue.c
+++ b/drivers/acorn/scsi/queue.c
@@ -170,7 +170,7 @@ Scsi_Cmnd *queue_remove_exclude(Queue_t *queue, unsigned long *exclude)
spin_lock_irqsave(&queue->queue_lock, flags);
list_for_each(l, &queue->head) {
QE_t *q = list_entry(l, QE_t, list);
- if (!test_bit(q->SCpnt->target * 8 + q->SCpnt->lun, exclude)) {
+ if (!test_bit(q->SCpnt->device->id * 8 + q->SCpnt->device->lun, exclude)) {
SCpnt = __queue_remove(queue, l);
break;
}
@@ -217,7 +217,7 @@ Scsi_Cmnd *queue_remove_tgtluntag (Queue_t *queue, int target, int lun, int tag)
spin_lock_irqsave(&queue->queue_lock, flags);
list_for_each(l, &queue->head) {
QE_t *q = list_entry(l, QE_t, list);
- if (q->SCpnt->target == target && q->SCpnt->lun == lun &&
+ if (q->SCpnt->device->id == target && q->SCpnt->device->lun == lun &&
q->SCpnt->tag == tag) {
SCpnt = __queue_remove(queue, l);
break;
@@ -243,7 +243,7 @@ void queue_remove_all_target(Queue_t *queue, int target)
spin_lock_irqsave(&queue->queue_lock, flags);
list_for_each(l, &queue->head) {
QE_t *q = list_entry(l, QE_t, list);
- if (q->SCpnt->target == target)
+ if (q->SCpnt->device->id == target)
__queue_remove(queue, l);
}
spin_unlock_irqrestore(&queue->queue_lock, flags);
@@ -267,7 +267,7 @@ int queue_probetgtlun (Queue_t *queue, int target, int lun)
spin_lock_irqsave(&queue->queue_lock, flags);
list_for_each(l, &queue->head) {
QE_t *q = list_entry(l, QE_t, list);
- if (q->SCpnt->target == target && q->SCpnt->lun == lun) {
+ if (q->SCpnt->device->id == target && q->SCpnt->device->lun == lun) {
found = 1;
break;
}
diff --git a/drivers/acorn/scsi/scsi.h b/drivers/acorn/scsi/scsi.h
index 0eb2c8a0daae..c3d78d39e470 100644
--- a/drivers/acorn/scsi/scsi.h
+++ b/drivers/acorn/scsi/scsi.h
@@ -92,8 +92,8 @@ static inline void init_SCp(Scsi_Cmnd *SCpnt)
if (SCpnt->request_bufflen != len)
printk(KERN_WARNING "scsi%d.%c: bad request buffer "
- "length %d, should be %ld\n", SCpnt->host->host_no,
- '0' + SCpnt->target, SCpnt->request_bufflen, len);
+ "length %d, should be %ld\n", SCpnt->device->host->host_no,
+ '0' + SCpnt->device->id, SCpnt->request_bufflen, len);
SCpnt->request_bufflen = len;
#endif
} else {
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 7f4cac66fb97..c72f8a1594a3 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -436,7 +436,7 @@ acpi_thermal_call_usermode (
envp[0] = "HOME=/";
envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
- call_usermodehelper(argv[0], argv, envp);
+ call_usermodehelper(argv[0], argv, envp, 0);
return_VALUE(0);
}
diff --git a/drivers/base/hotplug.c b/drivers/base/hotplug.c
index 6c66892b23cb..503522d25906 100644
--- a/drivers/base/hotplug.c
+++ b/drivers/base/hotplug.c
@@ -114,7 +114,7 @@ static int do_hotplug (struct device *dev, char *argv1, const char *action,
pr_debug ("%s: %s %s %s %s %s %s\n", __FUNCTION__, argv [0], argv[1],
envp[0], envp[1], envp[2], envp[3]);
- retval = call_usermodehelper (argv [0], argv, envp);
+ retval = call_usermodehelper (argv [0], argv, envp, 0);
if (retval)
pr_debug ("%s - call_usermodehelper returned %d\n",
__FUNCTION__, retval);
diff --git a/drivers/block/deadline-iosched.c b/drivers/block/deadline-iosched.c
index d49754178f5a..012269836bef 100644
--- a/drivers/block/deadline-iosched.c
+++ b/drivers/block/deadline-iosched.c
@@ -297,6 +297,9 @@ static void deadline_remove_request(request_queue_t *q, struct request *rq)
deadline_del_drq_rb(dd, drq);
}
+ if (q->last_merge == &rq->queuelist)
+ q->last_merge = NULL;
+
list_del_init(&rq->queuelist);
}
@@ -424,12 +427,7 @@ deadline_move_to_dispatch(struct deadline_data *dd, struct deadline_rq *drq)
{
request_queue_t *q = drq->request->q;
- if (q->last_merge == &drq->request->queuelist)
- q->last_merge = NULL;
-
- deadline_del_drq_hash(drq);
- deadline_del_drq_rb(dd, drq);
- list_del_init(&drq->fifo);
+ deadline_remove_request(q, drq->request);
list_add_tail(&drq->request->queuelist, dd->dispatch);
}
diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c
index 5a1183f014b9..f2986f88282e 100644
--- a/drivers/block/elevator.c
+++ b/drivers/block/elevator.c
@@ -399,7 +399,7 @@ struct request *elv_former_request(request_queue_t *q, struct request *rq)
elevator_t *e = &q->elevator;
if (e->elevator_former_req_fn)
- return e->elevator_latter_req_fn(q, rq);
+ return e->elevator_former_req_fn(q, rq);
prev = rq->queuelist.prev;
if (prev != &q->queue_head && prev != &rq->queuelist)
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c
index de14aeafa20c..b755a362dc11 100644
--- a/drivers/bluetooth/bt3c_cs.c
+++ b/drivers/bluetooth/bt3c_cs.c
@@ -24,18 +24,14 @@
#include <linux/config.h>
#include <linux/module.h>
-#define __KERNEL_SYSCALLS__
-
#include <linux/kernel.h>
#include <linux/kmod.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/sched.h>
-#include <linux/delay.h>
#include <linux/timer.h>
#include <linux/errno.h>
-#include <linux/unistd.h>
#include <linux/ptrace.h>
#include <linux/ioport.h>
#include <linux/spinlock.h>
@@ -405,7 +401,6 @@ void bt3c_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
-
/* ======================== HCI interface ======================== */
@@ -489,65 +484,23 @@ static int bt3c_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long
#define FW_LOADER "/sbin/bluefw"
-static int errno;
-
-
-static int bt3c_fw_loader_exec(void *dev)
-{
- char *argv[] = { FW_LOADER, "pccard", dev, NULL };
- char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
- int err;
-
- err = exec_usermodehelper(FW_LOADER, argv, envp);
- if (err)
- printk(KERN_WARNING "bt3c_cs: Failed to exec \"%s pccard %s\".\n", FW_LOADER, (char *)dev);
-
- return err;
-}
static int bt3c_firmware_load(bt3c_info_t *info)
{
- sigset_t tmpsig;
char dev[16];
- pid_t pid;
- int result;
+ int err;
- /* Check if root fs is mounted */
- if (!current->fs->root) {
- printk(KERN_WARNING "bt3c_cs: Root filesystem is not mounted.\n");
- return -EPERM;
- }
+ char *argv[] = { FW_LOADER, "pccard", dev, NULL };
+ char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
sprintf(dev, "%04x", info->link.io.BasePort1);
- pid = kernel_thread(bt3c_fw_loader_exec, (void *)dev, 0);
- if (pid < 0) {
- printk(KERN_WARNING "bt3c_cs: Forking of kernel thread failed (errno=%d).\n", -pid);
- return pid;
- }
-
- /* Block signals, everything but SIGKILL/SIGSTOP */
- spin_lock_irq(&current->sighand->siglock);
- tmpsig = current->blocked;
- siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP));
- recalc_sigpending();
- spin_unlock_irq(&current->sighand->siglock);
-
- result = waitpid(pid, NULL, __WCLONE);
-
- /* Allow signals again */
- spin_lock_irq(&current->sighand->siglock);
- current->blocked = tmpsig;
- recalc_sigpending();
- spin_unlock_irq(&current->sighand->siglock);
-
- if (result != pid) {
- printk(KERN_WARNING "bt3c_cs: Waiting for pid %d failed (errno=%d).\n", pid, -result);
- return -result;
- }
+ err = call_usermodehelper(FW_LOADER, argv, envp, 1);
+ if (err)
+ printk(KERN_WARNING "bt3c_cs: Failed to run \"%s pccard %s\" (errno=%d).\n", FW_LOADER, dev, err);
- return 0;
+ return err;
}
diff --git a/drivers/char/rio/rioboot.c b/drivers/char/rio/rioboot.c
index 7bfa59a1ce88..095c674ff9bd 100644
--- a/drivers/char/rio/rioboot.c
+++ b/drivers/char/rio/rioboot.c
@@ -410,7 +410,7 @@ register struct DownLoad *rbp;
** compatible with the whole Tp family. (lies, damn lies, it'll never
** work in a month of Sundays).
**
- ** The nfix nyble is the 1s compliment of the nyble value you
+ ** The nfix nyble is the 1s complement of the nyble value you
** want to load - in this case we wanted 'F' so we nfix loaded '0'.
*/
diff --git a/drivers/char/watchdog/wdt285.c b/drivers/char/watchdog/wdt285.c
index c9a6fac7404d..4670d3d2d4f6 100644
--- a/drivers/char/watchdog/wdt285.c
+++ b/drivers/char/watchdog/wdt285.c
@@ -37,18 +37,14 @@
*/
#undef ONLY_TESTING
-#define TIMER_MARGIN 60 /* (secs) Default is 1 minute */
-
-#define FCLK (50*1000*1000) /* 50MHz */
-
-static int soft_margin = TIMER_MARGIN; /* in seconds */
-static int timer_alive;
+static unsigned int soft_margin = 60; /* in seconds */
+static unsigned int reload;
+static unsigned long timer_alive;
#ifdef ONLY_TESTING
/*
* If the timer expires..
*/
-
static void watchdog_fire(int irq, void *dev_id, struct pt_regs *regs)
{
printk(KERN_CRIT "Watchdog: Would Reboot.\n");
@@ -57,109 +53,134 @@ static void watchdog_fire(int irq, void *dev_id, struct pt_regs *regs)
}
#endif
+/*
+ * Refresh the timer.
+ */
static void watchdog_ping(void)
{
- /*
- * Refresh the timer.
- */
- *CSR_TIMER4_LOAD = soft_margin * (FCLK / 256);
+ *CSR_TIMER4_LOAD = reload;
}
/*
* Allow only one person to hold it open
*/
-
static int watchdog_open(struct inode *inode, struct file *file)
{
- if(timer_alive)
+ int ret;
+
+ if (*CSR_SA110_CNTL & (1 << 13))
return -EBUSY;
- /*
- * Ahead watchdog factor ten, Mr Sulu
- */
+
+ if (test_and_set_bit(1, &timer_alive))
+ return -EBUSY;
+
+ reload = soft_margin * (mem_fclk_21285 / 256);
+
*CSR_TIMER4_CLR = 0;
watchdog_ping();
*CSR_TIMER4_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD
| TIMER_CNTL_DIV256;
+
#ifdef ONLY_TESTING
- request_irq(IRQ_TIMER4, watchdog_fire, 0, "watchdog", NULL);
+ ret = request_irq(IRQ_TIMER4, watchdog_fire, 0, "watchdog", NULL);
+ if (ret) {
+ *CSR_TIMER4_CNTL = 0;
+ clear_bit(1, &timer_alive);
+ }
#else
+ /*
+ * Setting this bit is irreversible; once enabled, there is
+ * no way to disable the watchdog.
+ */
*CSR_SA110_CNTL |= 1 << 13;
- MOD_INC_USE_COUNT;
+
+ ret = 0;
#endif
- timer_alive = 1;
- return 0;
+ return ret;
}
+/*
+ * Shut off the timer.
+ * Note: if we really have enabled the watchdog, there
+ * is no way to turn off.
+ */
static int watchdog_release(struct inode *inode, struct file *file)
{
#ifdef ONLY_TESTING
free_irq(IRQ_TIMER4, NULL);
- timer_alive = 0;
-#else
- /*
- * It's irreversible!
- */
+ clear_bit(1, &timer_alive);
#endif
return 0;
}
-static ssize_t watchdog_write(struct file *file, const char *data, size_t len, loff_t *ppos)
+static ssize_t
+watchdog_write(struct file *file, const char *data, size_t len, loff_t *ppos)
{
- /* Can't seek (pwrite) on this device */
+ /* Can't seek (pwrite) on this device */
if (ppos != &file->f_pos)
return -ESPIPE;
/*
* Refresh the timer.
*/
- if(len)
- {
+ if (len)
watchdog_ping();
- return 1;
- }
- return 0;
+
+ return len;
}
-static int watchdog_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg)
+static struct watchdog_info ident = {
+ .options = WDIOF_SETTIMEOUT,
+ .identity = "Footbridge Watchdog"
+};
+
+static int
+watchdog_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
+ unsigned long arg)
{
- int i, new_margin;
- static struct watchdog_info ident=
- {
- WDIOF_SETTIMEOUT,
- 0,
- "Footbridge Watchdog"
- };
- switch(cmd)
- {
- default:
- return -ENOTTY;
- case WDIOC_GETSUPPORT:
- if(copy_to_user((struct watchdog_info *)arg, &ident, sizeof(ident)))
- return -EFAULT;
- return 0;
- case WDIOC_GETSTATUS:
- case WDIOC_GETBOOTSTATUS:
- return put_user(0,(int *)arg);
- case WDIOC_KEEPALIVE:
- watchdog_ping();
- return 0;
- case WDIOC_SETTIMEOUT:
- if (get_user(new_margin, (int *)arg))
- return -EFAULT;
- /* Arbitrary, can't find the card's limits */
- if ((new_marg < 0) || (new_margin > 60))
- return -EINVAL;
- soft_margin = new_margin;
- watchdog_ping();
- /* Fall */
- case WDIOC_GETTIMEOUT:
- return put_user(soft_margin, (int *)arg);
+ unsigned int new_margin;
+ int ret = -ENOIOCTLCMD;
+
+ switch(cmd) {
+ case WDIOC_GETSUPPORT:
+ ret = 0;
+ if (copy_to_user((void *)arg, &ident, sizeof(ident)))
+ ret = -EFAULT;
+ break;
+
+ case WDIOC_GETSTATUS:
+ case WDIOC_GETBOOTSTATUS:
+ ret = put_user(0,(int *)arg);
+ break;
+
+ case WDIOC_KEEPALIVE:
+ watchdog_ping();
+ ret = 0;
+ break;
+
+ case WDIOC_SETTIMEOUT:
+ ret = get_user(new_margin, (int *)arg);
+ if (ret)
+ break;
+
+ /* Arbitrary, can't find the card's limits */
+ if (new_margin < 0 || new_margin > 60) {
+ ret = -EINVAL;
+ break;
+ }
+
+ soft_margin = new_margin;
+ reload = soft_margin * (mem_fclk_21285 / 256);
+ watchdog_ping();
+ /* Fall */
+ case WDIOC_GETTIMEOUT:
+ ret = put_user(soft_margin, (int *)arg);
+ break;
}
+ return ret;
}
-static struct file_operations watchdog_fops=
-{
+static struct file_operations watchdog_fops = {
.owner = THIS_MODULE,
.write = watchdog_write,
.ioctl = watchdog_ioctl,
@@ -167,11 +188,10 @@ static struct file_operations watchdog_fops=
.release = watchdog_release,
};
-static struct miscdevice watchdog_miscdev=
-{
- WATCHDOG_MINOR,
- "watchdog",
- &watchdog_fops
+static struct miscdevice watchdog_miscdev = {
+ .minor = WATCHDOG_MINOR,
+ .name = "watchdog",
+ .fops = &watchdog_fops
};
static int __init footbridge_watchdog_init(void)
@@ -182,11 +202,12 @@ static int __init footbridge_watchdog_init(void)
return -ENODEV;
retval = misc_register(&watchdog_miscdev);
- if(retval < 0)
+ if (retval < 0)
return retval;
printk("Footbridge Watchdog Timer: 0.01, timer margin: %d sec\n",
soft_margin);
+
if (machine_is_cats())
printk("Warning: Watchdog reset may not work on this machine.\n");
return 0;
@@ -198,7 +219,7 @@ static void __exit footbridge_watchdog_exit(void)
}
MODULE_AUTHOR("Phil Blundell <pb@nexus.co.uk>");
-MODULE_DESCRIPTION("21285 watchdog driver");
+MODULE_DESCRIPTION("Footbridge watchdog driver");
MODULE_LICENSE("GPL");
MODULE_PARM(soft_margin,"i");
diff --git a/drivers/char/watchdog/wdt977.c b/drivers/char/watchdog/wdt977.c
index 49925dadfe55..80a4a7daebb6 100644
--- a/drivers/char/watchdog/wdt977.c
+++ b/drivers/char/watchdog/wdt977.c
@@ -58,7 +58,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CON
/* This is kicking the watchdog by simply re-writing the timeout to reg. 0xF2 */
-int kick_wdog(void)
+static int kick_wdog(void)
{
/*
* Refresh the timer.
@@ -216,21 +216,20 @@ static int wdt977_release(struct inode *inode, struct file *file)
static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
- /* Can't seek (pwrite) on this device */
+ /* Can't seek (pwrite) on this device */
if (ppos != &file->f_pos)
return -ESPIPE;
- if(count)
- {
+ if (count) {
if (!nowayout) {
size_t i;
/* In case it was set long ago */
expect_close = 0;
- for (i = 0; i != len; i++) {
+ for (i = 0; i != count; i++) {
char c;
- if (get_user(c, data + i))
+ if (get_user(c, buf + i))
return -EFAULT;
if (c == 'V')
expect_close = 1;
@@ -238,9 +237,8 @@ static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, lo
}
kick_wdog();
- return 1;
}
- return 0;
+ return count;
}
/*
@@ -254,14 +252,15 @@ static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, lo
* according to their available features.
*/
-static int wdt977_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg)
-{
static struct watchdog_info ident = {
- .identity = "Winbond 83977"
+ .options = WDIOF_SETTIMEOUT,
+ .identity = "Winbond 83977"
};
-int temp;
+static int wdt977_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ int temp;
switch(cmd)
{
@@ -337,9 +336,9 @@ static struct file_operations wdt977_fops=
static struct miscdevice wdt977_miscdev=
{
- WATCHDOG_MINOR,
- "watchdog",
- &wdt977_fops
+ .minor = WATCHDOG_MINOR,
+ .name = "watchdog",
+ .fops = &wdt977_fops
};
static int __init nwwatchdog_init(void)
@@ -360,4 +359,5 @@ static void __exit nwwatchdog_exit(void)
module_init(nwwatchdog_init);
module_exit(nwwatchdog_exit);
+MODULE_DESCRIPTION("W83977AF Watchdog driver");
MODULE_LICENSE("GPL");
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index d837f3a76812..fe4647c6c340 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -311,7 +311,7 @@ unsigned int __init init_chipset_amd74xx(struct pci_dev *dev, const char *name)
amd_80w = ((u & 0x3) ? 1 : 0) | ((u & 0xc) ? 2 : 0);
for (i = 24; i >= 0; i -= 8)
if (((u >> i) & 4) && !(amd_80w & (1 << (1 - (i >> 4))))) {
- printk(KERN_WARNING "AMD_IDE: Bios didn't set cable bits corectly. Enabling workaround.\n");
+ printk(KERN_WARNING "AMD_IDE: Bios didn't set cable bits correctly. Enabling workaround.\n");
amd_80w |= (1 << (1 - (i >> 4)));
}
break;
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c
index ef8a00dc076e..970aa1e09de6 100644
--- a/drivers/ieee1394/nodemgr.c
+++ b/drivers/ieee1394/nodemgr.c
@@ -786,7 +786,7 @@ static void nodemgr_call_policy(char *verb, struct unit_directory *ud)
#ifdef CONFIG_IEEE1394_VERBOSEDEBUG
HPSB_DEBUG("NodeMgr: %s %s %016Lx", argv[0], verb, (long long unsigned)ud->ne->guid);
#endif
- value = call_usermodehelper(argv[0], argv, envp);
+ value = call_usermodehelper(argv[0], argv, envp, 0);
kfree(buf);
kfree(envp);
if (value != 0)
diff --git a/drivers/input/input.c b/drivers/input/input.c
index fdfe4150aafa..30796fc98f74 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -383,7 +383,7 @@ static void input_call_hotplug(char *verb, struct input_dev *dev)
argv[0], argv[1], envp[0], envp[1], envp[2], envp[3], envp[4]);
#endif
- value = call_usermodehelper(argv [0], argv, envp);
+ value = call_usermodehelper(argv [0], argv, envp, 0);
kfree(buf);
kfree(envp);
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c
index df3466ca660d..f4c69da7c7bd 100644
--- a/drivers/input/serio/sa1111ps2.c
+++ b/drivers/input/serio/sa1111ps2.c
@@ -9,6 +9,7 @@
*/
#include <linux/module.h>
#include <linux/init.h>
+#include <linux/input.h>
#include <linux/serio.h>
#include <linux/errno.h>
#include <linux/interrupt.h>
@@ -339,6 +340,7 @@ static struct sa1111_driver ps2_driver = {
.drv = {
.name = "sa1111-ps2",
.bus = &sa1111_bus_type,
+ .devclass = &input_devclass,
.probe = ps2_probe,
.remove = ps2_remove,
.suspend = ps2_suspend,
diff --git a/drivers/isdn/hardware/eicon/divasmain.c b/drivers/isdn/hardware/eicon/divasmain.c
index bac79a46bd73..7bc8c445c7cf 100644
--- a/drivers/isdn/hardware/eicon/divasmain.c
+++ b/drivers/isdn/hardware/eicon/divasmain.c
@@ -263,7 +263,7 @@ static void diva_adapter_trapped(void *context)
pdpc->card_failed = 0;
argv[2] = &adapter[0];
- ret = call_usermodehelper(argv[0], argv, envp);
+ ret = call_usermodehelper(argv[0], argv, envp, 0);
if (ret) {
printk(KERN_ERR
diff --git a/drivers/isdn/hisax/amd7930_fn.c b/drivers/isdn/hisax/amd7930_fn.c
index 40085c40e448..e62bac451ae7 100644
--- a/drivers/isdn/hisax/amd7930_fn.c
+++ b/drivers/isdn/hisax/amd7930_fn.c
@@ -176,7 +176,7 @@ Amd7930_new_ph(struct IsdnCardState *cs)
cs->dc.amd7930.old_state = cs->dc.amd7930.ph_state;
- /* abort transmit if nessesary */
+ /* abort transmit if necessary */
if ((message & 0xf0) && (cs->tx_skb)) {
wByteAMD(cs, 0x21, 0xC2);
wByteAMD(cs, 0x21, 0x02);
diff --git a/drivers/mtd/chips/jedec.c b/drivers/mtd/chips/jedec.c
index 337d0d22bfb0..507b7e513c17 100644
--- a/drivers/mtd/chips/jedec.c
+++ b/drivers/mtd/chips/jedec.c
@@ -754,7 +754,7 @@ static int flash_write(struct mtd_info *mtd, loff_t start, size_t len,
size_t *retlen, const u_char *buf)
{
/* Does IO to the currently selected chip. It takes the bank addressing
- base (which is divisable by the chip size) adds the necesary lower bits
+ base (which is divisible by the chip size) adds the necessary lower bits
of addrshift (interleve index) and then adds the control register index. */
#define flread(x) map->read8(map,base+(off&((1<<chip->addrshift)-1))+((x)<<chip->addrshift))
#define flwrite(v,x) map->write8(map,v,base+(off&((1<<chip->addrshift)-1))+((x)<<chip->addrshift))
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c
index 78e67542fbac..d85f6c42fa23 100644
--- a/drivers/mtd/maps/sa1100-flash.c
+++ b/drivers/mtd/maps/sa1100-flash.c
@@ -773,14 +773,15 @@ static struct mtd_partition stork_partitions[] = {
#ifdef CONFIG_SA1100_TRIZEPS
static struct mtd_partition trizeps_partitions[] = {
{
- .name = "Bootloader & the kernel",
- .size = 0x00200000,
+ .name = "Bootloader",
+ .size = 0x00100000,
.offset = 0,
}, {
- .name = "Data",
- .size = 0x00400000,
+ .name = "Kernel",
+ .size = 0x00100000,
.offset = MTDPART_OFS_APPEND,
}, {
+ .name = "root",
.size = MTDPART_SIZ_FULL,
.offset = MTDPART_OFS_APPEND,
}
@@ -937,7 +938,7 @@ static int __init sa1100_static_partitions(struct mtd_partition **parts)
#ifdef CONFIG_SA1100_TRIZEPS
if (machine_is_trizeps()) {
*parts = trizeps_partitions;
- nb_parts = ARRAY_SIZE(trizeps_parititons);
+ nb_parts = ARRAY_SIZE(trizeps_partitions);
}
#endif
#ifdef CONFIG_SA1100_YOPY
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c
index 084ff5219678..a846aa9ea76c 100644
--- a/drivers/net/8139too.c
+++ b/drivers/net/8139too.c
@@ -1589,7 +1589,7 @@ static int rtl8139_thread (void *data)
unsigned long timeout;
daemonize("%s", dev->name);
- allow_signal(SIGKILL);
+ allow_signal(SIGTERM);
while (1) {
timeout = next_tick;
diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c
index 93237b2af18a..0842e54df8bd 100644
--- a/drivers/net/hamradio/baycom_epp.c
+++ b/drivers/net/hamradio/baycom_epp.c
@@ -369,15 +369,14 @@ static char eppconfig_path[256] = "/usr/sbin/eppfpga";
static char *envp[] = { "HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL };
-static int errno;
-
-static int exec_eppfpga(void *b)
+/* eppconfig: called during ifconfig up to configure the modem */
+static int eppconfig(struct baycom_state *bc)
{
- struct baycom_state *bc = (struct baycom_state *)b;
char modearg[256];
char portarg[16];
- char *argv[] = { eppconfig_path, "-s", "-p", portarg, "-m", modearg, NULL};
- int i;
+ char *argv[] = { eppconfig_path, "-s", "-p", portarg, "-m", modearg,
+ NULL };
+ int ret;
/* set up arguments */
sprintf(modearg, "%sclk,%smodem,fclk=%d,bps=%d,divider=%d%s,extstat",
@@ -388,39 +387,7 @@ static int exec_eppfpga(void *b)
sprintf(portarg, "%ld", bc->pdev->port->base);
printk(KERN_DEBUG "%s: %s -s -p %s -m %s\n", bc_drvname, eppconfig_path, portarg, modearg);
- i = exec_usermodehelper(eppconfig_path, argv, envp);
- if (i < 0) {
- printk(KERN_ERR "%s: failed to exec %s -s -p %s -m %s, errno = %d\n",
- bc_drvname, eppconfig_path, portarg, modearg, i);
- return i;
- }
- return 0;
-}
-
-
-/* eppconfig: called during ifconfig up to configure the modem */
-
-static int eppconfig(struct baycom_state *bc)
-{
- int i, pid, r;
- mm_segment_t fs;
-
- pid = kernel_thread(exec_eppfpga, bc, CLONE_FS);
- if (pid < 0) {
- printk(KERN_ERR "%s: fork failed, errno %d\n", bc_drvname, -pid);
- return pid;
- }
- fs = get_fs();
- set_fs(KERNEL_DS); /* Allow i to be in kernel space. */
- r = waitpid(pid, &i, __WCLONE);
- set_fs(fs);
- if (r != pid) {
- printk(KERN_ERR "%s: waitpid(%d) failed, returning %d\n",
- bc_drvname, pid, r);
- return -1;
- }
- printk(KERN_DEBUG "%s: eppfpga returned %d\n", bc_drvname, i);
- return i;
+ return call_usermodehelper(eppconfig_path, argv, envp, 1);
}
/* ---------------------------------------------------------------------- */
diff --git a/drivers/net/shaper.c b/drivers/net/shaper.c
index 633d82960e60..ca371597680f 100644
--- a/drivers/net/shaper.c
+++ b/drivers/net/shaper.c
@@ -681,7 +681,7 @@ static int shapers = 1;
#ifdef MODULE
MODULE_PARM(shapers, "i");
-MODULE_PARM_DESC(shapers, "Traffic shaper: maximum nuber of shapers");
+MODULE_PARM_DESC(shapers, "Traffic shaper: maximum number of shapers");
#else /* MODULE */
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c
index 82944c33a021..cde17aa6823b 100644
--- a/drivers/pnp/pnpbios/core.c
+++ b/drivers/pnp/pnpbios/core.c
@@ -602,7 +602,7 @@ static int pnp_dock_event(int dock, struct pnp_docking_station_info *info)
info->location_id, info->serial, info->capabilities);
envp[i] = 0;
- value = call_usermodehelper (argv [0], argv, envp);
+ value = call_usermodehelper (argv [0], argv, envp, 0);
kfree (buf);
kfree (envp);
return 0;
diff --git a/drivers/scsi/aic7xxx/aic79xx.reg b/drivers/scsi/aic7xxx/aic79xx.reg
index 0138ca271031..2d22db151c8d 100644
--- a/drivers/scsi/aic7xxx/aic79xx.reg
+++ b/drivers/scsi/aic7xxx/aic79xx.reg
@@ -3725,7 +3725,7 @@ scratch_ram {
/*
* The minimum number of commands still outstanding required
- * to continue coalessing (2's compliment of value).
+ * to continue coalessing (2's complement of value).
*/
INT_COALESSING_MINCMDS {
size 1
diff --git a/drivers/usb/image/scanner.c b/drivers/usb/image/scanner.c
index 50b62d9f17d8..41c1f21f4221 100644
--- a/drivers/usb/image/scanner.c
+++ b/drivers/usb/image/scanner.c
@@ -54,7 +54,7 @@
* allocation/registration for linux-2.3.22+.
* - Adopted David Brownell's <david-b@pacbell.net> technique for
* assigning bulk endpoints.
- * - Removed unnessesary #include's
+ * - Removed unnecessary #include's
* - Scanner model now reported via syslog INFO after being detected
* *and* configured.
* - Added user specified vendor:product USB ID's which can be passed
diff --git a/fs/befs/ChangeLog b/fs/befs/ChangeLog
index 6774a4e815b2..33eb4822c609 100644
--- a/fs/befs/ChangeLog
+++ b/fs/befs/ChangeLog
@@ -102,7 +102,7 @@ Version 0.6 (2001-12-15)
The option is, simply enough, 'debug'.
(super.c, debug.c) [WD]
-* Removed notion of btree handle from btree.c. It was unessisary, as the
+* Removed notion of btree handle from btree.c. It was unnecessary, as the
linux VFS doesn't allow us to keep any state between calls. Updated
dir.c, namei.c befs_fs.h to account for it. [WD]
@@ -312,9 +312,9 @@ Version 0.4 (2001-10-28)
==========
* Fixed a misunderstanding of the inode fields.
This fixed the problmem with wrong file sizes from du and others.
- The i_blocks field of the inode struct is not the nuber of blocks for the
+ The i_blocks field of the inode struct is not the number of blocks for the
inode, it is the number of blocks for the file. Also, i_blksize is not
- nessisarily the size of the inode, although in practice it works out.
+ necessarily the size of the inode, although in practice it works out.
Changed to blocksize of filesystem.
(fs/befs/inode.c)
diff --git a/fs/befs/btree.c b/fs/befs/btree.c
index 42a81113a396..c5ed07677b69 100644
--- a/fs/befs/btree.c
+++ b/fs/befs/btree.c
@@ -56,9 +56,9 @@
/* Note:
*
* The book states 2 confusing things about befs b+trees. First,
- * it states that the overflow feild of node headers is used by internal nodes
- * to point to another node that "effectivly continues this one". Here is what
- * I belive that means. Each key in internal nodes points to another node that
+ * it states that the overflow field of node headers is used by internal nodes
+ * to point to another node that "effectively continues this one". Here is what
+ * I believe that means. Each key in internal nodes points to another node that
* contains key values less than itself. Inspection reveals that the last key
* in the internal node is not the last key in the index. Keys that are
* greater than the last key in the internal node go into the overflow node.
@@ -124,7 +124,7 @@ static int befs_compare_strings(const void *key1, int keylen1,
* @sup: Buffer in which to place the btree superblock
*
* Calls befs_read_datastream to read in the btree superblock and
- * makes sure it is in cpu byteorder, byteswapping if nessisary.
+ * makes sure it is in cpu byteorder, byteswapping if necessary.
*
* On success, returns BEFS_OK and *@sup contains the btree superblock,
* in cpu byte order.
@@ -179,8 +179,8 @@ befs_bt_read_super(struct super_block *sb, befs_data_stream * ds,
* @node_off: Starting offset (in bytes) of the node in @ds
*
* Calls befs_read_datastream to read in the indicated btree node and
- * makes sure its header feilds are in cpu byteorder, byteswapping if
- * nessisary.
+ * makes sure its header fields are in cpu byteorder, byteswapping if
+ * necessary.
* Note: node->bh must be NULL when this function called first
* time. Don't forget brelse(node->bh) after last call.
*
diff --git a/fs/befs/datastream.c b/fs/befs/datastream.c
index e03b73e5a418..75289900ccd2 100644
--- a/fs/befs/datastream.c
+++ b/fs/befs/datastream.c
@@ -229,7 +229,7 @@ befs_count_blocks(struct super_block * sb, befs_data_stream * ds)
Algorithm:
Linear search. Checks each element of array[] to see if it
- contains the blockno-th filesystem block. This is nessisary
+ contains the blockno-th filesystem block. This is necessary
because the block runs map variable amounts of data. Simply
keeps a count of the number of blocks searched so far (sum),
incrementing this by the length of each block run as we come
diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c
index a369757dc78c..91d24995dfcf 100644
--- a/fs/binfmt_aout.c
+++ b/fs/binfmt_aout.c
@@ -24,6 +24,7 @@
#include <linux/binfmts.h>
#include <linux/personality.h>
#include <linux/init.h>
+#include <linux/ptrace.h>
#include <asm/system.h>
#include <asm/uaccess.h>
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
index b76e1f3ff16d..fc218ce7c597 100644
--- a/fs/jfs/jfs_logmgr.c
+++ b/fs/jfs/jfs_logmgr.c
@@ -97,7 +97,7 @@ DECLARE_WAIT_QUEUE_HEAD(jfs_IO_thread_wait);
#define LOGGC_LOCK_INIT(log) spin_lock_init(&(log)->gclock)
#define LOGGC_LOCK(log) spin_lock_irq(&(log)->gclock)
#define LOGGC_UNLOCK(log) spin_unlock_irq(&(log)->gclock)
-#define LOGGC_WAKEUP(tblk) wake_up(&(tblk)->gcwait)
+#define LOGGC_WAKEUP(tblk) wake_up_all(&(tblk)->gcwait)
/*
* log sync serialization (per log)
@@ -511,7 +511,6 @@ lmWriteRecord(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,
tblk->bp = log->bp;
tblk->pn = log->page;
tblk->eor = log->eor;
- init_waitqueue_head(&tblk->gcwait);
/* enqueue transaction to commit queue */
tblk->cqnext = NULL;
@@ -831,6 +830,12 @@ void lmPostGC(struct lbuf * bp)
tblk->flag &= ~tblkGC_QUEUE;
tblk->cqnext = 0;
+ if (tblk == log->flush_tblk) {
+ /* we can stop flushing the log now */
+ clear_bit(log_FLUSH, &log->flag);
+ log->flush_tblk = NULL;
+ }
+
jfs_info("lmPostGC: tblk = 0x%p, flag = 0x%x", tblk,
tblk->flag);
@@ -843,10 +848,10 @@ void lmPostGC(struct lbuf * bp)
/* state transition: COMMIT -> COMMITTED */
tblk->flag |= tblkGC_COMMITTED;
- if (tblk->flag & tblkGC_READY) {
+ if (tblk->flag & tblkGC_READY)
log->gcrtc--;
- LOGGC_WAKEUP(tblk);
- }
+
+ LOGGC_WAKEUP(tblk);
}
/* was page full before pageout ?
@@ -892,6 +897,7 @@ void lmPostGC(struct lbuf * bp)
else {
log->cflag &= ~logGC_PAGEOUT;
clear_bit(log_FLUSH, &log->flag);
+ WARN_ON(log->flush_tblk);
}
//LOGGC_UNLOCK(log);
@@ -1307,7 +1313,8 @@ int lmLogInit(struct jfs_log * log)
INIT_LIST_HEAD(&log->synclist);
- log->cqueue.head = log->cqueue.tail = 0;
+ log->cqueue.head = log->cqueue.tail = NULL;
+ log->flush_tblk = NULL;
log->count = 0;
@@ -1395,38 +1402,78 @@ int lmLogClose(struct super_block *sb, struct jfs_log * log)
*
* FUNCTION: initiate write of any outstanding transactions to the journal
* and optionally wait until they are all written to disk
+ *
+ * wait == 0 flush until latest txn is committed, don't wait
+ * wait == 1 flush until latest txn is committed, wait
+ * wait > 1 flush until all txn's are complete, wait
*/
void jfs_flush_journal(struct jfs_log *log, int wait)
{
int i;
+ struct tblock *target;
jfs_info("jfs_flush_journal: log:0x%p wait=%d", log, wait);
- /*
- * This ensures that we will keep writing to the journal as long
- * as there are unwritten commit records
- */
- set_bit(log_FLUSH, &log->flag);
-
- /*
- * Initiate I/O on outstanding transactions
- */
LOGGC_LOCK(log);
- if (log->cqueue.head && !(log->cflag & logGC_PAGEOUT)) {
- log->cflag |= logGC_PAGEOUT;
- lmGCwrite(log, 0);
+
+ target = log->cqueue.head;
+
+ if (target) {
+ /*
+ * This ensures that we will keep writing to the journal as long
+ * as there are unwritten commit records
+ */
+
+ if (test_bit(log_FLUSH, &log->flag)) {
+ /*
+ * We're already flushing.
+ * if flush_tblk is NULL, we are flushing everything,
+ * so leave it that way. Otherwise, update it to the
+ * latest transaction
+ */
+ if (log->flush_tblk)
+ log->flush_tblk = target;
+ } else {
+ /* Only flush until latest transaction is committed */
+ log->flush_tblk = target;
+ set_bit(log_FLUSH, &log->flag);
+
+ /*
+ * Initiate I/O on outstanding transactions
+ */
+ if (!(log->cflag & logGC_PAGEOUT)) {
+ log->cflag |= logGC_PAGEOUT;
+ lmGCwrite(log, 0);
+ }
+ }
+ }
+ if ((wait > 1) || test_bit(log_SYNCBARRIER, &log->flag)) {
+ /* Flush until all activity complete */
+ set_bit(log_FLUSH, &log->flag);
+ log->flush_tblk = NULL;
+ }
+
+ if (wait && target && !(target->flag & tblkGC_COMMITTED)) {
+ DECLARE_WAITQUEUE(__wait, current);
+
+ add_wait_queue(&target->gcwait, &__wait);
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ LOGGC_UNLOCK(log);
+ schedule();
+ current->state = TASK_RUNNING;
+ LOGGC_LOCK(log);
+ remove_wait_queue(&target->gcwait, &__wait);
}
LOGGC_UNLOCK(log);
- if (!wait)
+ if (wait < 2)
return;
+ /*
+ * If there was recent activity, we may need to wait
+ * for the lazycommit thread to catch up
+ */
if (log->cqueue.head || !list_empty(&log->synclist)) {
- /*
- * If there was very recent activity, we may need to wait
- * for the lazycommit thread to catch up
- */
-
for (i = 0; i < 800; i++) { /* Too much? */
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(HZ / 4);
@@ -1437,7 +1484,6 @@ void jfs_flush_journal(struct jfs_log *log, int wait)
}
assert(log->cqueue.head == NULL);
assert(list_empty(&log->synclist));
-
clear_bit(log_FLUSH, &log->flag);
}
@@ -1467,7 +1513,7 @@ int lmLogShutdown(struct jfs_log * log)
jfs_info("lmLogShutdown: log:0x%p", log);
- jfs_flush_journal(log, 1);
+ jfs_flush_journal(log, 2);
/*
* We need to make sure all of the "written" metapages
diff --git a/fs/jfs/jfs_logmgr.h b/fs/jfs/jfs_logmgr.h
index 45eb3316d991..97983cb47c0f 100644
--- a/fs/jfs/jfs_logmgr.h
+++ b/fs/jfs/jfs_logmgr.h
@@ -403,6 +403,7 @@ struct jfs_log {
struct tblock *head;
struct tblock *tail;
} cqueue;
+ struct tblock *flush_tblk; /* tblk we're waiting on for flush */
int gcrtc; /* 4: GC_READY transaction count */
struct tblock *gclrt; /* 4: latest GC_READY transaction */
spinlock_t gclock; /* 4: group commit lock */
diff --git a/fs/jfs/jfs_txnmgr.c b/fs/jfs/jfs_txnmgr.c
index f86efd5f14c7..13226284c648 100644
--- a/fs/jfs/jfs_txnmgr.c
+++ b/fs/jfs/jfs_txnmgr.c
@@ -2741,8 +2741,7 @@ void txLazyCommit(struct tblock * tblk)
if (tblk->flag & tblkGC_READY)
log->gcrtc--;
- if (tblk->flag & tblkGC_READY)
- wake_up(&tblk->gcwait); // LOGGC_WAKEUP
+ wake_up_all(&tblk->gcwait); // LOGGC_WAKEUP
/*
* Can't release log->gclock until we've tested tblk->flag
diff --git a/fs/jfs/jfs_umount.c b/fs/jfs/jfs_umount.c
index b40511e4cf18..9e5c1b84ea36 100644
--- a/fs/jfs/jfs_umount.c
+++ b/fs/jfs/jfs_umount.c
@@ -69,7 +69,7 @@ int jfs_umount(struct super_block *sb)
/*
* Wait for outstanding transactions to be written to log:
*/
- jfs_flush_journal(log, 1);
+ jfs_flush_journal(log, 2);
/*
* close fileset inode allocation map (aka fileset inode)
@@ -149,7 +149,7 @@ int jfs_umount_rw(struct super_block *sb)
*
* remove file system from log active file system list.
*/
- jfs_flush_journal(log, 1);
+ jfs_flush_journal(log, 2);
/*
* Make sure all metadata makes it to disk
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 5cba4d1a70ff..37fb278f96d7 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -180,51 +180,74 @@ static inline char * task_state(struct task_struct *p, char *buffer)
return buffer;
}
+static char * render_sigset_t(const char *header, sigset_t *set, char *buffer)
+{
+ int i, len;
+
+ len = strlen(header);
+ memcpy(buffer, header, len);
+ buffer += len;
+
+ i = _NSIG;
+ do {
+ int x = 0;
+
+ i -= 4;
+ if (sigismember(set, i+1)) x |= 1;
+ if (sigismember(set, i+2)) x |= 2;
+ if (sigismember(set, i+3)) x |= 4;
+ if (sigismember(set, i+4)) x |= 8;
+ *buffer++ = (x < 10 ? '0' : 'a' - 10) + x;
+ } while (i >= 4);
+
+ *buffer++ = '\n';
+ *buffer = 0;
+ return buffer;
+}
+
static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
sigset_t *catch)
{
struct k_sigaction *k;
int i;
- sigemptyset(ign);
- sigemptyset(catch);
+ k = p->sighand->action;
+ for (i = 1; i <= _NSIG; ++i, ++k) {
+ if (k->sa.sa_handler == SIG_IGN)
+ sigaddset(ign, i);
+ else if (k->sa.sa_handler != SIG_DFL)
+ sigaddset(catch, i);
+ }
+}
+
+static inline char * task_sig(struct task_struct *p, char *buffer)
+{
+ sigset_t pending, shpending, blocked, ignored, caught;
+ sigemptyset(&pending);
+ sigemptyset(&shpending);
+ sigemptyset(&blocked);
+ sigemptyset(&ignored);
+ sigemptyset(&caught);
+
+ /* Gather all the data with the appropriate locks held */
read_lock(&tasklist_lock);
if (p->sighand) {
spin_lock_irq(&p->sighand->siglock);
- k = p->sighand->action;
- for (i = 1; i <= _NSIG; ++i, ++k) {
- if (k->sa.sa_handler == SIG_IGN)
- sigaddset(ign, i);
- else if (k->sa.sa_handler != SIG_DFL)
- sigaddset(catch, i);
- }
+ pending = p->pending.signal;
+ shpending = p->signal->shared_pending.signal;
+ blocked = p->blocked;
+ collect_sigign_sigcatch(p, &ignored, &caught);
spin_unlock_irq(&p->sighand->siglock);
}
read_unlock(&tasklist_lock);
-}
-
-static inline char * task_sig(struct task_struct *p, char *buffer)
-{
- sigset_t ign, catch;
-
- buffer += sprintf(buffer, "SigPnd:\t");
- buffer = render_sigset_t(&p->pending.signal, buffer);
- *buffer++ = '\n';
- buffer += sprintf(buffer, "ShdPnd:\t");
- buffer = render_sigset_t(&p->signal->shared_pending.signal, buffer);
- *buffer++ = '\n';
- buffer += sprintf(buffer, "SigBlk:\t");
- buffer = render_sigset_t(&p->blocked, buffer);
- *buffer++ = '\n';
- collect_sigign_sigcatch(p, &ign, &catch);
- buffer += sprintf(buffer, "SigIgn:\t");
- buffer = render_sigset_t(&ign, buffer);
- *buffer++ = '\n';
- buffer += sprintf(buffer, "SigCgt:\t"); /* Linux 2.0 uses "SigCgt" */
- buffer = render_sigset_t(&catch, buffer);
- *buffer++ = '\n';
+ /* render them all */
+ buffer = render_sigset_t("SigPnd:\t", &pending, buffer);
+ buffer = render_sigset_t("ShdPnd:\t", &shpending, buffer);
+ buffer = render_sigset_t("SigBlk:\t", &blocked, buffer);
+ buffer = render_sigset_t("SigIgn:\t", &ignored, buffer);
+ buffer = render_sigset_t("SigCgt:\t", &caught, buffer);
return buffer;
}
@@ -293,7 +316,15 @@ int proc_pid_stat(struct task_struct *task, char * buffer)
wchan = get_wchan(task);
- collect_sigign_sigcatch(task, &sigign, &sigcatch);
+ sigemptyset(&sigign);
+ sigemptyset(&sigcatch);
+ read_lock(&tasklist_lock);
+ if (task->sighand) {
+ spin_lock_irq(&task->sighand->siglock);
+ collect_sigign_sigcatch(task, &sigign, &sigcatch);
+ spin_unlock_irq(&task->sighand->siglock);
+ }
+ read_unlock(&tasklist_lock);
/* scale priority and nice values from timeslices to -20..20 */
/* to make it look like a "normal" Unix priority/nice value */
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 164fb87ea678..cfb54c010ef9 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -31,6 +31,7 @@
#include <linux/kallsyms.h>
#include <linux/mount.h>
#include <linux/security.h>
+#include <linux/ptrace.h>
/*
* For hysterical raisins we keep the same inumbers as in the old procfs.
diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h
index 053532447560..e1646aff4e31 100644
--- a/include/asm-alpha/io.h
+++ b/include/asm-alpha/io.h
@@ -462,6 +462,9 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
#define eth_io_copy_and_sum(skb,src,len,unused) \
memcpy_fromio((skb)->data,(src),(len))
+#define isa_eth_io_copy_and_sum(skb,src,len,unused) \
+ isa_memcpy_fromio((skb)->data,(src),(len))
+
static inline int
check_signature(unsigned long io_addr, const unsigned char *signature,
int length)
diff --git a/include/asm-alpha/unistd.h b/include/asm-alpha/unistd.h
index 0afd0b632d80..1a1d3e81de2b 100644
--- a/include/asm-alpha/unistd.h
+++ b/include/asm-alpha/unistd.h
@@ -348,7 +348,8 @@
#define __NR_remap_file_pages 410
#define __NR_set_tid_address 411
#define __NR_restart_syscall 412
-#define NR_SYSCALLS 413
+#define __NR_fadvise64 413
+#define NR_SYSCALLS 414
#if defined(__GNUC__)
diff --git a/include/asm-arm/arch-iop310/serial.h b/include/asm-arm/arch-iop310/serial.h
index 48e20ba12d5c..3d2a5ce8564c 100644
--- a/include/asm-arm/arch-iop310/serial.h
+++ b/include/asm-arm/arch-iop310/serial.h
@@ -24,8 +24,8 @@
#define STD_SERIAL_PORT_DEFNS \
/* UART CLK PORT IRQ FLAGS */ \
- { 0, BASE_BAUD, 0xfe810000, IRQ_UART2, STD_COM_FLAGS }, /* ttyS0 */ \
- { 0, BASE_BAUD, 0xfe800000, IRQ_UART1, STD_COM_FLAGS } /* ttyS1 */
+ { 0, BASE_BAUD, IQ80310_UART2, IRQ_UART2, STD_COM_FLAGS }, /* ttyS0 */ \
+ { 0, BASE_BAUD, IQ80310_UART1, IRQ_UART1, STD_COM_FLAGS } /* ttyS1 */
#endif // CONFIG_ARCH_IQ80310
diff --git a/include/asm-arm/arch-pxa/time.h b/include/asm-arm/arch-pxa/time.h
index 2ac2928f0b2c..d49cdf95f14d 100644
--- a/include/asm-arm/arch-pxa/time.h
+++ b/include/asm-arm/arch-pxa/time.h
@@ -53,7 +53,7 @@ static void pxa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
int next_match;
/* Loop until we get ahead of the free running timer.
- * This ensures an exact clock tick count and time acuracy.
+ * This ensures an exact clock tick count and time accuracy.
* IRQs are disabled inside the loop to ensure coherence between
* lost_ticks (updated in do_timer()) and the match reg value, so we
* can use do_gettimeofday() from interrupt handlers.
diff --git a/include/asm-arm/arch-sa1100/time.h b/include/asm-arm/arch-sa1100/time.h
index c52eb9588c3c..de96ec3dd688 100644
--- a/include/asm-arm/arch-sa1100/time.h
+++ b/include/asm-arm/arch-sa1100/time.h
@@ -67,7 +67,7 @@ static unsigned long sa1100_gettimeoffset (void)
* We will be entered with IRQs enabled.
*
* Loop until we get ahead of the free running timer.
- * This ensures an exact clock tick count and time acuracy.
+ * This ensures an exact clock tick count and time accuracy.
* IRQs are disabled inside the loop to ensure coherence between
* lost_ticks (updated in do_timer()) and the match reg value, so we
* can use do_gettimeofday() from interrupt handlers.
diff --git a/include/asm-arm/mach/irq.h b/include/asm-arm/mach/irq.h
index 5a3007b97324..03f2bfffa03a 100644
--- a/include/asm-arm/mach/irq.h
+++ b/include/asm-arm/mach/irq.h
@@ -33,9 +33,12 @@ struct irqchip {
*/
void (*unmask)(unsigned int);
/*
- * Re-run the IRQ
+ * Ask the hardware to re-trigger the IRQ.
+ * Note: This method _must_ _not_ call the interrupt handler.
+ * If you are unable to retrigger the interrupt, do not
+ * provide a function, or if you do, return non-zero.
*/
- void (*rerun)(unsigned int);
+ int (*retrigger)(unsigned int);
/*
* Set the type of the IRQ.
*/
@@ -50,6 +53,7 @@ struct irqdesc {
irq_handler_t handle;
struct irqchip *chip;
struct irqaction *action;
+ struct list_head pend;
unsigned int disable_depth;
unsigned int triggered: 1; /* IRQ has occurred */
diff --git a/include/asm-arm/proc-armv/processor.h b/include/asm-arm/proc-armv/processor.h
index 390e887d2037..373ca267700c 100644
--- a/include/asm-arm/proc-armv/processor.h
+++ b/include/asm-arm/proc-armv/processor.h
@@ -23,7 +23,7 @@
#define KERNEL_STACK_SIZE PAGE_SIZE
#define INIT_EXTRA_THREAD_INFO \
- .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_CLIENT) | \
+ .cpu_domain = domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \
domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
domain_val(DOMAIN_IO, DOMAIN_CLIENT)
diff --git a/include/asm-arm/proc-armv/system.h b/include/asm-arm/proc-armv/system.h
index e95668d52510..e48970ddf836 100644
--- a/include/asm-arm/proc-armv/system.h
+++ b/include/asm-arm/proc-armv/system.h
@@ -14,9 +14,14 @@
#define set_cr(x) \
__asm__ __volatile__( \
- "mcr p15, 0, %0, c1, c0 @ set CR" \
+ "mcr p15, 0, %0, c1, c0, 0 @ set CR" \
: : "r" (x))
+#define get_cr(x) \
+ __asm__ __volatile__( \
+ "mrc p15, 0, %0, c1, c0, 0 @ get CR" \
+ : "=r" (x))
+
#define CR_M (1 << 0) /* MMU enable */
#define CR_A (1 << 1) /* Alignment abort enable */
#define CR_C (1 << 2) /* Dcache enable */
@@ -24,9 +29,9 @@
#define CR_P (1 << 4) /* 32-bit exception handler */
#define CR_D (1 << 5) /* 32-bit data address range */
#define CR_L (1 << 6) /* Implementation defined */
-#define CD_B (1 << 7) /* Big endian */
+#define CR_B (1 << 7) /* Big endian */
#define CR_S (1 << 8) /* System MMU protection */
-#define CD_R (1 << 9) /* ROM MMU protection */
+#define CR_R (1 << 9) /* ROM MMU protection */
#define CR_F (1 << 10) /* Implementation defined */
#define CR_Z (1 << 11) /* Implementation defined */
#define CR_I (1 << 12) /* Icache enable */
diff --git a/include/asm-arm/signal.h b/include/asm-arm/signal.h
index 9bb358d1a1c2..eb59aa539b9c 100644
--- a/include/asm-arm/signal.h
+++ b/include/asm-arm/signal.h
@@ -184,9 +184,7 @@ typedef struct sigaltstack {
#ifdef __KERNEL__
#include <asm/sigcontext.h>
-
-#define HAVE_ARCH_GET_SIGNAL_TO_DELIVER
-
+#define ptrace_signal_deliver(regs, cookie) do { } while (0)
#endif
#endif
diff --git a/include/asm-m68knommu/mcfne.h b/include/asm-m68knommu/mcfne.h
index 4db715b5141a..045875651e4d 100644
--- a/include/asm-m68knommu/mcfne.h
+++ b/include/asm-m68knommu/mcfne.h
@@ -261,7 +261,7 @@ void ne2000_outsw(unsigned int addr, const void *vbuf, unsigned long len)
/*
* Lastly the interrupt set up code...
- * Minor diferences between the different board types.
+ * Minor differences between the different board types.
*/
#if defined(CONFIG_M5206) && defined(CONFIG_ARNEWSH)
diff --git a/include/asm-mips64/sn/launch.h b/include/asm-mips64/sn/launch.h
index 478bde9c0dcd..48a831b39c07 100644
--- a/include/asm-mips64/sn/launch.h
+++ b/include/asm-mips64/sn/launch.h
@@ -52,7 +52,7 @@
/*
* The launch routine is called only if the complement address is correct.
*
- * Before control is transferred to a routine, the compliment address
+ * Before control is transferred to a routine, the complement address
* is zeroed (invalidated) to prevent an accidental call from a spurious
* interrupt.
*
diff --git a/include/asm-mips64/sn/nmi.h b/include/asm-mips64/sn/nmi.h
index d2dada9c39c0..edfdc7336202 100644
--- a/include/asm-mips64/sn/nmi.h
+++ b/include/asm-mips64/sn/nmi.h
@@ -42,7 +42,7 @@
* The NMI routine is called only if the complement address is
* correct.
*
- * Before control is transferred to a routine, the compliment address
+ * Before control is transferred to a routine, the complement address
* is zeroed (invalidated) to prevent an accidental call from a spurious
* interrupt.
*
diff --git a/include/asm-ppc/gt64260.h b/include/asm-ppc/gt64260.h
index ad55f6af4318..cf975d1beff3 100644
--- a/include/asm-ppc/gt64260.h
+++ b/include/asm-ppc/gt64260.h
@@ -6,7 +6,7 @@
* Author: Mark A. Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/gt64260_defs.h b/include/asm-ppc/gt64260_defs.h
index ed4a6f6dd483..8ffe378683da 100644
--- a/include/asm-ppc/gt64260_defs.h
+++ b/include/asm-ppc/gt64260_defs.h
@@ -6,7 +6,7 @@
* Author: Mark A. Greer <mgreer@mvista.com>
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/harrier.h b/include/asm-ppc/harrier.h
index 162302f27157..cd6fd1605cff 100644
--- a/include/asm-ppc/harrier.h
+++ b/include/asm-ppc/harrier.h
@@ -7,7 +7,7 @@
* dale.farnsworth@mvista.com
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/ibm403.h b/include/asm-ppc/ibm403.h
index 15257f554e92..bf6efa0417ab 100644
--- a/include/asm-ppc/ibm403.h
+++ b/include/asm-ppc/ibm403.h
@@ -2,7 +2,7 @@
* Authors: Armin Kuster <akuster@mvista.com> and Tom Rini <trini@mvista.com>
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/ibm405.h b/include/asm-ppc/ibm405.h
index e6dd4db97f7a..4e5be9e2c153 100644
--- a/include/asm-ppc/ibm405.h
+++ b/include/asm-ppc/ibm405.h
@@ -2,7 +2,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/ibm_ocp_pci.h b/include/asm-ppc/ibm_ocp_pci.h
index 0c554beae306..a81ab6144358 100644
--- a/include/asm-ppc/ibm_ocp_pci.h
+++ b/include/asm-ppc/ibm_ocp_pci.h
@@ -2,7 +2,7 @@
* Author: Armin Kuster <akuster@mvista.com>
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/mpc10x.h b/include/asm-ppc/mpc10x.h
index b7ad80afced7..78b8a0539865 100644
--- a/include/asm-ppc/mpc10x.h
+++ b/include/asm-ppc/mpc10x.h
@@ -8,7 +8,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/ppc405_dma.h b/include/asm-ppc/ppc405_dma.h
index 69b17da1c504..8571360b3f56 100644
--- a/include/asm-ppc/ppc405_dma.h
+++ b/include/asm-ppc/ppc405_dma.h
@@ -2,7 +2,7 @@
* Author: Pete Popov <ppopov@mvista.com>
*
* 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
* or implied.
*
diff --git a/include/asm-ppc/pplus.h b/include/asm-ppc/pplus.h
index 4d00aae691be..3e9fa3682254 100644
--- a/include/asm-ppc/pplus.h
+++ b/include/asm-ppc/pplus.h
@@ -7,7 +7,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/rtc.h b/include/asm-ppc/rtc.h
index ef83cf06a9af..5493ee53f9f8 100644
--- a/include/asm-ppc/rtc.h
+++ b/include/asm-ppc/rtc.h
@@ -4,7 +4,7 @@
* Author: Tom Rini <trini@mvista.com>
*
* 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
* or implied.
*
diff --git a/include/asm-ppc/todc.h b/include/asm-ppc/todc.h
index 518e5b272715..0419f2803ecd 100644
--- a/include/asm-ppc/todc.h
+++ b/include/asm-ppc/todc.h
@@ -8,7 +8,7 @@
* mgreer@mvista.com
*
* 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
* or implied.
*/
diff --git a/include/asm-ppc/unistd.h b/include/asm-ppc/unistd.h
index b3d115b7961b..b516c293586c 100644
--- a/include/asm-ppc/unistd.h
+++ b/include/asm-ppc/unistd.h
@@ -236,6 +236,8 @@
#define __NR_io_getevents 229
#define __NR_io_submit 230
#define __NR_io_cancel 231
+#define __NR_set_tid_address 232
+#define __NR_fadvise64 233
#define __NR_exit_group 234
#define __NR_lookup_dcookie 235
#define __NR_epoll_create 236
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h
index e464335fcd44..872e3ebc0379 100644
--- a/include/asm-sparc64/ptrace.h
+++ b/include/asm-sparc64/ptrace.h
@@ -268,7 +268,7 @@ extern void show_regs(struct pt_regs *);
#define PTRACE_SETFPAREGS 21
/* There are for debugging 64-bit processes, either from a 32 or 64 bit
- * parent. Thus their compliments are for debugging 32-bit processes only.
+ * parent. Thus their complements are for debugging 32-bit processes only.
*/
#define PTRACE_GETREGS64 22
diff --git a/include/linux/kmod.h b/include/linux/kmod.h
index ca24ceb8e2e2..9e9e2c38ab34 100644
--- a/include/linux/kmod.h
+++ b/include/linux/kmod.h
@@ -21,6 +21,7 @@
#include <linux/config.h>
#include <linux/errno.h>
+#include <linux/compiler.h>
#ifdef CONFIG_KMOD
extern int request_module(const char * name);
@@ -29,8 +30,7 @@ static inline int request_module(const char * name) { return -ENOSYS; }
#endif
#define try_then_request_module(x, mod) ((x) ?: request_module(mod), (x))
-extern int exec_usermodehelper(char *program_path, char *argv[], char *envp[]);
-extern int call_usermodehelper(char *path, char *argv[], char *envp[]);
+extern int call_usermodehelper(char *path, char *argv[], char *envp[], int wait);
#ifdef CONFIG_HOTPLUG
extern char hotplug_path [];
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 706b420fb5c9..5d44a953f423 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -3,8 +3,6 @@
/* ptrace.h */
/* structs and defines to help the user use the ptrace system call. */
-#include <linux/compiler.h>
-
/* has the defines to get at the registers. */
#define PTRACE_TRACEME 0
@@ -38,6 +36,8 @@
#define PTRACE_O_TRACEVFORKDONE 0x00000020
#define PTRACE_O_TRACEEXIT 0x00000040
+#define PTRACE_O_MASK 0x0000007f
+
/* Wait extended result codes for the above trace options. */
#define PTRACE_EVENT_FORK 1
#define PTRACE_EVENT_VFORK 2
@@ -47,7 +47,27 @@
#define PTRACE_EVENT_EXIT 6
#include <asm/ptrace.h>
-#include <linux/sched.h>
+
+#ifdef __KERNEL__
+/*
+ * Ptrace flags
+ */
+
+#define PT_PTRACED 0x00000001
+#define PT_DTRACE 0x00000002 /* delayed trace (used on m68k, i386) */
+#define PT_TRACESYSGOOD 0x00000004
+#define PT_PTRACE_CAP 0x00000008 /* ptracer can follow suid-exec */
+#define PT_TRACE_FORK 0x00000010
+#define PT_TRACE_VFORK 0x00000020
+#define PT_TRACE_CLONE 0x00000040
+#define PT_TRACE_EXEC 0x00000080
+#define PT_TRACE_VFORK_DONE 0x00000100
+#define PT_TRACE_EXIT 0x00000200
+
+#define PT_TRACE_MASK 0x000003f4
+
+#include <linux/compiler.h> /* For unlikely. */
+#include <linux/sched.h> /* For struct task_struct. */
extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char *dst, int len);
extern int ptrace_writedata(struct task_struct *tsk, char * src, unsigned long dst, int len);
@@ -58,11 +78,11 @@ extern int ptrace_check_attach(struct task_struct *task, int kill);
extern int ptrace_request(struct task_struct *child, long request, long addr, long data);
extern void ptrace_notify(int exit_code);
extern void __ptrace_link(struct task_struct *child,
- struct task_struct *new_parent);
+ struct task_struct *new_parent);
extern void __ptrace_unlink(struct task_struct *child);
static inline void ptrace_link(struct task_struct *child,
- struct task_struct *new_parent)
+ struct task_struct *new_parent)
{
if (unlikely(child->ptrace))
__ptrace_link(child, new_parent);
@@ -72,5 +92,6 @@ static inline void ptrace_unlink(struct task_struct *child)
if (unlikely(child->ptrace))
__ptrace_unlink(child);
}
+#endif
#endif
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 33edafbe6000..0711d71bc858 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -57,8 +57,8 @@ struct rtc_pll_info {
int pll_value; /* get/set correction value */
int pll_max; /* max +ve (faster) adjustment value */
int pll_min; /* max -ve (slower) adjustment value */
- int pll_posmult; /* factor for +ve corection */
- int pll_negmult; /* factor for -ve corection */
+ int pll_posmult; /* factor for +ve correction */
+ int pll_negmult; /* factor for -ve correction */
long pll_clock; /* base PLL frequency */
};
diff --git a/include/linux/sched.h b/include/linux/sched.h
index d3cd5e31e8f9..cfa6fd4d86da 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -446,21 +446,6 @@ do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
#define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */
#define PF_KSWAPD 0x00040000 /* I am kswapd */
-/*
- * Ptrace flags
- */
-
-#define PT_PTRACED 0x00000001
-#define PT_DTRACE 0x00000002 /* delayed trace (used on m68k, i386) */
-#define PT_TRACESYSGOOD 0x00000004
-#define PT_PTRACE_CAP 0x00000008 /* ptracer can follow suid-exec */
-#define PT_TRACE_FORK 0x00000010
-#define PT_TRACE_VFORK 0x00000020
-#define PT_TRACE_CLONE 0x00000040
-#define PT_TRACE_EXEC 0x00000080
-#define PT_TRACE_VFORK_DONE 0x00000100
-#define PT_TRACE_EXIT 0x00000200
-
#if CONFIG_SMP
extern void set_cpus_allowed(task_t *p, unsigned long new_mask);
#else
diff --git a/include/linux/signal.h b/include/linux/signal.h
index 09e4d8587f0a..05e1fd671f82 100644
--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -151,8 +151,6 @@ static inline void sigfillset(sigset_t *set)
}
}
-extern char * render_sigset_t(sigset_t *set, char *buffer);
-
/* Some extensions for manipulating the low 32 signals in particular. */
static inline void sigaddsetmask(sigset_t *set, unsigned long mask)
diff --git a/include/linux/wireless.h b/include/linux/wireless.h
index bacf44b5c31e..d8cd706651da 100644
--- a/include/linux/wireless.h
+++ b/include/linux/wireless.h
@@ -294,7 +294,7 @@
#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */
#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */
-#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed number of args */
#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
diff --git a/kernel/compat.c b/kernel/compat.c
index 892b49f14f5f..7b04cf90c847 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -17,6 +17,7 @@
#include <linux/time.h>
#include <linux/signal.h>
#include <linux/sched.h> /* for MAX_SCHEDULE_TIMEOUT */
+#include <linux/futex.h> /* for FUTEX_WAIT */
#include <asm/uaccess.h>
@@ -210,7 +211,7 @@ asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t *set,
return ret;
}
-extern long do_futex(u32 *, int, int, unsigned long);
+extern long do_futex(unsigned long, int, int, unsigned long);
asmlinkage long compat_sys_futex(u32 *uaddr, int op, int val,
struct compat_timespec *utime)
@@ -221,7 +222,7 @@ asmlinkage long compat_sys_futex(u32 *uaddr, int op, int val,
if ((op == FUTEX_WAIT) && utime) {
if (get_compat_timespec(&t, utime))
return -EFAULT;
- timeout = timespec_to_jiffies(t) + 1;
+ timeout = timespec_to_jiffies(&t) + 1;
}
return do_futex((unsigned long)uaddr, op, val, timeout);
}
diff --git a/kernel/exit.c b/kernel/exit.c
index 0523eb305c17..d2d7c72f1e81 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -694,10 +694,8 @@ static void exit_notify(struct task_struct *tsk)
* only has special meaning to our real parent.
*/
if (tsk->exit_signal != -1) {
- if (tsk->parent == tsk->real_parent)
- do_notify_parent(tsk, tsk->exit_signal);
- else
- do_notify_parent(tsk, SIGCHLD);
+ int signal = tsk->parent == tsk->real_parent ? tsk->exit_signal : SIGCHLD;
+ do_notify_parent(tsk, signal);
}
tsk->state = TASK_ZOMBIE;
@@ -731,8 +729,10 @@ NORET_TYPE void do_exit(long code)
profile_exit_task(tsk);
- if (unlikely(current->ptrace & PT_TRACE_EXIT))
+ if (unlikely(current->ptrace & PT_TRACE_EXIT)) {
+ current->ptrace_message = code;
ptrace_notify((PTRACE_EVENT_EXIT << 8) | SIGTRAP);
+ }
acct_process(code);
__exit_mm(tsk);
diff --git a/kernel/kmod.c b/kernel/kmod.c
index 15dacc2e6bd8..a715e06ab4a7 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -14,8 +14,10 @@
Unblock all signals when we exec a usermode process.
Shuu Yamaguchi <shuu@wondernetworkresources.com> December 2000
-*/
+ call_usermodehelper wait flag, and remove exec_usermodehelper.
+ Rusty Russell <rusty@rustcorp.com.au> Jan 2003
+*/
#define __KERNEL_SYSCALLS__
#include <linux/config.h>
@@ -31,112 +33,11 @@
#include <linux/workqueue.h>
#include <linux/security.h>
#include <linux/mount.h>
+#include <linux/kernel.h>
#include <asm/uaccess.h>
extern int max_threads, system_running;
-static inline void
-use_init_fs_context(void)
-{
- struct fs_struct *our_fs, *init_fs;
- struct dentry *root, *pwd;
- struct vfsmount *rootmnt, *pwdmnt;
- struct namespace *our_ns, *init_ns;
-
- /*
- * Make modprobe's fs context be a copy of init's.
- *
- * We cannot use the user's fs context, because it
- * may have a different root than init.
- * Since init was created with CLONE_FS, we can grab
- * its fs context from "init_task".
- *
- * The fs context has to be a copy. If it is shared
- * with init, then any chdir() call in modprobe will
- * also affect init and the other threads sharing
- * init_task's fs context.
- *
- * We created the exec_modprobe thread without CLONE_FS,
- * so we can update the fields in our fs context freely.
- */
-
- init_fs = init_task.fs;
- init_ns = init_task.namespace;
- get_namespace(init_ns);
- our_ns = current->namespace;
- current->namespace = init_ns;
- put_namespace(our_ns);
- read_lock(&init_fs->lock);
- rootmnt = mntget(init_fs->rootmnt);
- root = dget(init_fs->root);
- pwdmnt = mntget(init_fs->pwdmnt);
- pwd = dget(init_fs->pwd);
- read_unlock(&init_fs->lock);
-
- /* FIXME - unsafe ->fs access */
- our_fs = current->fs;
- our_fs->umask = init_fs->umask;
- set_fs_root(our_fs, rootmnt, root);
- set_fs_pwd(our_fs, pwdmnt, pwd);
- write_lock(&our_fs->lock);
- if (our_fs->altroot) {
- struct vfsmount *mnt = our_fs->altrootmnt;
- struct dentry *dentry = our_fs->altroot;
- our_fs->altrootmnt = NULL;
- our_fs->altroot = NULL;
- write_unlock(&our_fs->lock);
- dput(dentry);
- mntput(mnt);
- } else
- write_unlock(&our_fs->lock);
- dput(root);
- mntput(rootmnt);
- dput(pwd);
- mntput(pwdmnt);
-}
-
-int exec_usermodehelper(char *program_path, char *argv[], char *envp[])
-{
- int i;
- struct task_struct *curtask = current;
-
- set_special_pids(1, 1);
-
- use_init_fs_context();
-
- /* Prevent parent user process from sending signals to child.
- Otherwise, if the modprobe program does not exist, it might
- be possible to get a user defined signal handler to execute
- as the super user right after the execve fails if you time
- the signal just right.
- */
- flush_signals(curtask);
- flush_signal_handlers(curtask);
- spin_lock_irq(&curtask->sighand->siglock);
- sigemptyset(&curtask->blocked);
- recalc_sigpending();
- spin_unlock_irq(&curtask->sighand->siglock);
-
- for (i = 0; i < curtask->files->max_fds; i++ ) {
- if (curtask->files->fd[i]) close(i);
- }
-
- switch_uid(INIT_USER);
-
- /* Give kmod all effective privileges.. */
- curtask->euid = curtask->fsuid = 0;
- curtask->egid = curtask->fsgid = 0;
- security_task_kmod_set_label();
-
- /* Allow execve args to be in kernel space. */
- set_fs(KERNEL_DS);
-
- /* Go, go, go... */
- if (execve(program_path, argv, envp) < 0)
- return -errno;
- return 0;
-}
-
#ifdef CONFIG_KMOD
/*
@@ -144,29 +45,6 @@ int exec_usermodehelper(char *program_path, char *argv[], char *envp[])
*/
char modprobe_path[256] = "/sbin/modprobe";
-static int exec_modprobe(void * module_name)
-{
- static char * envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
- char *argv[] = { modprobe_path, "--", (char*)module_name, NULL };
- int ret;
-
- if (!system_running)
- return -EBUSY;
-
- ret = exec_usermodehelper(modprobe_path, argv, envp);
- if (ret) {
- static unsigned long last;
- unsigned long now = jiffies;
- if (now - last > HZ) {
- last = now;
- printk(KERN_DEBUG
- "kmod: failed to exec %s -s -k %s, errno = %d\n",
- modprobe_path, (char*) module_name, errno);
- }
- }
- return ret;
-}
-
/**
* request_module - try to load a kernel module
* @module_name: Name of module
@@ -180,24 +58,18 @@ static int exec_modprobe(void * module_name)
* If module auto-loading support is disabled then this function
* becomes a no-operation.
*/
-int request_module(const char * module_name)
+int request_module(const char *module_name)
{
- pid_t pid;
- int waitpid_result;
- sigset_t tmpsig;
- int i, ret;
+ unsigned int max_modprobes;
+ int ret;
+ char *argv[] = { modprobe_path, "--", (char*)module_name, NULL };
+ static char *envp[] = { "HOME=/",
+ "TERM=linux",
+ "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
+ NULL };
static atomic_t kmod_concurrent = ATOMIC_INIT(0);
#define MAX_KMOD_CONCURRENT 50 /* Completely arbitrary value - KAO */
static int kmod_loop_msg;
- unsigned long saved_policy = current->policy;
-
- current->policy = SCHED_NORMAL;
- /* Don't allow request_module() when the system isn't set up */
- if ( ! system_running ) {
- printk(KERN_ERR "request_module[%s]: not ready\n", module_name);
- ret = -EPERM;
- goto out;
- }
/* If modprobe needs a service that is in a module, we get a recursive
* loop. Limit the number of running kmod threads to max_threads/2 or
@@ -207,61 +79,44 @@ int request_module(const char * module_name)
* process tables to get the command line, proc_pid_cmdline is static
* and it is not worth changing the proc code just to handle this case.
* KAO.
+ *
+
+ * "trace the ppid" is simple, but will fail if someone's
+ * parent exits. I think this is as good as it gets. --RR
*/
- i = max_threads/2;
- if (i > MAX_KMOD_CONCURRENT)
- i = MAX_KMOD_CONCURRENT;
+ max_modprobes = min(max_threads/2, MAX_KMOD_CONCURRENT);
atomic_inc(&kmod_concurrent);
- if (atomic_read(&kmod_concurrent) > i) {
+ if (atomic_read(&kmod_concurrent) > max_modprobes) {
+ /* We may be blaming an innocent here, but unlikely */
if (kmod_loop_msg++ < 5)
printk(KERN_ERR
- "kmod: runaway modprobe loop assumed and stopped\n");
+ "request_module: runaway loop modprobe %s\n",
+ module_name);
atomic_dec(&kmod_concurrent);
- ret = -ENOMEM;
- goto out;
+ return -ENOMEM;
}
- pid = kernel_thread(exec_modprobe, (void*) module_name, 0);
- if (pid < 0) {
- printk(KERN_ERR "request_module[%s]: fork failed, errno %d\n", module_name, -pid);
- atomic_dec(&kmod_concurrent);
- ret = pid;
- goto out;
+ ret = call_usermodehelper(modprobe_path, argv, envp, 1);
+ if (ret != 0) {
+ static unsigned long last;
+ unsigned long now = jiffies;
+ if (now - last > HZ) {
+ last = now;
+ printk(KERN_DEBUG
+ "request_module: failed %s -- %s. error = %d\n",
+ modprobe_path, module_name, ret);
+ }
}
-
- /* Block everything but SIGKILL/SIGSTOP */
- spin_lock_irq(&current->sighand->siglock);
- tmpsig = current->blocked;
- siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP));
- recalc_sigpending();
- spin_unlock_irq(&current->sighand->siglock);
-
- waitpid_result = waitpid(pid, NULL, __WCLONE);
atomic_dec(&kmod_concurrent);
-
- /* Allow signals again.. */
- spin_lock_irq(&current->sighand->siglock);
- current->blocked = tmpsig;
- recalc_sigpending();
- spin_unlock_irq(&current->sighand->siglock);
-
- if (waitpid_result != pid) {
- printk(KERN_ERR "request_module[%s]: waitpid(%d,...) failed, errno %d\n",
- module_name, pid, -waitpid_result);
- }
- ret = 0;
-out:
- current->policy = saved_policy;
return ret;
}
#endif /* CONFIG_KMOD */
-
#ifdef CONFIG_HOTPLUG
/*
hotplug path is set via /proc/sys
invoked by hotplug-aware bus drivers,
- with exec_usermodehelper and some thread-spawner
+ with call_usermodehelper
argv [0] = hotplug_path;
argv [1] = "usb", "scsi", "pci", "network", etc;
@@ -285,7 +140,8 @@ struct subprocess_info {
char *path;
char **argv;
char **envp;
- pid_t retval;
+ int wait;
+ int retval;
};
/*
@@ -298,13 +154,30 @@ static int ____call_usermodehelper(void *data)
retval = -EPERM;
if (current->fs->root)
- retval = exec_usermodehelper(sub_info->path, sub_info->argv, sub_info->envp);
+ retval = execve(sub_info->path, sub_info->argv,sub_info->envp);
/* Exec failed? */
- sub_info->retval = (pid_t)retval;
+ sub_info->retval = retval;
do_exit(0);
}
+/* Keventd can't block, but this (a child) can. */
+static int wait_for_helper(void *data)
+{
+ struct subprocess_info *sub_info = data;
+ pid_t pid;
+
+ pid = kernel_thread(____call_usermodehelper, sub_info,
+ CLONE_VFORK | SIGCHLD);
+ if (pid < 0)
+ sub_info->retval = pid;
+ else
+ sys_wait4(pid, (unsigned int *)&sub_info->retval, 0, NULL);
+
+ complete(sub_info->complete);
+ return 0;
+}
+
/*
* This is run by keventd.
*/
@@ -313,14 +186,21 @@ static void __call_usermodehelper(void *data)
struct subprocess_info *sub_info = data;
pid_t pid;
- /*
- * CLONE_VFORK: wait until the usermode helper has execve'd successfully
- * We need the data structures to stay around until that is done.
- */
- pid = kernel_thread(____call_usermodehelper, sub_info, CLONE_VFORK | SIGCHLD);
- if (pid < 0)
+ /* CLONE_VFORK: wait until the usermode helper has execve'd
+ * successfully We need the data structures to stay around
+ * until that is done. */
+ if (sub_info->wait)
+ pid = kernel_thread(wait_for_helper, sub_info,
+ CLONE_KERNEL | SIGCHLD);
+ else
+ pid = kernel_thread(____call_usermodehelper, sub_info,
+ CLONE_VFORK | SIGCHLD);
+
+ if (pid < 0) {
sub_info->retval = pid;
- complete(sub_info->complete);
+ complete(sub_info->complete);
+ } else if (!sub_info->wait)
+ complete(sub_info->complete);
}
/**
@@ -328,15 +208,17 @@ static void __call_usermodehelper(void *data)
* @path: pathname for the application
* @argv: null-terminated argument list
* @envp: null-terminated environment list
+ * @wait: wait for the application to finish and return status.
*
- * Runs a user-space application. The application is started asynchronously. It
- * runs as a child of keventd. It runs with full root capabilities. keventd silently
- * reaps the child when it exits.
+ * Runs a user-space application. The application is started
+ * asynchronously if wait is not set, and runs as a child of keventd.
+ * (ie. it runs with full root capabilities).
*
- * Must be called from process context. Returns zero on success, else a negative
- * error code.
+ * Must be called from process context. Returns a negative error code
+ * if program was not execed successfully, or (exitcode << 8 + signal)
+ * of the application (0 if wait is not set).
*/
-int call_usermodehelper(char *path, char **argv, char **envp)
+int call_usermodehelper(char *path, char **argv, char **envp, int wait)
{
DECLARE_COMPLETION(done);
struct subprocess_info sub_info = {
@@ -344,6 +226,7 @@ int call_usermodehelper(char *path, char **argv, char **envp)
.path = path,
.argv = argv,
.envp = envp,
+ .wait = wait,
.retval = 0,
};
DECLARE_WORK(work, __call_usermodehelper, &sub_info);
@@ -381,7 +264,6 @@ void dev_probe_unlock(void)
up(&dev_probe_sem);
}
-EXPORT_SYMBOL(exec_usermodehelper);
EXPORT_SYMBOL(call_usermodehelper);
#ifdef CONFIG_KMOD
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index f67675f3d9d3..287b81b65c34 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -252,49 +252,30 @@ int ptrace_writedata(struct task_struct *tsk, char * src, unsigned long dst, int
static int ptrace_setoptions(struct task_struct *child, long data)
{
+ child->ptrace &= ~PT_TRACE_MASK;
+
if (data & PTRACE_O_TRACESYSGOOD)
child->ptrace |= PT_TRACESYSGOOD;
- else
- child->ptrace &= ~PT_TRACESYSGOOD;
if (data & PTRACE_O_TRACEFORK)
child->ptrace |= PT_TRACE_FORK;
- else
- child->ptrace &= ~PT_TRACE_FORK;
if (data & PTRACE_O_TRACEVFORK)
child->ptrace |= PT_TRACE_VFORK;
- else
- child->ptrace &= ~PT_TRACE_VFORK;
if (data & PTRACE_O_TRACECLONE)
child->ptrace |= PT_TRACE_CLONE;
- else
- child->ptrace &= ~PT_TRACE_CLONE;
if (data & PTRACE_O_TRACEEXEC)
child->ptrace |= PT_TRACE_EXEC;
- else
- child->ptrace &= ~PT_TRACE_EXEC;
if (data & PTRACE_O_TRACEVFORKDONE)
child->ptrace |= PT_TRACE_VFORK_DONE;
- else
- child->ptrace &= ~PT_TRACE_VFORK_DONE;
if (data & PTRACE_O_TRACEEXIT)
child->ptrace |= PT_TRACE_EXIT;
- else
- child->ptrace &= ~PT_TRACE_EXIT;
-
- if ((data & (PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEFORK
- | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE
- | PTRACE_O_TRACEEXEC | PTRACE_O_TRACEEXIT
- | PTRACE_O_TRACEVFORKDONE))
- != data)
- return -EINVAL;
- return 0;
+ return (data & ~PTRACE_O_MASK) ? -EINVAL : 0;
}
static int ptrace_getsiginfo(struct task_struct *child, long data)
diff --git a/kernel/sched.c b/kernel/sched.c
index 1981a92ab129..7a38971d997e 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2095,21 +2095,6 @@ static void show_task(task_t * p)
}
}
-char * render_sigset_t(sigset_t *set, char *buffer)
-{
- int i = _NSIG, x;
- do {
- i -= 4, x = 0;
- if (sigismember(set, i+1)) x |= 1;
- if (sigismember(set, i+2)) x |= 2;
- if (sigismember(set, i+3)) x |= 4;
- if (sigismember(set, i+4)) x |= 8;
- *buffer++ = (x < 10 ? '0' : 'a' - 10) + x;
- } while (i >= 4);
- *buffer = 0;
- return buffer;
-}
-
void show_state(void)
{
task_t *g, *p;
diff --git a/kernel/signal.c b/kernel/signal.c
index d0d09cfbe863..b7ac6a557ddb 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -19,6 +19,7 @@
#include <linux/tty.h>
#include <linux/binfmts.h>
#include <linux/security.h>
+#include <linux/ptrace.h>
#include <asm/param.h>
#include <asm/uaccess.h>
#include <asm/siginfo.h>
@@ -1108,21 +1109,31 @@ static int kill_something_info(int sig, struct siginfo *info, int pid)
* These are for backward compatibility with the rest of the kernel source.
*/
+/*
+ * XXX should probably nix these interfaces and update the kernel
+ * to specify explicitly whether the signal is a group signal or
+ * specific to a thread.
+ */
int
send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
{
int ret;
- /* XXX should nix these interfaces and update the kernel */
+ /*
+ * We need the tasklist lock even for the specific
+ * thread case (when we don't need to follow the group
+ * lists) in order to avoid races with "p->sighand"
+ * going away or changing from under us.
+ */
+ read_lock(&tasklist_lock);
if (T(sig, SIG_KERNEL_BROADCAST_MASK)) {
- read_lock(&tasklist_lock);
ret = group_send_sig_info(sig, info, p);
- read_unlock(&tasklist_lock);
} else {
spin_lock_irq(&p->sighand->siglock);
ret = specific_send_sig_info(sig, info, p);
spin_unlock_irq(&p->sighand->siglock);
}
+ read_unlock(&tasklist_lock);
return ret;
}
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 7ce528ae021e..eced2f8d69ef 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -114,7 +114,7 @@ static int hci_run_hotplug(char *dev, char *action)
envp[3] = astr;
envp[4] = NULL;
- return call_usermodehelper(argv[0], argv, envp);
+ return call_usermodehelper(argv[0], argv, envp, 0);
}
#else
#define hci_run_hotplug(A...)
diff --git a/net/core/dev.c b/net/core/dev.c
index c70d31cea486..5535abdd4c3a 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2942,6 +2942,6 @@ static int net_run_sbin_hotplug(struct net_device *dev, char *action)
envp [i++] = action_str;
envp [i] = 0;
- return call_usermodehelper(argv [0], argv, envp);
+ return call_usermodehelper(argv [0], argv, envp, 0);
}
#endif
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 4d3075bda62d..a42f7803f578 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -454,7 +454,7 @@ out:
/* Impossible event. */
return;
case ICMP_FRAG_NEEDED:
- /* And it is the only really necesary thing :-) */
+ /* And it is the only really necessary thing :-) */
rel_info = ntohs(skb->h.icmph->un.frag.mtu);
if (rel_info < grehlen+68)
return;
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index 3694e07f332d..45534b28807d 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -383,7 +383,7 @@ out:
/* Impossible event. */
return;
case ICMP_FRAG_NEEDED:
- /* And it is the only really necesary thing :-) */
+ /* And it is the only really necessary thing :-) */
rel_info = ntohs(skb->h.icmph->un.frag.mtu);
if (rel_info < hlen+68)
return;
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 092243f9c4ab..979a23eb50cf 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -797,7 +797,7 @@ cbq_update(struct cbq_sched_data *q)
That is not all.
To maintain the rate allocated to the class,
we add to undertime virtual clock,
- necesary to complete transmitted packet.
+ necessary to complete transmitted packet.
(len/phys_bandwidth has been already passed
to the moment of cbq_update)
*/
diff --git a/security/capability.c b/security/capability.c
index 5909732acdfc..09882ecc997d 100644
--- a/security/capability.c
+++ b/security/capability.c
@@ -18,6 +18,7 @@
#include <linux/smp_lock.h>
#include <linux/skbuff.h>
#include <linux/netlink.h>
+#include <linux/ptrace.h>
int cap_capable (struct task_struct *tsk, int cap)
{
diff --git a/sound/oss/trident.c b/sound/oss/trident.c
index 912be5b6e882..4aafa78438cd 100644
--- a/sound/oss/trident.c
+++ b/sound/oss/trident.c
@@ -223,7 +223,7 @@
#define NR_HW_CH 32
-/* maxinum nuber of AC97 codecs connected, AC97 2.0 defined 4, but 7018 and 4D-NX only
+/* maximum number of AC97 codecs connected, AC97 2.0 defined 4, but 7018 and 4D-NX only
have 2 SDATA_IN lines (currently) */
#define NR_AC97 2
diff --git a/sound/pci/cs46xx/dsp_spos_scb_lib.c b/sound/pci/cs46xx/dsp_spos_scb_lib.c
index 1642b7bebb8d..7e8fa173e11f 100644
--- a/sound/pci/cs46xx/dsp_spos_scb_lib.c
+++ b/sound/pci/cs46xx/dsp_spos_scb_lib.c
@@ -1543,7 +1543,7 @@ int cs46xx_dsp_enable_spdif_out (cs46xx_t *chip)
/* dont touch anything if SPDIF is open */
if ( ins->spdif_status_out & DSP_SPDIF_STATUS_PLAYBACK_OPEN) {
/* when cs46xx_iec958_post_close(...) is called it
- will call this function if necesary depending on
+ will call this function if necessary depending on
this bit */
ins->spdif_status_out |= DSP_SPDIF_STATUS_OUTPUT_ENABLED;