diff options
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 @@ -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(¤t->sighand->siglock); - signr = dequeue_signal(current, ¤t->blocked, &info); - spin_unlock_irq(¤t->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(¤t->blocked, signr)) { - send_sig_info(signr, &info, current); - continue; - } - } - - ka = ¤t->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(®s, 0, sizeof(regs)); - irq_desc[irq].handle(irq, &irq_desc[irq], ®s); -} - -/* * 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(®s, 0, sizeof(regs)); - irq_desc[irq].handle(irq, &irq_desc[irq], ®s); -} - /* * 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 = ¤t->sig->action[sig-1]; + struct k_sigaction *ka = ¤t->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 = ¤t->sig->action[signr-1]; + ka = ¤t->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(¤t->sighand->siglock); - tmpsig = current->blocked; - siginitsetinv(¤t->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP)); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - - result = waitpid(pid, NULL, __WCLONE); - - /* Allow signals again */ - spin_lock_irq(¤t->sighand->siglock); - current->blocked = tmpsig; - recalc_sigpending(); - spin_unlock_irq(¤t->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(¤t->sighand->siglock); - tmpsig = current->blocked; - siginitsetinv(¤t->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP)); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - - waitpid_result = waitpid(pid, NULL, __WCLONE); atomic_dec(&kmod_concurrent); - - /* Allow signals again.. */ - spin_lock_irq(¤t->sighand->siglock); - current->blocked = tmpsig; - recalc_sigpending(); - spin_unlock_irq(¤t->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; |
