Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge from-linus to-akpm

Len Brown 84ffa747 702c7e76

+1526 -1198
+1 -2
CREDITS
··· 2423 2423 S: Canada 2424 2424 2425 2425 N: Zwane Mwaikambo 2426 - E: zwane@linuxpower.ca 2427 - W: http://function.linuxpower.ca 2426 + E: zwane@arm.linux.org.uk 2428 2427 D: Various driver hacking 2429 2428 D: Lowlevel x86 kernel hacking 2430 2429 D: General debugging
-14
Documentation/pci.txt
··· 266 266 in the kernel as they aren't compatible with hotplug or PCI domains or 267 267 having sane locking. 268 268 269 - pcibios_present() and Since ages, you don't need to test presence 270 - pci_present() of PCI subsystem when trying to talk to it. 271 - If it's not there, the list of PCI devices 272 - is empty and all functions for searching for 273 - devices just return NULL. 274 - pcibios_(read|write)_* Superseded by their pci_(read|write)_* 275 - counterparts. 276 - pcibios_find_* Superseded by their pci_get_* counterparts. 277 - pci_for_each_dev() Superseded by pci_get_device() 278 - pci_for_each_dev_reverse() Superseded by pci_find_device_reverse() 279 - pci_for_each_bus() Superseded by pci_find_next_bus() 280 269 pci_find_device() Superseded by pci_get_device() 281 270 pci_find_subsys() Superseded by pci_get_subsys() 282 271 pci_find_slot() Superseded by pci_get_slot() 283 - pcibios_find_class() Superseded by pci_get_class() 284 - pci_find_class() Superseded by pci_get_class() 285 - pci_(read|write)_*_nodev() Superseded by pci_bus_(read|write)_*()
+14 -2
MAINTAINERS
··· 1739 1739 1740 1740 OPL3-SA2, SA3, and SAx DRIVER 1741 1741 P: Zwane Mwaikambo 1742 - M: zwane@commfireservices.com 1742 + M: zwane@arm.linux.org.uk 1743 1743 L: linux-sound@vger.kernel.org 1744 1744 S: Maintained 1745 1745 ··· 1823 1823 PCI HOTPLUG COMPAQ DRIVER 1824 1824 P: Greg Kroah-Hartman 1825 1825 M: greg@kroah.com 1826 + S: Maintained 1827 + 1828 + PCIE HOTPLUG DRIVER 1829 + P: Kristen Carlson Accardi 1830 + M: kristen.c.accardi@intel.com 1831 + L: pcihpd-discuss@lists.sourceforge.net 1826 1832 S: Maintained 1827 1833 1828 1834 PCMCIA SUBSYSTEM ··· 1995 1989 1996 1990 SC1200 WDT DRIVER 1997 1991 P: Zwane Mwaikambo 1998 - M: zwane@commfireservices.com 1992 + M: zwane@arm.linux.org.uk 1999 1993 S: Maintained 2000 1994 2001 1995 SCHEDULER ··· 2205 2199 M: elf@buici.com 2206 2200 W: http://projects.buici.com/arm 2207 2201 L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) 2202 + S: Maintained 2203 + 2204 + SHPC HOTPLUG DRIVER 2205 + P: Kristen Carlson Accardi 2206 + M: kristen.c.accardi@intel.com 2207 + L: pcihpd-discuss@lists.sourceforge.net 2208 2208 S: Maintained 2209 2209 2210 2210 SPARC (sparc32):
+6
arch/arm/kernel/calls.S
··· 327 327 /* 310 */ .long sys_request_key 328 328 .long sys_keyctl 329 329 .long sys_semtimedop 330 + /* vserver */ .long sys_ni_syscall 331 + .long sys_ioprio_set 332 + /* 315 */ .long sys_ioprio_get 333 + .long sys_inotify_init 334 + .long sys_inotify_add_watch 335 + .long sys_inotify_rm_watch 330 336 __syscall_end: 331 337 332 338 .rept NR_syscalls - (__syscall_end - __syscall_start) / 4
+2 -2
arch/arm/mach-s3c2410/s3c2410.c
··· 18 18 * 28-Sep-2004 BJD Updates for new serial port bits 19 19 * 04-Nov-2004 BJD Updated UART configuration process 20 20 * 10-Jan-2005 BJD Removed s3c2410_clock_tick_rate 21 + * 13-Aug-2005 DA Removed UART from initial I/O mappings 21 22 */ 22 23 23 24 #include <linux/kernel.h> ··· 50 49 IODESC_ENT(USBHOST), 51 50 IODESC_ENT(CLKPWR), 52 51 IODESC_ENT(LCD), 53 - IODESC_ENT(UART), 54 52 IODESC_ENT(TIMER), 55 53 IODESC_ENT(ADC), 56 - IODESC_ENT(WATCHDOG) 54 + IODESC_ENT(WATCHDOG), 57 55 }; 58 56 59 57 static struct resource s3c_uart0_resource[] = {
+1 -1
arch/arm/mm/Kconfig
··· 384 384 385 385 config CPU_DCACHE_WRITETHROUGH 386 386 bool "Force write through D-cache" 387 - depends on (CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM1020) && !CPU_DISABLE_DCACHE 387 + depends on (CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM1020) && !CPU_DCACHE_DISABLE 388 388 default y if CPU_ARM925T 389 389 help 390 390 Say Y here to use the data cache in writethrough mode. Unless you
+1 -1
arch/arm/mm/proc-v6.S
··· 105 105 ENTRY(cpu_v6_switch_mm) 106 106 mov r2, #0 107 107 ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id 108 - mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB 108 + mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB 109 109 mcr p15, 0, r2, c7, c10, 4 @ drain write buffer 110 110 mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 111 111 mcr p15, 0, r1, c13, c0, 1 @ set context ID
+10 -24
arch/arm/nwfpe/softfloat.c
··· 1602 1602 if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) 1603 1603 || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) 1604 1604 ) { 1605 - if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) { 1606 - float_raise( float_flag_invalid ); 1607 - } 1605 + /* Do nothing, even if NaN as we're quiet */ 1608 1606 return 0; 1609 1607 } 1610 1608 aSign = extractFloat32Sign( a ); ··· 1627 1629 if ( ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) ) 1628 1630 || ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) ) 1629 1631 ) { 1630 - if ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) { 1631 - float_raise( float_flag_invalid ); 1632 - } 1632 + /* Do nothing, even if NaN as we're quiet */ 1633 1633 return 0; 1634 1634 } 1635 1635 aSign = extractFloat32Sign( a ); ··· 2489 2493 if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) 2490 2494 || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) 2491 2495 ) { 2492 - if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) { 2493 - float_raise( float_flag_invalid ); 2494 - } 2496 + /* Do nothing, even if NaN as we're quiet */ 2495 2497 return 0; 2496 2498 } 2497 2499 aSign = extractFloat64Sign( a ); ··· 2514 2520 if ( ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) ) 2515 2521 || ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) ) 2516 2522 ) { 2517 - if ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) { 2518 - float_raise( float_flag_invalid ); 2519 - } 2523 + /* Do nothing, even if NaN as we're quiet */ 2520 2524 return 0; 2521 2525 } 2522 2526 aSign = extractFloat64Sign( a ); ··· 3248 3256 ) { 3249 3257 if ( floatx80_is_signaling_nan( a ) 3250 3258 || floatx80_is_signaling_nan( b ) ) { 3251 - roundData->exception |= float_flag_invalid; 3259 + float_raise( float_flag_invalid ); 3252 3260 } 3253 3261 return 0; 3254 3262 } ··· 3278 3286 || ( ( extractFloatx80Exp( b ) == 0x7FFF ) 3279 3287 && (bits64) ( extractFloatx80Frac( b )<<1 ) ) 3280 3288 ) { 3281 - roundData->exception |= float_flag_invalid; 3289 + float_raise( float_flag_invalid ); 3282 3290 return 0; 3283 3291 } 3284 3292 aSign = extractFloatx80Sign( a ); ··· 3312 3320 || ( ( extractFloatx80Exp( b ) == 0x7FFF ) 3313 3321 && (bits64) ( extractFloatx80Frac( b )<<1 ) ) 3314 3322 ) { 3315 - roundData->exception |= float_flag_invalid; 3323 + float_raise( float_flag_invalid ); 3316 3324 return 0; 3317 3325 } 3318 3326 aSign = extractFloatx80Sign( a ); ··· 3345 3353 || ( ( extractFloatx80Exp( b ) == 0x7FFF ) 3346 3354 && (bits64) ( extractFloatx80Frac( b )<<1 ) ) 3347 3355 ) { 3348 - roundData->exception |= float_flag_invalid; 3356 + float_raise( float_flag_invalid ); 3349 3357 return 0; 3350 3358 } 3351 3359 return ··· 3374 3382 || ( ( extractFloatx80Exp( b ) == 0x7FFF ) 3375 3383 && (bits64) ( extractFloatx80Frac( b )<<1 ) ) 3376 3384 ) { 3377 - if ( floatx80_is_signaling_nan( a ) 3378 - || floatx80_is_signaling_nan( b ) ) { 3379 - roundData->exception |= float_flag_invalid; 3380 - } 3385 + /* Do nothing, even if NaN as we're quiet */ 3381 3386 return 0; 3382 3387 } 3383 3388 aSign = extractFloatx80Sign( a ); ··· 3408 3419 || ( ( extractFloatx80Exp( b ) == 0x7FFF ) 3409 3420 && (bits64) ( extractFloatx80Frac( b )<<1 ) ) 3410 3421 ) { 3411 - if ( floatx80_is_signaling_nan( a ) 3412 - || floatx80_is_signaling_nan( b ) ) { 3413 - roundData->exception |= float_flag_invalid; 3414 - } 3422 + /* Do nothing, even if NaN as we're quiet */ 3415 3423 return 0; 3416 3424 } 3417 3425 aSign = extractFloatx80Sign( a );
-4
arch/i386/kernel/apic.c
··· 726 726 static int __init detect_init_APIC (void) 727 727 { 728 728 u32 h, l, features; 729 - extern void get_cpu_vendor(struct cpuinfo_x86*); 730 729 731 730 /* Disabled by kernel option? */ 732 731 if (enable_local_apic < 0) 733 732 return -1; 734 - 735 - /* Workaround for us being called before identify_cpu(). */ 736 - get_cpu_vendor(&boot_cpu_data); 737 733 738 734 switch (boot_cpu_data.x86_vendor) { 739 735 case X86_VENDOR_AMD:
+2 -2
arch/i386/kernel/nmi.c
··· 195 195 wrmsr(MSR_P6_EVNTSEL0, 0, 0); 196 196 break; 197 197 case 15: 198 - if (boot_cpu_data.x86_model > 0x3) 198 + if (boot_cpu_data.x86_model > 0x4) 199 199 break; 200 200 201 201 wrmsr(MSR_P4_IQ_CCCR0, 0, 0); ··· 432 432 setup_p6_watchdog(); 433 433 break; 434 434 case 15: 435 - if (boot_cpu_data.x86_model > 0x3) 435 + if (boot_cpu_data.x86_model > 0x4) 436 436 return; 437 437 438 438 if (!setup_p4_watchdog())
+2 -9
arch/ia64/Kconfig
··· 392 392 config PCI 393 393 bool "PCI support" 394 394 help 395 - Find out whether you have a PCI motherboard. PCI is the name of a 396 - bus system, i.e. the way the CPU talks to the other stuff inside 397 - your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or 398 - VESA. If you have PCI, say Y, otherwise N. 399 - 400 - The PCI-HOWTO, available from 401 - <http://www.tldp.org/docs.html#howto>, contains valuable 402 - information about which PCI hardware does work under Linux and which 403 - doesn't. 395 + Real IA-64 machines all have PCI/PCI-X/PCI Express busses. Say Y 396 + here unless you are using a simulator without PCI support. 404 397 405 398 config PCI_DOMAINS 406 399 bool
+164 -98
arch/ia64/configs/sn2_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.10 4 - # Mon Jan 10 13:57:35 2005 3 + # Linux kernel version: 2.6.13-rc6 4 + # Tue Aug 16 14:40:41 2005 5 5 # 6 6 7 7 # ··· 10 10 CONFIG_EXPERIMENTAL=y 11 11 CONFIG_CLEAN_COMPILE=y 12 12 CONFIG_LOCK_KERNEL=y 13 + CONFIG_INIT_ENV_ARG_LIMIT=32 13 14 14 15 # 15 16 # General setup ··· 22 21 # CONFIG_BSD_PROCESS_ACCT is not set 23 22 CONFIG_SYSCTL=y 24 23 # CONFIG_AUDIT is not set 25 - CONFIG_LOG_BUF_SHIFT=20 26 24 CONFIG_HOTPLUG=y 27 25 CONFIG_KOBJECT_UEVENT=y 28 26 # CONFIG_IKCONFIG is not set 27 + CONFIG_CPUSETS=y 29 28 # CONFIG_EMBEDDED is not set 30 29 CONFIG_KALLSYMS=y 31 30 CONFIG_KALLSYMS_ALL=y 32 31 # CONFIG_KALLSYMS_EXTRA_PASS is not set 32 + CONFIG_PRINTK=y 33 + CONFIG_BUG=y 34 + CONFIG_BASE_FULL=y 33 35 CONFIG_FUTEX=y 34 36 CONFIG_EPOLL=y 35 - CONFIG_CPUSETS=y 36 - # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 37 37 CONFIG_SHMEM=y 38 38 CONFIG_CC_ALIGN_FUNCTIONS=0 39 39 CONFIG_CC_ALIGN_LABELS=0 40 40 CONFIG_CC_ALIGN_LOOPS=0 41 41 CONFIG_CC_ALIGN_JUMPS=0 42 42 # CONFIG_TINY_SHMEM is not set 43 + CONFIG_BASE_SMALL=0 43 44 44 45 # 45 46 # Loadable module support ··· 66 63 CONFIG_TIME_INTERPOLATION=y 67 64 CONFIG_EFI=y 68 65 CONFIG_GENERIC_IOMAP=y 66 + CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 67 + CONFIG_IA64_UNCACHED_ALLOCATOR=y 69 68 # CONFIG_IA64_GENERIC is not set 70 69 # CONFIG_IA64_DIG is not set 71 70 # CONFIG_IA64_HP_ZX1 is not set 71 + # CONFIG_IA64_HP_ZX1_SWIOTLB is not set 72 72 CONFIG_IA64_SGI_SN2=y 73 73 # CONFIG_IA64_HP_SIM is not set 74 74 # CONFIG_ITANIUM is not set ··· 80 74 # CONFIG_IA64_PAGE_SIZE_8KB is not set 81 75 CONFIG_IA64_PAGE_SIZE_16KB=y 82 76 # CONFIG_IA64_PAGE_SIZE_64KB is not set 77 + # CONFIG_HZ_100 is not set 78 + CONFIG_HZ_250=y 79 + # CONFIG_HZ_1000 is not set 80 + CONFIG_HZ=250 83 81 CONFIG_IA64_L1_CACHE_SHIFT=7 84 82 CONFIG_NUMA=y 85 83 CONFIG_VIRTUAL_MEM_MAP=y ··· 91 81 CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 92 82 # CONFIG_IA64_CYCLONE is not set 93 83 CONFIG_IOSAPIC=y 84 + CONFIG_IA64_SGI_SN_XP=m 94 85 CONFIG_FORCE_MAX_ZONEORDER=18 95 86 CONFIG_SMP=y 96 87 CONFIG_NR_CPUS=512 97 88 # CONFIG_HOTPLUG_CPU is not set 89 + CONFIG_SCHED_SMT=y 98 90 CONFIG_PREEMPT=y 91 + CONFIG_SELECT_MEMORY_MODEL=y 92 + # CONFIG_FLATMEM_MANUAL is not set 93 + CONFIG_DISCONTIGMEM_MANUAL=y 94 + # CONFIG_SPARSEMEM_MANUAL is not set 95 + CONFIG_DISCONTIGMEM=y 96 + CONFIG_FLAT_NODE_MEM_MAP=y 97 + CONFIG_NEED_MULTIPLE_NODES=y 99 98 CONFIG_HAVE_DEC_LOCK=y 100 99 CONFIG_IA32_SUPPORT=y 101 100 CONFIG_COMPAT=y ··· 124 105 # 125 106 # Power management and ACPI 126 107 # 108 + CONFIG_PM=y 127 109 CONFIG_ACPI=y 128 110 129 111 # ··· 134 114 CONFIG_ACPI_INTERPRETER=y 135 115 # CONFIG_ACPI_BUTTON is not set 136 116 CONFIG_ACPI_VIDEO=m 117 + CONFIG_ACPI_HOTKEY=m 137 118 # CONFIG_ACPI_FAN is not set 138 119 # CONFIG_ACPI_PROCESSOR is not set 139 120 CONFIG_ACPI_NUMA=y ··· 154 133 # CONFIG_PCI_MSI is not set 155 134 CONFIG_PCI_LEGACY_PROC=y 156 135 CONFIG_PCI_NAMES=y 136 + # CONFIG_PCI_DEBUG is not set 157 137 158 138 # 159 139 # PCI Hotplug Support ··· 163 141 # CONFIG_HOTPLUG_PCI_FAKE is not set 164 142 # CONFIG_HOTPLUG_PCI_ACPI is not set 165 143 # CONFIG_HOTPLUG_PCI_CPCI is not set 166 - # CONFIG_HOTPLUG_PCI_PCIE is not set 167 144 # CONFIG_HOTPLUG_PCI_SHPC is not set 168 145 CONFIG_HOTPLUG_PCI_SGI=y 169 146 ··· 172 151 # CONFIG_PCCARD is not set 173 152 174 153 # 175 - # PC-card bridges 154 + # Networking 176 155 # 156 + CONFIG_NET=y 157 + 158 + # 159 + # Networking options 160 + # 161 + CONFIG_PACKET=y 162 + CONFIG_PACKET_MMAP=y 163 + CONFIG_UNIX=y 164 + # CONFIG_NET_KEY is not set 165 + CONFIG_INET=y 166 + CONFIG_IP_MULTICAST=y 167 + # CONFIG_IP_ADVANCED_ROUTER is not set 168 + CONFIG_IP_FIB_HASH=y 169 + # CONFIG_IP_PNP is not set 170 + # CONFIG_NET_IPIP is not set 171 + # CONFIG_NET_IPGRE is not set 172 + # CONFIG_IP_MROUTE is not set 173 + # CONFIG_ARPD is not set 174 + CONFIG_SYN_COOKIES=y 175 + # CONFIG_INET_AH is not set 176 + # CONFIG_INET_ESP is not set 177 + # CONFIG_INET_IPCOMP is not set 178 + # CONFIG_INET_TUNNEL is not set 179 + CONFIG_IP_TCPDIAG=y 180 + # CONFIG_IP_TCPDIAG_IPV6 is not set 181 + # CONFIG_TCP_CONG_ADVANCED is not set 182 + CONFIG_TCP_CONG_BIC=y 183 + CONFIG_IPV6=m 184 + # CONFIG_IPV6_PRIVACY is not set 185 + # CONFIG_INET6_AH is not set 186 + # CONFIG_INET6_ESP is not set 187 + # CONFIG_INET6_IPCOMP is not set 188 + # CONFIG_INET6_TUNNEL is not set 189 + # CONFIG_IPV6_TUNNEL is not set 190 + # CONFIG_NETFILTER is not set 191 + 192 + # 193 + # SCTP Configuration (EXPERIMENTAL) 194 + # 195 + # CONFIG_IP_SCTP is not set 196 + # CONFIG_ATM is not set 197 + # CONFIG_BRIDGE is not set 198 + # CONFIG_VLAN_8021Q is not set 199 + # CONFIG_DECNET is not set 200 + # CONFIG_LLC2 is not set 201 + # CONFIG_IPX is not set 202 + # CONFIG_ATALK is not set 203 + # CONFIG_X25 is not set 204 + # CONFIG_LAPB is not set 205 + # CONFIG_NET_DIVERT is not set 206 + # CONFIG_ECONET is not set 207 + # CONFIG_WAN_ROUTER is not set 208 + # CONFIG_NET_SCHED is not set 209 + # CONFIG_NET_CLS_ROUTE is not set 210 + 211 + # 212 + # Network testing 213 + # 214 + # CONFIG_NET_PKTGEN is not set 215 + # CONFIG_HAMRADIO is not set 216 + # CONFIG_IRDA is not set 217 + # CONFIG_BT is not set 177 218 178 219 # 179 220 # Device Drivers ··· 246 163 # 247 164 CONFIG_STANDALONE=y 248 165 CONFIG_PREVENT_FIRMWARE_BUILD=y 249 - CONFIG_FW_LOADER=m 166 + CONFIG_FW_LOADER=y 250 167 # CONFIG_DEBUG_DRIVER is not set 251 168 252 169 # ··· 271 188 # CONFIG_BLK_CPQ_CISS_DA is not set 272 189 # CONFIG_BLK_DEV_DAC960 is not set 273 190 # CONFIG_BLK_DEV_UMEM is not set 191 + # CONFIG_BLK_DEV_COW_COMMON is not set 274 192 CONFIG_BLK_DEV_LOOP=y 275 193 CONFIG_BLK_DEV_CRYPTOLOOP=m 276 194 CONFIG_BLK_DEV_NBD=m ··· 336 252 # CONFIG_BLK_DEV_HPT366 is not set 337 253 # CONFIG_BLK_DEV_SC1200 is not set 338 254 # CONFIG_BLK_DEV_PIIX is not set 255 + # CONFIG_BLK_DEV_IT821X is not set 339 256 # CONFIG_BLK_DEV_NS87415 is not set 340 257 # CONFIG_BLK_DEV_PDC202XX_OLD is not set 341 258 # CONFIG_BLK_DEV_PDC202XX_NEW is not set ··· 367 282 CONFIG_BLK_DEV_SR=m 368 283 # CONFIG_BLK_DEV_SR_VENDOR is not set 369 284 CONFIG_CHR_DEV_SG=m 285 + CONFIG_CHR_DEV_SCH=m 370 286 371 287 # 372 288 # Some SCSI devices (e.g. CD jukebox) support multiple LUNs ··· 401 315 # CONFIG_SCSI_ATA_PIIX is not set 402 316 # CONFIG_SCSI_SATA_NV is not set 403 317 # CONFIG_SCSI_SATA_PROMISE is not set 318 + # CONFIG_SCSI_SATA_QSTOR is not set 404 319 # CONFIG_SCSI_SATA_SX4 is not set 405 320 # CONFIG_SCSI_SATA_SIL is not set 406 321 # CONFIG_SCSI_SATA_SIS is not set 407 322 # CONFIG_SCSI_SATA_ULI is not set 408 323 # CONFIG_SCSI_SATA_VIA is not set 409 324 CONFIG_SCSI_SATA_VITESSE=y 410 - # CONFIG_SCSI_BUSLOGIC is not set 411 325 # CONFIG_SCSI_DMX3191D is not set 412 - # CONFIG_SCSI_EATA is not set 413 - # CONFIG_SCSI_EATA_PIO is not set 414 326 # CONFIG_SCSI_FUTURE_DOMAIN is not set 415 - # CONFIG_SCSI_GDTH is not set 416 327 # CONFIG_SCSI_IPS is not set 417 328 # CONFIG_SCSI_INITIO is not set 418 329 # CONFIG_SCSI_INIA100 is not set 419 330 # CONFIG_SCSI_SYM53C8XX_2 is not set 420 331 # CONFIG_SCSI_IPR is not set 421 - # CONFIG_SCSI_QLOGIC_ISP is not set 422 332 # CONFIG_SCSI_QLOGIC_FC is not set 423 333 CONFIG_SCSI_QLOGIC_1280=y 424 334 # CONFIG_SCSI_QLOGIC_1280_1040 is not set ··· 424 342 CONFIG_SCSI_QLA2300=y 425 343 CONFIG_SCSI_QLA2322=y 426 344 # CONFIG_SCSI_QLA6312 is not set 345 + # CONFIG_SCSI_QLA24XX is not set 346 + # CONFIG_SCSI_LPFC is not set 427 347 # CONFIG_SCSI_DC395x is not set 428 348 # CONFIG_SCSI_DC390T is not set 429 349 # CONFIG_SCSI_DEBUG is not set ··· 448 364 CONFIG_DM_SNAPSHOT=m 449 365 CONFIG_DM_MIRROR=m 450 366 CONFIG_DM_ZERO=m 367 + CONFIG_DM_MULTIPATH=m 368 + CONFIG_DM_MULTIPATH_EMC=m 451 369 452 370 # 453 371 # Fusion MPT device support 454 372 # 455 373 CONFIG_FUSION=y 374 + CONFIG_FUSION_SPI=y 375 + CONFIG_FUSION_FC=y 456 376 CONFIG_FUSION_MAX_SGE=128 457 377 CONFIG_FUSION_CTL=m 458 378 ··· 471 383 # CONFIG_I2O is not set 472 384 473 385 # 474 - # Networking support 386 + # Network device support 475 387 # 476 - CONFIG_NET=y 477 - 478 - # 479 - # Networking options 480 - # 481 - CONFIG_PACKET=y 482 - CONFIG_PACKET_MMAP=y 483 - CONFIG_NETLINK_DEV=y 484 - CONFIG_UNIX=y 485 - # CONFIG_NET_KEY is not set 486 - CONFIG_INET=y 487 - CONFIG_IP_MULTICAST=y 488 - # CONFIG_IP_ADVANCED_ROUTER is not set 489 - # CONFIG_IP_PNP is not set 490 - # CONFIG_NET_IPIP is not set 491 - # CONFIG_NET_IPGRE is not set 492 - # CONFIG_IP_MROUTE is not set 493 - # CONFIG_ARPD is not set 494 - CONFIG_SYN_COOKIES=y 495 - # CONFIG_INET_AH is not set 496 - # CONFIG_INET_ESP is not set 497 - # CONFIG_INET_IPCOMP is not set 498 - # CONFIG_INET_TUNNEL is not set 499 - CONFIG_IP_TCPDIAG=y 500 - # CONFIG_IP_TCPDIAG_IPV6 is not set 501 - CONFIG_IPV6=m 502 - # CONFIG_IPV6_PRIVACY is not set 503 - # CONFIG_INET6_AH is not set 504 - # CONFIG_INET6_ESP is not set 505 - # CONFIG_INET6_IPCOMP is not set 506 - # CONFIG_INET6_TUNNEL is not set 507 - # CONFIG_IPV6_TUNNEL is not set 508 - # CONFIG_NETFILTER is not set 509 - 510 - # 511 - # SCTP Configuration (EXPERIMENTAL) 512 - # 513 - # CONFIG_IP_SCTP is not set 514 - # CONFIG_ATM is not set 515 - # CONFIG_BRIDGE is not set 516 - # CONFIG_VLAN_8021Q is not set 517 - # CONFIG_DECNET is not set 518 - # CONFIG_LLC2 is not set 519 - # CONFIG_IPX is not set 520 - # CONFIG_ATALK is not set 521 - # CONFIG_X25 is not set 522 - # CONFIG_LAPB is not set 523 - # CONFIG_NET_DIVERT is not set 524 - # CONFIG_ECONET is not set 525 - # CONFIG_WAN_ROUTER is not set 526 - 527 - # 528 - # QoS and/or fair queueing 529 - # 530 - # CONFIG_NET_SCHED is not set 531 - # CONFIG_NET_CLS_ROUTE is not set 532 - 533 - # 534 - # Network testing 535 - # 536 - # CONFIG_NET_PKTGEN is not set 537 - CONFIG_NETPOLL=y 538 - # CONFIG_NETPOLL_RX is not set 539 - # CONFIG_NETPOLL_TRAP is not set 540 - CONFIG_NET_POLL_CONTROLLER=y 541 - # CONFIG_HAMRADIO is not set 542 - # CONFIG_IRDA is not set 543 - # CONFIG_BT is not set 544 388 CONFIG_NETDEVICES=y 545 389 # CONFIG_DUMMY is not set 546 390 # CONFIG_BONDING is not set 547 391 # CONFIG_EQUALIZER is not set 548 392 # CONFIG_TUN is not set 549 - # CONFIG_ETHERTAP is not set 550 393 551 394 # 552 395 # ARCnet devices ··· 499 480 # CONFIG_HAMACHI is not set 500 481 # CONFIG_YELLOWFIN is not set 501 482 # CONFIG_R8169 is not set 483 + # CONFIG_SKGE is not set 502 484 # CONFIG_SK98LIN is not set 503 485 CONFIG_TIGON3=y 486 + # CONFIG_BNX2 is not set 504 487 505 488 # 506 489 # Ethernet (10000 Mbit) ··· 533 512 # CONFIG_NET_FC is not set 534 513 # CONFIG_SHAPER is not set 535 514 CONFIG_NETCONSOLE=y 515 + CONFIG_NETPOLL=y 516 + # CONFIG_NETPOLL_RX is not set 517 + # CONFIG_NETPOLL_TRAP is not set 518 + CONFIG_NET_POLL_CONTROLLER=y 536 519 537 520 # 538 521 # ISDN subsystem ··· 566 541 # CONFIG_INPUT_EVBUG is not set 567 542 568 543 # 569 - # Input I/O drivers 570 - # 571 - # CONFIG_GAMEPORT is not set 572 - CONFIG_SOUND_GAMEPORT=y 573 - # CONFIG_SERIO is not set 574 - # CONFIG_SERIO_I8042 is not set 575 - 576 - # 577 544 # Input Device Drivers 578 545 # 579 546 # CONFIG_INPUT_KEYBOARD is not set ··· 573 556 # CONFIG_INPUT_JOYSTICK is not set 574 557 # CONFIG_INPUT_TOUCHSCREEN is not set 575 558 # CONFIG_INPUT_MISC is not set 559 + 560 + # 561 + # Hardware I/O ports 562 + # 563 + # CONFIG_SERIO is not set 564 + # CONFIG_GAMEPORT is not set 576 565 577 566 # 578 567 # Character devices ··· 591 568 # CONFIG_CYCLADES is not set 592 569 # CONFIG_MOXA_SMARTIO is not set 593 570 # CONFIG_ISI is not set 594 - # CONFIG_SYNCLINK is not set 595 571 # CONFIG_SYNCLINKMP is not set 596 572 # CONFIG_N_HDLC is not set 573 + # CONFIG_SPECIALIX is not set 574 + # CONFIG_SX is not set 597 575 # CONFIG_STALDRV is not set 598 576 CONFIG_SGI_SNSC=y 599 577 CONFIG_SGI_TIOCX=y ··· 611 587 CONFIG_SERIAL_CORE=y 612 588 CONFIG_SERIAL_CORE_CONSOLE=y 613 589 CONFIG_SERIAL_SGI_L1_CONSOLE=y 590 + # CONFIG_SERIAL_JSM is not set 614 591 CONFIG_SERIAL_SGI_IOC4=y 615 592 CONFIG_UNIX98_PTYS=y 616 593 CONFIG_LEGACY_PTYS=y ··· 640 615 CONFIG_RAW_DRIVER=m 641 616 # CONFIG_HPET is not set 642 617 CONFIG_MAX_RAW_DEVS=256 618 + # CONFIG_HANGCHECK_TIMER is not set 643 619 CONFIG_MMTIMER=y 620 + 621 + # 622 + # TPM devices 623 + # 624 + # CONFIG_TCG_TPM is not set 644 625 645 626 # 646 627 # I2C support 647 628 # 648 629 # CONFIG_I2C is not set 630 + # CONFIG_I2C_SENSOR is not set 649 631 650 632 # 651 633 # Dallas's 1-wire bus 652 634 # 653 635 # CONFIG_W1 is not set 636 + 637 + # 638 + # Hardware Monitoring support 639 + # 640 + # CONFIG_HWMON is not set 654 641 655 642 # 656 643 # Misc devices ··· 697 660 # 698 661 # USB support 699 662 # 663 + CONFIG_USB_ARCH_HAS_HCD=y 664 + CONFIG_USB_ARCH_HAS_OHCI=y 700 665 CONFIG_USB=m 701 666 # CONFIG_USB_DEBUG is not set 702 667 ··· 708 669 # CONFIG_USB_DEVICEFS is not set 709 670 # CONFIG_USB_BANDWIDTH is not set 710 671 # CONFIG_USB_DYNAMIC_MINORS is not set 672 + # CONFIG_USB_SUSPEND is not set 711 673 # CONFIG_USB_OTG is not set 712 - CONFIG_USB_ARCH_HAS_HCD=y 713 - CONFIG_USB_ARCH_HAS_OHCI=y 714 674 715 675 # 716 676 # USB Host Controller Drivers ··· 717 679 CONFIG_USB_EHCI_HCD=m 718 680 # CONFIG_USB_EHCI_SPLIT_ISO is not set 719 681 # CONFIG_USB_EHCI_ROOT_HUB_TT is not set 682 + # CONFIG_USB_ISP116X_HCD is not set 720 683 CONFIG_USB_OHCI_HCD=m 684 + # CONFIG_USB_OHCI_BIG_ENDIAN is not set 685 + CONFIG_USB_OHCI_LITTLE_ENDIAN=y 721 686 CONFIG_USB_UHCI_HCD=m 722 687 # CONFIG_USB_SL811_HCD is not set 723 688 ··· 751 710 # CONFIG_USB_MOUSE is not set 752 711 # CONFIG_USB_AIPTEK is not set 753 712 # CONFIG_USB_WACOM is not set 713 + # CONFIG_USB_ACECAD is not set 754 714 # CONFIG_USB_KBTAB is not set 755 715 # CONFIG_USB_POWERMATE is not set 756 716 # CONFIG_USB_MTOUCH is not set 717 + # CONFIG_USB_ITMTOUCH is not set 757 718 # CONFIG_USB_EGALAX is not set 758 719 # CONFIG_USB_XPAD is not set 759 720 # CONFIG_USB_ATI_REMOTE is not set 721 + # CONFIG_USB_KEYSPAN_REMOTE is not set 760 722 761 723 # 762 724 # USB Imaging devices ··· 784 740 # CONFIG_USB_PEGASUS is not set 785 741 # CONFIG_USB_RTL8150 is not set 786 742 # CONFIG_USB_USBNET is not set 743 + CONFIG_USB_MON=y 787 744 788 745 # 789 746 # USB port drivers ··· 808 763 # CONFIG_USB_CYTHERM is not set 809 764 # CONFIG_USB_PHIDGETKIT is not set 810 765 # CONFIG_USB_PHIDGETSERVO is not set 766 + # CONFIG_USB_IDMOUSE is not set 767 + # CONFIG_USB_SISUSBVGA is not set 768 + # CONFIG_USB_LD is not set 811 769 812 770 # 813 - # USB ATM/DSL drivers 771 + # USB DSL modem support 814 772 # 815 773 816 774 # ··· 830 782 # InfiniBand support 831 783 # 832 784 CONFIG_INFINIBAND=m 785 + CONFIG_INFINIBAND_USER_VERBS=m 833 786 CONFIG_INFINIBAND_MTHCA=m 834 787 # CONFIG_INFINIBAND_MTHCA_DEBUG is not set 835 788 CONFIG_INFINIBAND_IPOIB=m ··· 848 799 CONFIG_EXT2_FS_XATTR=y 849 800 CONFIG_EXT2_FS_POSIX_ACL=y 850 801 CONFIG_EXT2_FS_SECURITY=y 802 + # CONFIG_EXT2_FS_XIP is not set 851 803 CONFIG_EXT3_FS=y 852 804 CONFIG_EXT3_FS_XATTR=y 853 805 CONFIG_EXT3_FS_POSIX_ACL=y ··· 864 814 CONFIG_REISERFS_FS_SECURITY=y 865 815 # CONFIG_JFS_FS is not set 866 816 CONFIG_FS_POSIX_ACL=y 817 + 818 + # 819 + # XFS support 820 + # 867 821 CONFIG_XFS_FS=y 822 + CONFIG_XFS_EXPORT=y 868 823 CONFIG_XFS_RT=y 869 824 CONFIG_XFS_QUOTA=y 870 825 # CONFIG_XFS_SECURITY is not set 871 826 CONFIG_XFS_POSIX_ACL=y 872 827 # CONFIG_MINIX_FS is not set 873 828 # CONFIG_ROMFS_FS is not set 829 + CONFIG_INOTIFY=y 874 830 CONFIG_QUOTA=y 875 831 # CONFIG_QFMT_V1 is not set 876 832 # CONFIG_QFMT_V2 is not set ··· 910 854 CONFIG_PROC_FS=y 911 855 CONFIG_PROC_KCORE=y 912 856 CONFIG_SYSFS=y 913 - # CONFIG_DEVFS_FS is not set 914 857 # CONFIG_DEVPTS_FS_XATTR is not set 915 858 CONFIG_TMPFS=y 916 859 CONFIG_TMPFS_XATTR=y ··· 940 885 # 941 886 CONFIG_NFS_FS=m 942 887 CONFIG_NFS_V3=y 888 + # CONFIG_NFS_V3_ACL is not set 943 889 CONFIG_NFS_V4=y 944 890 CONFIG_NFS_DIRECTIO=y 945 891 CONFIG_NFSD=m 946 892 CONFIG_NFSD_V3=y 893 + # CONFIG_NFSD_V3_ACL is not set 947 894 CONFIG_NFSD_V4=y 948 895 CONFIG_NFSD_TCP=y 949 896 CONFIG_LOCKD=m 950 897 CONFIG_LOCKD_V4=y 951 - CONFIG_EXPORTFS=m 898 + CONFIG_EXPORTFS=y 899 + CONFIG_NFS_COMMON=y 952 900 CONFIG_SUNRPC=m 953 901 CONFIG_SUNRPC_GSS=m 954 902 CONFIG_RPCSEC_GSS_KRB5=m ··· 1038 980 # CONFIG_LIBCRC32C is not set 1039 981 CONFIG_ZLIB_INFLATE=m 1040 982 CONFIG_ZLIB_DEFLATE=m 983 + CONFIG_GENERIC_ALLOCATOR=y 984 + CONFIG_GENERIC_HARDIRQS=y 985 + CONFIG_GENERIC_IRQ_PROBE=y 1041 986 1042 987 # 1043 988 # Profiling support ··· 1050 989 # 1051 990 # Kernel hacking 1052 991 # 992 + # CONFIG_PRINTK_TIME is not set 1053 993 CONFIG_DEBUG_KERNEL=y 1054 994 CONFIG_MAGIC_SYSRQ=y 995 + CONFIG_LOG_BUF_SHIFT=20 1055 996 # CONFIG_SCHEDSTATS is not set 1056 997 # CONFIG_DEBUG_SLAB is not set 998 + CONFIG_DEBUG_PREEMPT=y 1057 999 # CONFIG_DEBUG_SPINLOCK is not set 1058 1000 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set 1059 1001 # CONFIG_DEBUG_KOBJECT is not set 1060 1002 CONFIG_DEBUG_INFO=y 1061 1003 # CONFIG_DEBUG_FS is not set 1004 + # CONFIG_KPROBES is not set 1062 1005 CONFIG_IA64_GRANULE_16MB=y 1063 1006 # CONFIG_IA64_GRANULE_64MB is not set 1064 1007 # CONFIG_IA64_PRINT_HAZARDS is not set ··· 1084 1019 CONFIG_CRYPTO_HMAC=y 1085 1020 # CONFIG_CRYPTO_NULL is not set 1086 1021 # CONFIG_CRYPTO_MD4 is not set 1087 - CONFIG_CRYPTO_MD5=m 1022 + CONFIG_CRYPTO_MD5=y 1088 1023 CONFIG_CRYPTO_SHA1=m 1089 1024 # CONFIG_CRYPTO_SHA256 is not set 1090 1025 # CONFIG_CRYPTO_SHA512 is not set 1091 1026 # CONFIG_CRYPTO_WP512 is not set 1027 + # CONFIG_CRYPTO_TGR192 is not set 1092 1028 CONFIG_CRYPTO_DES=m 1093 1029 # CONFIG_CRYPTO_BLOWFISH is not set 1094 1030 # CONFIG_CRYPTO_TWOFISH is not set
+81 -68
arch/ia64/configs/tiger_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.13-rc1-20050629 4 - # Wed Jun 29 15:28:12 2005 3 + # Linux kernel version: 2.6.13-rc6-tiger-smp 4 + # Wed Aug 17 10:19:51 2005 5 5 # 6 6 7 7 # ··· 132 132 CONFIG_ACPI_INTERPRETER=y 133 133 CONFIG_ACPI_BUTTON=m 134 134 # CONFIG_ACPI_VIDEO is not set 135 + # CONFIG_ACPI_HOTKEY is not set 135 136 CONFIG_ACPI_FAN=m 136 137 CONFIG_ACPI_PROCESSOR=m 137 138 # CONFIG_ACPI_HOTPLUG_CPU is not set ··· 171 170 # CONFIG_PCCARD is not set 172 171 173 172 # 173 + # Networking 174 + # 175 + CONFIG_NET=y 176 + 177 + # 178 + # Networking options 179 + # 180 + CONFIG_PACKET=y 181 + # CONFIG_PACKET_MMAP is not set 182 + CONFIG_UNIX=y 183 + # CONFIG_NET_KEY is not set 184 + CONFIG_INET=y 185 + CONFIG_IP_MULTICAST=y 186 + # CONFIG_IP_ADVANCED_ROUTER is not set 187 + CONFIG_IP_FIB_HASH=y 188 + # CONFIG_IP_PNP is not set 189 + # CONFIG_NET_IPIP is not set 190 + # CONFIG_NET_IPGRE is not set 191 + # CONFIG_IP_MROUTE is not set 192 + CONFIG_ARPD=y 193 + CONFIG_SYN_COOKIES=y 194 + # CONFIG_INET_AH is not set 195 + # CONFIG_INET_ESP is not set 196 + # CONFIG_INET_IPCOMP is not set 197 + # CONFIG_INET_TUNNEL is not set 198 + CONFIG_IP_TCPDIAG=y 199 + # CONFIG_IP_TCPDIAG_IPV6 is not set 200 + # CONFIG_TCP_CONG_ADVANCED is not set 201 + CONFIG_TCP_CONG_BIC=y 202 + # CONFIG_IPV6 is not set 203 + # CONFIG_NETFILTER is not set 204 + 205 + # 206 + # SCTP Configuration (EXPERIMENTAL) 207 + # 208 + # CONFIG_IP_SCTP is not set 209 + # CONFIG_ATM is not set 210 + # CONFIG_BRIDGE is not set 211 + # CONFIG_VLAN_8021Q is not set 212 + # CONFIG_DECNET is not set 213 + # CONFIG_LLC2 is not set 214 + # CONFIG_IPX is not set 215 + # CONFIG_ATALK is not set 216 + # CONFIG_X25 is not set 217 + # CONFIG_LAPB is not set 218 + # CONFIG_NET_DIVERT is not set 219 + # CONFIG_ECONET is not set 220 + # CONFIG_WAN_ROUTER is not set 221 + # CONFIG_NET_SCHED is not set 222 + # CONFIG_NET_CLS_ROUTE is not set 223 + 224 + # 225 + # Network testing 226 + # 227 + # CONFIG_NET_PKTGEN is not set 228 + # CONFIG_HAMRADIO is not set 229 + # CONFIG_IRDA is not set 230 + # CONFIG_BT is not set 231 + 232 + # 174 233 # Device Drivers 175 234 # 176 235 ··· 239 178 # 240 179 CONFIG_STANDALONE=y 241 180 CONFIG_PREVENT_FIRMWARE_BUILD=y 242 - # CONFIG_FW_LOADER is not set 181 + CONFIG_FW_LOADER=m 243 182 # CONFIG_DEBUG_DRIVER is not set 244 183 245 184 # ··· 409 348 CONFIG_SCSI_QLA2300=m 410 349 CONFIG_SCSI_QLA2322=m 411 350 # CONFIG_SCSI_QLA6312 is not set 351 + # CONFIG_SCSI_QLA24XX is not set 412 352 # CONFIG_SCSI_LPFC is not set 413 353 # CONFIG_SCSI_DC395x is not set 414 354 # CONFIG_SCSI_DC390T is not set ··· 455 393 # CONFIG_I2O is not set 456 394 457 395 # 458 - # Networking support 396 + # Network device support 459 397 # 460 - CONFIG_NET=y 461 - 462 - # 463 - # Networking options 464 - # 465 - CONFIG_PACKET=y 466 - # CONFIG_PACKET_MMAP is not set 467 - CONFIG_UNIX=y 468 - # CONFIG_NET_KEY is not set 469 - CONFIG_INET=y 470 - CONFIG_IP_MULTICAST=y 471 - # CONFIG_IP_ADVANCED_ROUTER is not set 472 - CONFIG_IP_FIB_HASH=y 473 - # CONFIG_IP_PNP is not set 474 - # CONFIG_NET_IPIP is not set 475 - # CONFIG_NET_IPGRE is not set 476 - # CONFIG_IP_MROUTE is not set 477 - CONFIG_ARPD=y 478 - CONFIG_SYN_COOKIES=y 479 - # CONFIG_INET_AH is not set 480 - # CONFIG_INET_ESP is not set 481 - # CONFIG_INET_IPCOMP is not set 482 - # CONFIG_INET_TUNNEL is not set 483 - CONFIG_IP_TCPDIAG=y 484 - # CONFIG_IP_TCPDIAG_IPV6 is not set 485 - # CONFIG_TCP_CONG_ADVANCED is not set 486 - CONFIG_TCP_CONG_BIC=y 487 - # CONFIG_IPV6 is not set 488 - # CONFIG_NETFILTER is not set 489 - 490 - # 491 - # SCTP Configuration (EXPERIMENTAL) 492 - # 493 - # CONFIG_IP_SCTP is not set 494 - # CONFIG_ATM is not set 495 - # CONFIG_BRIDGE is not set 496 - # CONFIG_VLAN_8021Q is not set 497 - # CONFIG_DECNET is not set 498 - # CONFIG_LLC2 is not set 499 - # CONFIG_IPX is not set 500 - # CONFIG_ATALK is not set 501 - # CONFIG_X25 is not set 502 - # CONFIG_LAPB is not set 503 - # CONFIG_NET_DIVERT is not set 504 - # CONFIG_ECONET is not set 505 - # CONFIG_WAN_ROUTER is not set 506 - 507 - # 508 - # QoS and/or fair queueing 509 - # 510 - # CONFIG_NET_SCHED is not set 511 - # CONFIG_NET_CLS_ROUTE is not set 512 - 513 - # 514 - # Network testing 515 - # 516 - # CONFIG_NET_PKTGEN is not set 517 - CONFIG_NETPOLL=y 518 - # CONFIG_NETPOLL_RX is not set 519 - # CONFIG_NETPOLL_TRAP is not set 520 - CONFIG_NET_POLL_CONTROLLER=y 521 - # CONFIG_HAMRADIO is not set 522 - # CONFIG_IRDA is not set 523 - # CONFIG_BT is not set 524 398 CONFIG_NETDEVICES=y 525 399 CONFIG_DUMMY=m 526 400 # CONFIG_BONDING is not set ··· 553 555 # CONFIG_NET_FC is not set 554 556 # CONFIG_SHAPER is not set 555 557 CONFIG_NETCONSOLE=y 558 + CONFIG_NETPOLL=y 559 + # CONFIG_NETPOLL_RX is not set 560 + # CONFIG_NETPOLL_TRAP is not set 561 + CONFIG_NET_POLL_CONTROLLER=y 556 562 557 563 # 558 564 # ISDN subsystem ··· 682 680 CONFIG_DRM_RADEON=m 683 681 CONFIG_DRM_MGA=m 684 682 CONFIG_DRM_SIS=m 683 + # CONFIG_DRM_VIA is not set 685 684 CONFIG_RAW_DRIVER=m 686 685 CONFIG_HPET=y 687 686 # CONFIG_HPET_RTC_IRQ is not set ··· 699 696 # I2C support 700 697 # 701 698 # CONFIG_I2C is not set 699 + # CONFIG_I2C_SENSOR is not set 702 700 703 701 # 704 702 # Dallas's 1-wire bus 705 703 # 706 704 # CONFIG_W1 is not set 705 + 706 + # 707 + # Hardware Monitoring support 708 + # 709 + CONFIG_HWMON=y 710 + # CONFIG_HWMON_DEBUG_CHIP is not set 707 711 708 712 # 709 713 # Misc devices ··· 810 800 # CONFIG_USB_EGALAX is not set 811 801 # CONFIG_USB_XPAD is not set 812 802 # CONFIG_USB_ATI_REMOTE is not set 803 + # CONFIG_USB_KEYSPAN_REMOTE is not set 813 804 814 805 # 815 806 # USB Imaging devices ··· 861 850 # CONFIG_USB_PHIDGETSERVO is not set 862 851 # CONFIG_USB_IDMOUSE is not set 863 852 # CONFIG_USB_SISUSBVGA is not set 853 + # CONFIG_USB_LD is not set 864 854 # CONFIG_USB_TEST is not set 865 855 866 856 # ··· 922 910 # CONFIG_XFS_POSIX_ACL is not set 923 911 # CONFIG_MINIX_FS is not set 924 912 # CONFIG_ROMFS_FS is not set 913 + CONFIG_INOTIFY=y 925 914 # CONFIG_QUOTA is not set 926 915 CONFIG_DNOTIFY=y 927 916 CONFIG_AUTOFS_FS=y
+100 -124
arch/ia64/configs/zx1_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.13-rc1-20050629 4 - # Wed Jun 29 15:31:11 2005 3 + # Linux kernel version: 2.6.13-rc6 4 + # Wed Aug 17 10:02:43 2005 5 5 # 6 6 7 7 # ··· 132 132 CONFIG_ACPI_INTERPRETER=y 133 133 CONFIG_ACPI_BUTTON=y 134 134 CONFIG_ACPI_VIDEO=m 135 + CONFIG_ACPI_HOTKEY=m 135 136 CONFIG_ACPI_FAN=y 136 137 CONFIG_ACPI_PROCESSOR=y 137 138 CONFIG_ACPI_THERMAL=y ··· 168 167 # PCCARD (PCMCIA/CardBus) support 169 168 # 170 169 # CONFIG_PCCARD is not set 170 + 171 + # 172 + # Networking 173 + # 174 + CONFIG_NET=y 175 + 176 + # 177 + # Networking options 178 + # 179 + CONFIG_PACKET=y 180 + # CONFIG_PACKET_MMAP is not set 181 + CONFIG_UNIX=y 182 + # CONFIG_NET_KEY is not set 183 + CONFIG_INET=y 184 + CONFIG_IP_MULTICAST=y 185 + # CONFIG_IP_ADVANCED_ROUTER is not set 186 + CONFIG_IP_FIB_HASH=y 187 + # CONFIG_IP_PNP is not set 188 + # CONFIG_NET_IPIP is not set 189 + # CONFIG_NET_IPGRE is not set 190 + # CONFIG_IP_MROUTE is not set 191 + # CONFIG_ARPD is not set 192 + # CONFIG_SYN_COOKIES is not set 193 + # CONFIG_INET_AH is not set 194 + # CONFIG_INET_ESP is not set 195 + # CONFIG_INET_IPCOMP is not set 196 + # CONFIG_INET_TUNNEL is not set 197 + # CONFIG_IP_TCPDIAG is not set 198 + # CONFIG_IP_TCPDIAG_IPV6 is not set 199 + # CONFIG_TCP_CONG_ADVANCED is not set 200 + CONFIG_TCP_CONG_BIC=y 201 + 202 + # 203 + # IP: Virtual Server Configuration 204 + # 205 + # CONFIG_IP_VS is not set 206 + # CONFIG_IPV6 is not set 207 + CONFIG_NETFILTER=y 208 + # CONFIG_NETFILTER_DEBUG is not set 209 + 210 + # 211 + # IP: Netfilter Configuration 212 + # 213 + # CONFIG_IP_NF_CONNTRACK is not set 214 + # CONFIG_IP_NF_CONNTRACK_MARK is not set 215 + # CONFIG_IP_NF_QUEUE is not set 216 + # CONFIG_IP_NF_IPTABLES is not set 217 + CONFIG_IP_NF_ARPTABLES=y 218 + # CONFIG_IP_NF_ARPFILTER is not set 219 + # CONFIG_IP_NF_ARP_MANGLE is not set 220 + 221 + # 222 + # SCTP Configuration (EXPERIMENTAL) 223 + # 224 + # CONFIG_IP_SCTP is not set 225 + # CONFIG_ATM is not set 226 + # CONFIG_BRIDGE is not set 227 + # CONFIG_VLAN_8021Q is not set 228 + # CONFIG_DECNET is not set 229 + # CONFIG_LLC2 is not set 230 + # CONFIG_IPX is not set 231 + # CONFIG_ATALK is not set 232 + # CONFIG_X25 is not set 233 + # CONFIG_LAPB is not set 234 + # CONFIG_NET_DIVERT is not set 235 + # CONFIG_ECONET is not set 236 + # CONFIG_WAN_ROUTER is not set 237 + # CONFIG_NET_SCHED is not set 238 + # CONFIG_NET_CLS_ROUTE is not set 239 + 240 + # 241 + # Network testing 242 + # 243 + # CONFIG_NET_PKTGEN is not set 244 + # CONFIG_HAMRADIO is not set 245 + # CONFIG_IRDA is not set 246 + # CONFIG_BT is not set 171 247 172 248 # 173 249 # Device Drivers ··· 427 349 # CONFIG_SCSI_QLA2300 is not set 428 350 # CONFIG_SCSI_QLA2322 is not set 429 351 # CONFIG_SCSI_QLA6312 is not set 352 + # CONFIG_SCSI_QLA24XX is not set 430 353 # CONFIG_SCSI_LPFC is not set 431 354 # CONFIG_SCSI_DC395x is not set 432 355 # CONFIG_SCSI_DC390T is not set ··· 441 362 # 442 363 # Fusion MPT device support 443 364 # 444 - # CONFIG_FUSION is not set 445 - # CONFIG_FUSION_SPI is not set 446 - # CONFIG_FUSION_FC is not set 365 + CONFIG_FUSION=y 366 + CONFIG_FUSION_SPI=y 367 + CONFIG_FUSION_FC=y 368 + CONFIG_FUSION_MAX_SGE=128 369 + CONFIG_FUSION_CTL=m 447 370 448 371 # 449 372 # IEEE 1394 (FireWire) support ··· 458 377 # CONFIG_I2O is not set 459 378 460 379 # 461 - # Networking support 380 + # Network device support 462 381 # 463 - CONFIG_NET=y 464 - 465 - # 466 - # Networking options 467 - # 468 - CONFIG_PACKET=y 469 - # CONFIG_PACKET_MMAP is not set 470 - CONFIG_UNIX=y 471 - # CONFIG_NET_KEY is not set 472 - CONFIG_INET=y 473 - CONFIG_IP_MULTICAST=y 474 - # CONFIG_IP_ADVANCED_ROUTER is not set 475 - CONFIG_IP_FIB_HASH=y 476 - # CONFIG_IP_PNP is not set 477 - # CONFIG_NET_IPIP is not set 478 - # CONFIG_NET_IPGRE is not set 479 - # CONFIG_IP_MROUTE is not set 480 - # CONFIG_ARPD is not set 481 - # CONFIG_SYN_COOKIES is not set 482 - # CONFIG_INET_AH is not set 483 - # CONFIG_INET_ESP is not set 484 - # CONFIG_INET_IPCOMP is not set 485 - # CONFIG_INET_TUNNEL is not set 486 - # CONFIG_IP_TCPDIAG is not set 487 - # CONFIG_IP_TCPDIAG_IPV6 is not set 488 - # CONFIG_TCP_CONG_ADVANCED is not set 489 - CONFIG_TCP_CONG_BIC=y 490 - 491 - # 492 - # IP: Virtual Server Configuration 493 - # 494 - # CONFIG_IP_VS is not set 495 - # CONFIG_IPV6 is not set 496 - CONFIG_NETFILTER=y 497 - # CONFIG_NETFILTER_DEBUG is not set 498 - 499 - # 500 - # IP: Netfilter Configuration 501 - # 502 - # CONFIG_IP_NF_CONNTRACK is not set 503 - # CONFIG_IP_NF_CONNTRACK_MARK is not set 504 - # CONFIG_IP_NF_QUEUE is not set 505 - # CONFIG_IP_NF_IPTABLES is not set 506 - CONFIG_IP_NF_ARPTABLES=y 507 - # CONFIG_IP_NF_ARPFILTER is not set 508 - # CONFIG_IP_NF_ARP_MANGLE is not set 509 - 510 - # 511 - # SCTP Configuration (EXPERIMENTAL) 512 - # 513 - # CONFIG_IP_SCTP is not set 514 - # CONFIG_ATM is not set 515 - # CONFIG_BRIDGE is not set 516 - # CONFIG_VLAN_8021Q is not set 517 - # CONFIG_DECNET is not set 518 - # CONFIG_LLC2 is not set 519 - # CONFIG_IPX is not set 520 - # CONFIG_ATALK is not set 521 - # CONFIG_X25 is not set 522 - # CONFIG_LAPB is not set 523 - # CONFIG_NET_DIVERT is not set 524 - # CONFIG_ECONET is not set 525 - # CONFIG_WAN_ROUTER is not set 526 - 527 - # 528 - # QoS and/or fair queueing 529 - # 530 - # CONFIG_NET_SCHED is not set 531 - # CONFIG_NET_CLS_ROUTE is not set 532 - 533 - # 534 - # Network testing 535 - # 536 - # CONFIG_NET_PKTGEN is not set 537 - # CONFIG_NETPOLL is not set 538 - # CONFIG_NET_POLL_CONTROLLER is not set 539 - # CONFIG_HAMRADIO is not set 540 - # CONFIG_IRDA is not set 541 - # CONFIG_BT is not set 542 382 CONFIG_NETDEVICES=y 543 383 CONFIG_DUMMY=y 544 384 # CONFIG_BONDING is not set ··· 557 555 # CONFIG_NET_FC is not set 558 556 # CONFIG_SHAPER is not set 559 557 # CONFIG_NETCONSOLE is not set 558 + # CONFIG_NETPOLL is not set 559 + # CONFIG_NET_POLL_CONTROLLER is not set 560 560 561 561 # 562 562 # ISDN subsystem ··· 663 659 CONFIG_DRM_RADEON=y 664 660 # CONFIG_DRM_MGA is not set 665 661 # CONFIG_DRM_SIS is not set 662 + # CONFIG_DRM_VIA is not set 666 663 # CONFIG_RAW_DRIVER is not set 667 664 # CONFIG_HPET is not set 668 665 # CONFIG_HANGCHECK_TIMER is not set ··· 711 706 # CONFIG_I2C_VIAPRO is not set 712 707 # CONFIG_I2C_VOODOO3 is not set 713 708 # CONFIG_I2C_PCA_ISA is not set 714 - 715 - # 716 - # Hardware Sensors Chip support 717 - # 718 709 # CONFIG_I2C_SENSOR is not set 719 - # CONFIG_SENSORS_ADM1021 is not set 720 - # CONFIG_SENSORS_ADM1025 is not set 721 - # CONFIG_SENSORS_ADM1026 is not set 722 - # CONFIG_SENSORS_ADM1031 is not set 723 - # CONFIG_SENSORS_ADM9240 is not set 724 - # CONFIG_SENSORS_ASB100 is not set 725 - # CONFIG_SENSORS_ATXP1 is not set 726 - # CONFIG_SENSORS_DS1621 is not set 727 - # CONFIG_SENSORS_FSCHER is not set 728 - # CONFIG_SENSORS_FSCPOS is not set 729 - # CONFIG_SENSORS_GL518SM is not set 730 - # CONFIG_SENSORS_GL520SM is not set 731 - # CONFIG_SENSORS_IT87 is not set 732 - # CONFIG_SENSORS_LM63 is not set 733 - # CONFIG_SENSORS_LM75 is not set 734 - # CONFIG_SENSORS_LM77 is not set 735 - # CONFIG_SENSORS_LM78 is not set 736 - # CONFIG_SENSORS_LM80 is not set 737 - # CONFIG_SENSORS_LM83 is not set 738 - # CONFIG_SENSORS_LM85 is not set 739 - # CONFIG_SENSORS_LM87 is not set 740 - # CONFIG_SENSORS_LM90 is not set 741 - # CONFIG_SENSORS_LM92 is not set 742 - # CONFIG_SENSORS_MAX1619 is not set 743 - # CONFIG_SENSORS_PC87360 is not set 744 - # CONFIG_SENSORS_SMSC47B397 is not set 745 - # CONFIG_SENSORS_SIS5595 is not set 746 - # CONFIG_SENSORS_SMSC47M1 is not set 747 - # CONFIG_SENSORS_VIA686A is not set 748 - # CONFIG_SENSORS_W83781D is not set 749 - # CONFIG_SENSORS_W83L785TS is not set 750 - # CONFIG_SENSORS_W83627HF is not set 751 - # CONFIG_SENSORS_W83627EHF is not set 752 710 753 711 # 754 - # Other I2C Chip support 712 + # Miscellaneous I2C Chip support 755 713 # 756 714 # CONFIG_SENSORS_DS1337 is not set 757 715 # CONFIG_SENSORS_DS1374 is not set ··· 735 767 # CONFIG_W1 is not set 736 768 737 769 # 770 + # Hardware Monitoring support 771 + # 772 + # CONFIG_HWMON is not set 773 + 774 + # 738 775 # Misc devices 739 776 # 740 777 ··· 755 782 # 756 783 # Video Adapters 757 784 # 758 - # CONFIG_TUNER_MULTI_I2C is not set 759 785 # CONFIG_VIDEO_BT848 is not set 760 786 # CONFIG_VIDEO_CPIA is not set 761 787 # CONFIG_VIDEO_SAA5246A is not set ··· 997 1025 # CONFIG_USB_EGALAX is not set 998 1026 # CONFIG_USB_XPAD is not set 999 1027 # CONFIG_USB_ATI_REMOTE is not set 1028 + # CONFIG_USB_KEYSPAN_REMOTE is not set 1000 1029 1001 1030 # 1002 1031 # USB Imaging devices ··· 1053 1080 # CONFIG_USB_PHIDGETSERVO is not set 1054 1081 # CONFIG_USB_IDMOUSE is not set 1055 1082 # CONFIG_USB_SISUSBVGA is not set 1083 + # CONFIG_USB_LD is not set 1056 1084 1057 1085 # 1058 1086 # USB DSL modem support ··· 1095 1121 CONFIG_FS_MBCACHE=y 1096 1122 # CONFIG_REISERFS_FS is not set 1097 1123 # CONFIG_JFS_FS is not set 1124 + # CONFIG_FS_POSIX_ACL is not set 1098 1125 1099 1126 # 1100 1127 # XFS support ··· 1103 1128 # CONFIG_XFS_FS is not set 1104 1129 # CONFIG_MINIX_FS is not set 1105 1130 # CONFIG_ROMFS_FS is not set 1131 + # CONFIG_INOTIFY is not set 1106 1132 # CONFIG_QUOTA is not set 1107 1133 CONFIG_DNOTIFY=y 1108 1134 CONFIG_AUTOFS_FS=y
+1 -1
arch/ia64/hp/sim/boot/boot_head.S
··· 22 22 .save rp, r0 23 23 .body 24 24 movl gp = __gp 25 - movl sp = stack_mem 25 + movl sp = stack_mem+16384-16 26 26 bsw.1 27 27 br.call.sptk.many rp=start_bootloader 28 28 END(_start)
+1 -1
arch/ia64/kernel/domain.c
··· 341 341 #endif 342 342 343 343 /* Attach the domains */ 344 - for_each_online_cpu(i) { 344 + for_each_cpu_mask(i, *cpu_map) { 345 345 struct sched_domain *sd; 346 346 #ifdef CONFIG_SCHED_SMT 347 347 sd = &per_cpu(cpu_domains, i);
+1
arch/ia64/kernel/perfmon.c
··· 4312 4312 DPRINT(("before cmpxchg() old_ctx=%p new_ctx=%p\n", 4313 4313 thread->pfm_context, ctx)); 4314 4314 4315 + ret = -EBUSY; 4315 4316 old = ia64_cmpxchg(acq, &thread->pfm_context, NULL, ctx, sizeof(pfm_context_t *)); 4316 4317 if (old != NULL) { 4317 4318 DPRINT(("load_pid [%d] already has a context\n", req->load_pid));
+2 -1
arch/ia64/kernel/salinfo.c
··· 143 143 144 144 static struct salinfo_data salinfo_data[ARRAY_SIZE(salinfo_log_name)]; 145 145 146 - static spinlock_t data_lock, data_saved_lock; 146 + static DEFINE_SPINLOCK(data_lock); 147 + static DEFINE_SPINLOCK(data_saved_lock); 147 148 148 149 /** salinfo_platform_oemdata - optional callback to decode oemdata from an error 149 150 * record.
+11 -8
arch/ia64/sn/kernel/io_init.c
··· 203 203 continue; 204 204 } 205 205 206 + spin_lock_init(&sn_flush_device_list->sfdl_flush_lock); 206 207 hubdev->hdi_flush_nasid_list.widget_p[widget] = 207 208 sn_flush_device_list; 208 209 } ··· 323 322 struct pci_controller *controller; 324 323 struct pcibus_bussoft *prom_bussoft_ptr; 325 324 struct hubdev_info *hubdev_info; 326 - void *provider_soft; 325 + void *provider_soft = NULL; 327 326 struct sn_pcibus_provider *provider; 328 327 329 328 status = sal_get_pcibus_info((u64) segment, (u64) busnum, ··· 339 338 if (bus == NULL) { 340 339 bus = pci_scan_bus(busnum, &pci_root_ops, controller); 341 340 if (bus == NULL) 342 - return; /* error, or bus already scanned */ 341 + goto error_return; /* error, or bus already scanned */ 343 342 bus->sysdata = NULL; 344 343 } 345 344 ··· 352 351 */ 353 352 354 353 if (prom_bussoft_ptr->bs_asic_type >= PCIIO_ASIC_MAX_TYPES) 355 - return; /* unsupported asic type */ 354 + goto error_return; /* unsupported asic type */ 356 355 357 356 if (prom_bussoft_ptr->bs_asic_type == PCIIO_ASIC_TYPE_PPB) 358 357 goto error_return; /* no further fixup necessary */ 359 358 360 359 provider = sn_pci_provider[prom_bussoft_ptr->bs_asic_type]; 361 360 if (provider == NULL) 362 - return; /* no provider registerd for this asic */ 361 + goto error_return; /* no provider registerd for this asic */ 363 362 364 - provider_soft = NULL; 363 + bus->sysdata = controller; 365 364 if (provider->bus_fixup) 366 365 provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller); 367 366 368 - if (provider_soft == NULL) 369 - return; /* fixup failed or not applicable */ 367 + if (provider_soft == NULL) { 368 + /* fixup failed or not applicable */ 369 + bus->sysdata = NULL; 370 + goto error_return; 371 + } 370 372 371 373 /* 372 374 * Generic bus fixup goes here. Don't reference prom_bussoft_ptr 373 375 * after this point. 374 376 */ 375 377 376 - bus->sysdata = controller; 377 378 PCI_CONTROLLER(bus)->platform_data = provider_soft; 378 379 nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base); 379 380 cnode = nasid_to_cnodeid(nasid);
+7 -3
arch/ppc/syslib/ppc4xx_dma.c
··· 620 620 return DMA_STATUS_GOOD; 621 621 } 622 622 623 + #ifdef CONFIG_PPC4xx_EDMA 623 624 /* 624 625 * Enables the burst on the channel (BTEN bit in the control/count register) 625 626 * Note: ··· 686 685 return DMA_STATUS_GOOD; 687 686 } 688 687 688 + EXPORT_SYMBOL(ppc4xx_enable_burst); 689 + EXPORT_SYMBOL(ppc4xx_disable_burst); 690 + EXPORT_SYMBOL(ppc4xx_set_burst_size); 691 + #endif /* CONFIG_PPC4xx_EDMA */ 692 + 689 693 EXPORT_SYMBOL(ppc4xx_init_dma_channel); 690 694 EXPORT_SYMBOL(ppc4xx_get_channel_config); 691 695 EXPORT_SYMBOL(ppc4xx_set_channel_priority); ··· 709 703 EXPORT_SYMBOL(ppc4xx_disable_dma_interrupt); 710 704 EXPORT_SYMBOL(ppc4xx_get_dma_status); 711 705 EXPORT_SYMBOL(ppc4xx_clr_dma_status); 712 - EXPORT_SYMBOL(ppc4xx_enable_burst); 713 - EXPORT_SYMBOL(ppc4xx_disable_burst); 714 - EXPORT_SYMBOL(ppc4xx_set_burst_size); 706 +
+1 -78
arch/ppc64/kernel/LparData.c
··· 32 32 /* The HvReleaseData is the root of the information shared between 33 33 * the hypervisor and Linux. 34 34 */ 35 - 36 - /* 37 - * WARNING - magic here 38 - * 39 - * Ok, this is a horrid hack below, but marginally better than the 40 - * alternatives. What we really want is just to initialize 41 - * hvReleaseData in C as in the #if 0 section here. However, gcc 42 - * refuses to believe that (u32)&x is a constant expression, so will 43 - * not allow the xMsNucDataOffset field to be properly initialized. 44 - * So, we declare hvReleaseData in inline asm instead. We use inline 45 - * asm, rather than a .S file, because the assembler won't generate 46 - * the necessary relocation for the LparMap either, unless that symbol 47 - * is declared in the same source file. Finally, we put the asm in a 48 - * dummy, attribute-used function, instead of at file scope, because 49 - * file scope asms don't allow contraints. We want to use the "i" 50 - * constraints to put sizeof() and offsetof() expressions in there, 51 - * because including asm/offsets.h in C code then stringifying causes 52 - * all manner of warnings. 53 - */ 54 - #if 0 55 35 struct HvReleaseData hvReleaseData = { 56 36 .xDesc = 0xc8a5d9c4, /* "HvRD" ebcdic */ 57 37 .xSize = sizeof(struct HvReleaseData), 58 38 .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas), 59 39 .xSlicNacaAddr = &naca, /* 64-bit Naca address */ 60 - .xMsNucDataOffset = (u32)((unsigned long)&xLparMap - KERNELBASE), 40 + .xMsNucDataOffset = LPARMAP_PHYS, 61 41 .xFlags = HVREL_TAGSINACTIVE /* tags inactive */ 62 42 /* 64 bit */ 63 43 /* shared processors */ ··· 49 69 .xVrmName = { 0xd3, 0x89, 0x95, 0xa4, /* "Linux 2.4.64" ebcdic */ 50 70 0xa7, 0x40, 0xf2, 0x4b, 51 71 0xf4, 0x4b, 0xf6, 0xf4 }, 52 - }; 53 - #endif 54 - 55 - 56 - extern struct HvReleaseData hvReleaseData; 57 - 58 - static void __attribute_used__ hvReleaseData_wrapper(void) 59 - { 60 - /* This doesn't appear to need any alignment (even 4 byte) */ 61 - asm volatile ( 62 - " lparMapPhys = xLparMap - %3\n" 63 - " .data\n" 64 - " .globl hvReleaseData\n" 65 - "hvReleaseData:\n" 66 - " .long 0xc8a5d9c4\n" /* xDesc */ 67 - /* "HvRD" in ebcdic */ 68 - " .short %0\n" /* xSize */ 69 - " .short %1\n" /* xVpdAreasPtrOffset */ 70 - " .llong naca\n" /* xSlicNacaAddr */ 71 - " .long lparMapPhys\n" /* xMsNucDataOffset */ 72 - " .long 0\n" /* xRsvd1 */ 73 - " .short %2\n" /* xFlags */ 74 - " .short 4\n" /* xVrmIndex - v5r2m0 */ 75 - " .short 3\n" /* xMinSupportedPlicVrmIndex - v5r1m0 */ 76 - " .short 3\n" /* xMinCompatablePlicVrmIndex - v5r1m0 */ 77 - " .long 0xd38995a4\n" /* xVrmName */ 78 - " .long 0xa740f24b\n" /* "Linux 2.4.64" ebcdic */ 79 - " .long 0xf44bf6f4\n" 80 - " . = hvReleaseData + %0\n" 81 - " .previous\n" 82 - : : "i"(sizeof(hvReleaseData)), 83 - "i"(offsetof(struct naca_struct, xItVpdAreas)), 84 - "i"(HVREL_TAGSINACTIVE /* tags inactive, 64 bit, */ 85 - /* shared processors, HMT allowed */ 86 - | 6), /* TEMP: This allows non-GA drivers */ 87 - "i"(KERNELBASE) 88 - ); 89 - } 90 - 91 - struct LparMap __attribute__((aligned (16))) xLparMap = { 92 - .xNumberEsids = HvEsidsToMap, 93 - .xNumberRanges = HvRangesToMap, 94 - .xSegmentTableOffs = STAB0_PAGE, 95 - 96 - .xEsids = { 97 - { .xKernelEsid = GET_ESID(KERNELBASE), 98 - .xKernelVsid = KERNEL_VSID(KERNELBASE), }, 99 - { .xKernelEsid = GET_ESID(VMALLOCBASE), 100 - .xKernelVsid = KERNEL_VSID(VMALLOCBASE), }, 101 - }, 102 - 103 - .xRanges = { 104 - { .xPages = HvPagesToMap, 105 - .xOffset = 0, 106 - .xVPN = KERNEL_VSID(KERNELBASE) << (SID_SHIFT - PAGE_SHIFT), 107 - }, 108 - }, 109 72 }; 110 73 111 74 extern void system_reset_iSeries(void);
+5
arch/ppc64/kernel/Makefile
··· 73 73 obj-$(CONFIG_KPROBES) += kprobes.o 74 74 75 75 CFLAGS_ioctl32.o += -Ifs/ 76 + 77 + ifeq ($(CONFIG_PPC_ISERIES),y) 78 + arch/ppc64/kernel/head.o: arch/ppc64/kernel/lparmap.s 79 + AFLAGS_head.o += -Iarch/ppc64/kernel 80 + endif
+6
arch/ppc64/kernel/head.S
··· 38 38 #include <asm/cputable.h> 39 39 #include <asm/setup.h> 40 40 #include <asm/hvcall.h> 41 + #include <asm/iSeries/LparMap.h> 41 42 42 43 #ifdef CONFIG_PPC_ISERIES 43 44 #define DO_SOFT_DISABLE ··· 679 678 .= 0x7000 680 679 .globl fwnmi_data_area 681 680 fwnmi_data_area: 681 + 682 + #ifdef CONFIG_PPC_ISERIES 683 + . = LPARMAP_PHYS 684 + #include "lparmap.s" 685 + #endif /* CONFIG_PPC_ISERIES */ 682 686 683 687 /* 684 688 * Vectors for the FWNMI option. Share common code.
+4 -3
arch/ppc64/kernel/iommu.c
··· 242 242 dma_addr_t dma_next = 0, dma_addr; 243 243 unsigned long flags; 244 244 struct scatterlist *s, *outs, *segstart; 245 - int outcount; 245 + int outcount, incount; 246 246 unsigned long handle; 247 247 248 248 BUG_ON(direction == DMA_NONE); ··· 252 252 253 253 outs = s = segstart = &sglist[0]; 254 254 outcount = 1; 255 + incount = nelems; 255 256 handle = 0; 256 257 257 258 /* Init first segment length for backout at failure */ ··· 339 338 340 339 DBG("mapped %d elements:\n", outcount); 341 340 342 - /* For the sake of iommu_free_sg, we clear out the length in the 341 + /* For the sake of iommu_unmap_sg, we clear out the length in the 343 342 * next entry of the sglist if we didn't fill the list completely 344 343 */ 345 - if (outcount < nelems) { 344 + if (outcount < incount) { 346 345 outs++; 347 346 outs->dma_address = DMA_ERROR_CODE; 348 347 outs->dma_length = 0;
+31
arch/ppc64/kernel/lparmap.c
··· 1 + /* 2 + * Copyright (C) 2005 Stephen Rothwell IBM Corp. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation; either version 7 + * 2 of the License, or (at your option) any later version. 8 + */ 9 + #include <asm/mmu.h> 10 + #include <asm/page.h> 11 + #include <asm/iSeries/LparMap.h> 12 + 13 + const struct LparMap __attribute__((__section__(".text"))) xLparMap = { 14 + .xNumberEsids = HvEsidsToMap, 15 + .xNumberRanges = HvRangesToMap, 16 + .xSegmentTableOffs = STAB0_PAGE, 17 + 18 + .xEsids = { 19 + { .xKernelEsid = GET_ESID(KERNELBASE), 20 + .xKernelVsid = KERNEL_VSID(KERNELBASE), }, 21 + { .xKernelEsid = GET_ESID(VMALLOCBASE), 22 + .xKernelVsid = KERNEL_VSID(VMALLOCBASE), }, 23 + }, 24 + 25 + .xRanges = { 26 + { .xPages = HvPagesToMap, 27 + .xOffset = 0, 28 + .xVPN = KERNEL_VSID(KERNELBASE) << (SID_SHIFT - PAGE_SHIFT), 29 + }, 30 + }, 31 + };
+5
arch/sh/kernel/entry.S
··· 1145 1145 .long sys_add_key /* 285 */ 1146 1146 .long sys_request_key 1147 1147 .long sys_keyctl 1148 + .long sys_ioprio_set 1149 + .long sys_ioprio_get 1150 + .long sys_inotify_init /* 290 */ 1151 + .long sys_inotify_add_watch 1152 + .long sys_inotify_rm_watch 1148 1153 1149 1154 /* End of entry.S */
+5
arch/sh64/kernel/syscalls.S
··· 342 342 .long sys_add_key 343 343 .long sys_request_key 344 344 .long sys_keyctl /* 315 */ 345 + .long sys_ioprio_set 346 + .long sys_ioprio_get 347 + .long sys_inotify_init 348 + .long sys_inotify_add_watch 349 + .long sys_inotify_rm_watch /* 320 */ 345 350
+3 -2
arch/sparc/kernel/sparc_ksyms.c
··· 98 98 * The module references will be fixed up by module_frob_arch_sections. 99 99 */ 100 100 #define DOT_ALIAS2(__ret, __x, __arg1, __arg2) \ 101 - extern __ret __x(__arg1, __arg2) \ 102 - __attribute__((weak, alias("." # __x))); 101 + extern __ret __x(__arg1, __arg2); \ 102 + asm(".weak " #__x);\ 103 + asm(#__x "=." #__x); 103 104 104 105 DOT_ALIAS2(int, div, int, int) 105 106 DOT_ALIAS2(int, mul, int, int)
+1 -1
arch/sparc64/kernel/Makefile
··· 8 8 extra-y := head.o init_task.o vmlinux.lds 9 9 10 10 obj-y := process.o setup.o cpu.o idprom.o \ 11 - traps.o devices.o auxio.o \ 11 + traps.o devices.o auxio.o una_asm.o \ 12 12 irq.o ptrace.o time.o sys_sparc.o signal.o \ 13 13 unaligned.o central.o pci.o starfire.o semaphore.o \ 14 14 power.o sbus.o iommu_common.o sparc64_ksyms.o chmc.o
+3
arch/sparc64/kernel/traps.c
··· 2127 2127 TI_PRE_COUNT != offsetof(struct thread_info, preempt_count) || 2128 2128 TI_NEW_CHILD != offsetof(struct thread_info, new_child) || 2129 2129 TI_SYS_NOERROR != offsetof(struct thread_info, syscall_noerror) || 2130 + TI_RESTART_BLOCK != offsetof(struct thread_info, restart_block) || 2131 + TI_KUNA_REGS != offsetof(struct thread_info, kern_una_regs) || 2132 + TI_KUNA_INSN != offsetof(struct thread_info, kern_una_insn) || 2130 2133 TI_FPREGS != offsetof(struct thread_info, fpregs) || 2131 2134 (TI_FPREGS & (64 - 1))) 2132 2135 thread_info_offsets_are_bolixed_dave();
+153
arch/sparc64/kernel/una_asm.S
··· 1 + /* una_asm.S: Kernel unaligned trap assembler helpers. 2 + * 3 + * Copyright (C) 1996,2005 David S. Miller (davem@davemloft.net) 4 + * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 5 + */ 6 + 7 + .text 8 + 9 + kernel_unaligned_trap_fault: 10 + call kernel_mna_trap_fault 11 + nop 12 + retl 13 + nop 14 + .size kern_unaligned_trap_fault, .-kern_unaligned_trap_fault 15 + 16 + .globl __do_int_store 17 + __do_int_store: 18 + rd %asi, %o4 19 + wr %o3, 0, %asi 20 + ldx [%o2], %g3 21 + cmp %o1, 2 22 + be,pn %icc, 2f 23 + cmp %o1, 4 24 + be,pt %icc, 1f 25 + srlx %g3, 24, %g2 26 + srlx %g3, 56, %g1 27 + srlx %g3, 48, %g7 28 + 4: stba %g1, [%o0] %asi 29 + srlx %g3, 40, %g1 30 + 5: stba %g7, [%o0 + 1] %asi 31 + srlx %g3, 32, %g7 32 + 6: stba %g1, [%o0 + 2] %asi 33 + 7: stba %g7, [%o0 + 3] %asi 34 + srlx %g3, 16, %g1 35 + 8: stba %g2, [%o0 + 4] %asi 36 + srlx %g3, 8, %g7 37 + 9: stba %g1, [%o0 + 5] %asi 38 + 10: stba %g7, [%o0 + 6] %asi 39 + ba,pt %xcc, 0f 40 + 11: stba %g3, [%o0 + 7] %asi 41 + 1: srl %g3, 16, %g7 42 + 12: stba %g2, [%o0] %asi 43 + srl %g3, 8, %g2 44 + 13: stba %g7, [%o0 + 1] %asi 45 + 14: stba %g2, [%o0 + 2] %asi 46 + ba,pt %xcc, 0f 47 + 15: stba %g3, [%o0 + 3] %asi 48 + 2: srl %g3, 8, %g2 49 + 16: stba %g2, [%o0] %asi 50 + 17: stba %g3, [%o0 + 1] %asi 51 + 0: 52 + wr %o4, 0x0, %asi 53 + retl 54 + nop 55 + .size __do_int_store, .-__do_int_store 56 + 57 + .section __ex_table 58 + .word 4b, kernel_unaligned_trap_fault 59 + .word 5b, kernel_unaligned_trap_fault 60 + .word 6b, kernel_unaligned_trap_fault 61 + .word 7b, kernel_unaligned_trap_fault 62 + .word 8b, kernel_unaligned_trap_fault 63 + .word 9b, kernel_unaligned_trap_fault 64 + .word 10b, kernel_unaligned_trap_fault 65 + .word 11b, kernel_unaligned_trap_fault 66 + .word 12b, kernel_unaligned_trap_fault 67 + .word 13b, kernel_unaligned_trap_fault 68 + .word 14b, kernel_unaligned_trap_fault 69 + .word 15b, kernel_unaligned_trap_fault 70 + .word 16b, kernel_unaligned_trap_fault 71 + .word 17b, kernel_unaligned_trap_fault 72 + .previous 73 + 74 + .globl do_int_load 75 + do_int_load: 76 + rd %asi, %o5 77 + wr %o4, 0, %asi 78 + cmp %o1, 8 79 + bge,pn %icc, 9f 80 + cmp %o1, 4 81 + be,pt %icc, 6f 82 + 4: lduba [%o2] %asi, %g2 83 + 5: lduba [%o2 + 1] %asi, %g3 84 + sll %g2, 8, %g2 85 + brz,pt %o3, 3f 86 + add %g2, %g3, %g2 87 + sllx %g2, 48, %g2 88 + srax %g2, 48, %g2 89 + 3: ba,pt %xcc, 0f 90 + stx %g2, [%o0] 91 + 6: lduba [%o2 + 1] %asi, %g3 92 + sll %g2, 24, %g2 93 + 7: lduba [%o2 + 2] %asi, %g7 94 + sll %g3, 16, %g3 95 + 8: lduba [%o2 + 3] %asi, %g1 96 + sll %g7, 8, %g7 97 + or %g2, %g3, %g2 98 + or %g7, %g1, %g7 99 + or %g2, %g7, %g2 100 + brnz,a,pt %o3, 3f 101 + sra %g2, 0, %g2 102 + 3: ba,pt %xcc, 0f 103 + stx %g2, [%o0] 104 + 9: lduba [%o2] %asi, %g2 105 + 10: lduba [%o2 + 1] %asi, %g3 106 + sllx %g2, 56, %g2 107 + 11: lduba [%o2 + 2] %asi, %g7 108 + sllx %g3, 48, %g3 109 + 12: lduba [%o2 + 3] %asi, %g1 110 + sllx %g7, 40, %g7 111 + sllx %g1, 32, %g1 112 + or %g2, %g3, %g2 113 + or %g7, %g1, %g7 114 + 13: lduba [%o2 + 4] %asi, %g3 115 + or %g2, %g7, %g7 116 + 14: lduba [%o2 + 5] %asi, %g1 117 + sllx %g3, 24, %g3 118 + 15: lduba [%o2 + 6] %asi, %g2 119 + sllx %g1, 16, %g1 120 + or %g7, %g3, %g7 121 + 16: lduba [%o2 + 7] %asi, %g3 122 + sllx %g2, 8, %g2 123 + or %g7, %g1, %g7 124 + or %g2, %g3, %g2 125 + or %g7, %g2, %g7 126 + cmp %o1, 8 127 + be,a,pt %icc, 0f 128 + stx %g7, [%o0] 129 + srlx %g7, 32, %g2 130 + sra %g7, 0, %g7 131 + stx %g2, [%o0] 132 + stx %g7, [%o0 + 8] 133 + 0: 134 + wr %o5, 0x0, %asi 135 + retl 136 + nop 137 + .size __do_int_load, .-__do_int_load 138 + 139 + .section __ex_table 140 + .word 4b, kernel_unaligned_trap_fault 141 + .word 5b, kernel_unaligned_trap_fault 142 + .word 6b, kernel_unaligned_trap_fault 143 + .word 7b, kernel_unaligned_trap_fault 144 + .word 8b, kernel_unaligned_trap_fault 145 + .word 9b, kernel_unaligned_trap_fault 146 + .word 10b, kernel_unaligned_trap_fault 147 + .word 11b, kernel_unaligned_trap_fault 148 + .word 12b, kernel_unaligned_trap_fault 149 + .word 13b, kernel_unaligned_trap_fault 150 + .word 14b, kernel_unaligned_trap_fault 151 + .word 15b, kernel_unaligned_trap_fault 152 + .word 16b, kernel_unaligned_trap_fault 153 + .previous
+56 -199
arch/sparc64/kernel/unaligned.c
··· 180 180 die_if_kernel(str, regs); 181 181 } 182 182 183 - #define do_integer_load(dest_reg, size, saddr, is_signed, asi, errh) ({ \ 184 - __asm__ __volatile__ ( \ 185 - "wr %4, 0, %%asi\n\t" \ 186 - "cmp %1, 8\n\t" \ 187 - "bge,pn %%icc, 9f\n\t" \ 188 - " cmp %1, 4\n\t" \ 189 - "be,pt %%icc, 6f\n" \ 190 - "4:\t" " lduba [%2] %%asi, %%l1\n" \ 191 - "5:\t" "lduba [%2 + 1] %%asi, %%l2\n\t" \ 192 - "sll %%l1, 8, %%l1\n\t" \ 193 - "brz,pt %3, 3f\n\t" \ 194 - " add %%l1, %%l2, %%l1\n\t" \ 195 - "sllx %%l1, 48, %%l1\n\t" \ 196 - "srax %%l1, 48, %%l1\n" \ 197 - "3:\t" "ba,pt %%xcc, 0f\n\t" \ 198 - " stx %%l1, [%0]\n" \ 199 - "6:\t" "lduba [%2 + 1] %%asi, %%l2\n\t" \ 200 - "sll %%l1, 24, %%l1\n" \ 201 - "7:\t" "lduba [%2 + 2] %%asi, %%g7\n\t" \ 202 - "sll %%l2, 16, %%l2\n" \ 203 - "8:\t" "lduba [%2 + 3] %%asi, %%g1\n\t" \ 204 - "sll %%g7, 8, %%g7\n\t" \ 205 - "or %%l1, %%l2, %%l1\n\t" \ 206 - "or %%g7, %%g1, %%g7\n\t" \ 207 - "or %%l1, %%g7, %%l1\n\t" \ 208 - "brnz,a,pt %3, 3f\n\t" \ 209 - " sra %%l1, 0, %%l1\n" \ 210 - "3:\t" "ba,pt %%xcc, 0f\n\t" \ 211 - " stx %%l1, [%0]\n" \ 212 - "9:\t" "lduba [%2] %%asi, %%l1\n" \ 213 - "10:\t" "lduba [%2 + 1] %%asi, %%l2\n\t" \ 214 - "sllx %%l1, 56, %%l1\n" \ 215 - "11:\t" "lduba [%2 + 2] %%asi, %%g7\n\t" \ 216 - "sllx %%l2, 48, %%l2\n" \ 217 - "12:\t" "lduba [%2 + 3] %%asi, %%g1\n\t" \ 218 - "sllx %%g7, 40, %%g7\n\t" \ 219 - "sllx %%g1, 32, %%g1\n\t" \ 220 - "or %%l1, %%l2, %%l1\n\t" \ 221 - "or %%g7, %%g1, %%g7\n" \ 222 - "13:\t" "lduba [%2 + 4] %%asi, %%l2\n\t" \ 223 - "or %%l1, %%g7, %%g7\n" \ 224 - "14:\t" "lduba [%2 + 5] %%asi, %%g1\n\t" \ 225 - "sllx %%l2, 24, %%l2\n" \ 226 - "15:\t" "lduba [%2 + 6] %%asi, %%l1\n\t" \ 227 - "sllx %%g1, 16, %%g1\n\t" \ 228 - "or %%g7, %%l2, %%g7\n" \ 229 - "16:\t" "lduba [%2 + 7] %%asi, %%l2\n\t" \ 230 - "sllx %%l1, 8, %%l1\n\t" \ 231 - "or %%g7, %%g1, %%g7\n\t" \ 232 - "or %%l1, %%l2, %%l1\n\t" \ 233 - "or %%g7, %%l1, %%g7\n\t" \ 234 - "cmp %1, 8\n\t" \ 235 - "be,a,pt %%icc, 0f\n\t" \ 236 - " stx %%g7, [%0]\n\t" \ 237 - "srlx %%g7, 32, %%l1\n\t" \ 238 - "sra %%g7, 0, %%g7\n\t" \ 239 - "stx %%l1, [%0]\n\t" \ 240 - "stx %%g7, [%0 + 8]\n" \ 241 - "0:\n\t" \ 242 - "wr %%g0, %5, %%asi\n\n\t" \ 243 - ".section __ex_table\n\t" \ 244 - ".word 4b, " #errh "\n\t" \ 245 - ".word 5b, " #errh "\n\t" \ 246 - ".word 6b, " #errh "\n\t" \ 247 - ".word 7b, " #errh "\n\t" \ 248 - ".word 8b, " #errh "\n\t" \ 249 - ".word 9b, " #errh "\n\t" \ 250 - ".word 10b, " #errh "\n\t" \ 251 - ".word 11b, " #errh "\n\t" \ 252 - ".word 12b, " #errh "\n\t" \ 253 - ".word 13b, " #errh "\n\t" \ 254 - ".word 14b, " #errh "\n\t" \ 255 - ".word 15b, " #errh "\n\t" \ 256 - ".word 16b, " #errh "\n\n\t" \ 257 - ".previous\n\t" \ 258 - : : "r" (dest_reg), "r" (size), "r" (saddr), "r" (is_signed), \ 259 - "r" (asi), "i" (ASI_AIUS) \ 260 - : "l1", "l2", "g7", "g1", "cc"); \ 261 - }) 183 + extern void do_int_load(unsigned long *dest_reg, int size, 184 + unsigned long *saddr, int is_signed, int asi); 262 185 263 - #define store_common(dst_addr, size, src_val, asi, errh) ({ \ 264 - __asm__ __volatile__ ( \ 265 - "wr %3, 0, %%asi\n\t" \ 266 - "ldx [%2], %%l1\n" \ 267 - "cmp %1, 2\n\t" \ 268 - "be,pn %%icc, 2f\n\t" \ 269 - " cmp %1, 4\n\t" \ 270 - "be,pt %%icc, 1f\n\t" \ 271 - " srlx %%l1, 24, %%l2\n\t" \ 272 - "srlx %%l1, 56, %%g1\n\t" \ 273 - "srlx %%l1, 48, %%g7\n" \ 274 - "4:\t" "stba %%g1, [%0] %%asi\n\t" \ 275 - "srlx %%l1, 40, %%g1\n" \ 276 - "5:\t" "stba %%g7, [%0 + 1] %%asi\n\t" \ 277 - "srlx %%l1, 32, %%g7\n" \ 278 - "6:\t" "stba %%g1, [%0 + 2] %%asi\n" \ 279 - "7:\t" "stba %%g7, [%0 + 3] %%asi\n\t" \ 280 - "srlx %%l1, 16, %%g1\n" \ 281 - "8:\t" "stba %%l2, [%0 + 4] %%asi\n\t" \ 282 - "srlx %%l1, 8, %%g7\n" \ 283 - "9:\t" "stba %%g1, [%0 + 5] %%asi\n" \ 284 - "10:\t" "stba %%g7, [%0 + 6] %%asi\n\t" \ 285 - "ba,pt %%xcc, 0f\n" \ 286 - "11:\t" " stba %%l1, [%0 + 7] %%asi\n" \ 287 - "1:\t" "srl %%l1, 16, %%g7\n" \ 288 - "12:\t" "stba %%l2, [%0] %%asi\n\t" \ 289 - "srl %%l1, 8, %%l2\n" \ 290 - "13:\t" "stba %%g7, [%0 + 1] %%asi\n" \ 291 - "14:\t" "stba %%l2, [%0 + 2] %%asi\n\t" \ 292 - "ba,pt %%xcc, 0f\n" \ 293 - "15:\t" " stba %%l1, [%0 + 3] %%asi\n" \ 294 - "2:\t" "srl %%l1, 8, %%l2\n" \ 295 - "16:\t" "stba %%l2, [%0] %%asi\n" \ 296 - "17:\t" "stba %%l1, [%0 + 1] %%asi\n" \ 297 - "0:\n\t" \ 298 - "wr %%g0, %4, %%asi\n\n\t" \ 299 - ".section __ex_table\n\t" \ 300 - ".word 4b, " #errh "\n\t" \ 301 - ".word 5b, " #errh "\n\t" \ 302 - ".word 6b, " #errh "\n\t" \ 303 - ".word 7b, " #errh "\n\t" \ 304 - ".word 8b, " #errh "\n\t" \ 305 - ".word 9b, " #errh "\n\t" \ 306 - ".word 10b, " #errh "\n\t" \ 307 - ".word 11b, " #errh "\n\t" \ 308 - ".word 12b, " #errh "\n\t" \ 309 - ".word 13b, " #errh "\n\t" \ 310 - ".word 14b, " #errh "\n\t" \ 311 - ".word 15b, " #errh "\n\t" \ 312 - ".word 16b, " #errh "\n\t" \ 313 - ".word 17b, " #errh "\n\n\t" \ 314 - ".previous\n\t" \ 315 - : : "r" (dst_addr), "r" (size), "r" (src_val), "r" (asi), "i" (ASI_AIUS)\ 316 - : "l1", "l2", "g7", "g1", "cc"); \ 317 - }) 186 + extern void __do_int_store(unsigned long *dst_addr, int size, 187 + unsigned long *src_val, int asi); 318 188 319 - #define do_integer_store(reg_num, size, dst_addr, regs, asi, errh) ({ \ 320 - unsigned long zero = 0; \ 321 - unsigned long *src_val = &zero; \ 322 - \ 323 - if (size == 16) { \ 324 - size = 8; \ 325 - zero = (((long)(reg_num ? \ 326 - (unsigned)fetch_reg(reg_num, regs) : 0)) << 32) | \ 327 - (unsigned)fetch_reg(reg_num + 1, regs); \ 328 - } else if (reg_num) src_val = fetch_reg_addr(reg_num, regs); \ 329 - store_common(dst_addr, size, src_val, asi, errh); \ 330 - }) 189 + static inline void do_int_store(int reg_num, int size, unsigned long *dst_addr, 190 + struct pt_regs *regs, int asi) 191 + { 192 + unsigned long zero = 0; 193 + unsigned long *src_val = &zero; 331 194 332 - extern void smp_capture(void); 333 - extern void smp_release(void); 334 - 335 - #define do_atomic(srcdest_reg, mem, errh) ({ \ 336 - unsigned long flags, tmp; \ 337 - \ 338 - smp_capture(); \ 339 - local_irq_save(flags); \ 340 - tmp = *srcdest_reg; \ 341 - do_integer_load(srcdest_reg, 4, mem, 0, errh); \ 342 - store_common(mem, 4, &tmp, errh); \ 343 - local_irq_restore(flags); \ 344 - smp_release(); \ 345 - }) 195 + if (size == 16) { 196 + size = 8; 197 + zero = (((long)(reg_num ? 198 + (unsigned)fetch_reg(reg_num, regs) : 0)) << 32) | 199 + (unsigned)fetch_reg(reg_num + 1, regs); 200 + } else if (reg_num) { 201 + src_val = fetch_reg_addr(reg_num, regs); 202 + } 203 + __do_int_store(dst_addr, size, src_val, asi); 204 + } 346 205 347 206 static inline void advance(struct pt_regs *regs) 348 207 { ··· 223 364 return !floating_point_load_or_store_p(insn); 224 365 } 225 366 226 - void kernel_mna_trap_fault(struct pt_regs *regs, unsigned int insn) __asm__ ("kernel_mna_trap_fault"); 227 - 228 - void kernel_mna_trap_fault(struct pt_regs *regs, unsigned int insn) 367 + void kernel_mna_trap_fault(void) 229 368 { 230 - unsigned long g2 = regs->u_regs [UREG_G2]; 369 + struct pt_regs *regs = current_thread_info()->kern_una_regs; 370 + unsigned int insn = current_thread_info()->kern_una_insn; 371 + unsigned long g2 = regs->u_regs[UREG_G2]; 231 372 unsigned long fixup = search_extables_range(regs->tpc, &g2); 232 373 233 374 if (!fixup) { 234 - unsigned long address = compute_effective_address(regs, insn, ((insn >> 25) & 0x1f)); 375 + unsigned long address; 376 + 377 + address = compute_effective_address(regs, insn, 378 + ((insn >> 25) & 0x1f)); 235 379 if (address < PAGE_SIZE) { 236 - printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference in mna handler"); 380 + printk(KERN_ALERT "Unable to handle kernel NULL " 381 + "pointer dereference in mna handler"); 237 382 } else 238 - printk(KERN_ALERT "Unable to handle kernel paging request in mna handler"); 383 + printk(KERN_ALERT "Unable to handle kernel paging " 384 + "request in mna handler"); 239 385 printk(KERN_ALERT " at virtual address %016lx\n",address); 240 - printk(KERN_ALERT "current->{mm,active_mm}->context = %016lx\n", 386 + printk(KERN_ALERT "current->{active_,}mm->context = %016lx\n", 241 387 (current->mm ? CTX_HWBITS(current->mm->context) : 242 388 CTX_HWBITS(current->active_mm->context))); 243 - printk(KERN_ALERT "current->{mm,active_mm}->pgd = %016lx\n", 389 + printk(KERN_ALERT "current->{active_,}mm->pgd = %016lx\n", 244 390 (current->mm ? (unsigned long) current->mm->pgd : 245 391 (unsigned long) current->active_mm->pgd)); 246 392 die_if_kernel("Oops", regs); ··· 264 400 enum direction dir = decode_direction(insn); 265 401 int size = decode_access_size(insn); 266 402 403 + current_thread_info()->kern_una_regs = regs; 404 + current_thread_info()->kern_una_insn = insn; 405 + 267 406 if (!ok_for_kernel(insn) || dir == both) { 268 - printk("Unsupported unaligned load/store trap for kernel at <%016lx>.\n", 269 - regs->tpc); 270 - unaligned_panic("Kernel does fpu/atomic unaligned load/store.", regs); 407 + printk("Unsupported unaligned load/store trap for kernel " 408 + "at <%016lx>.\n", regs->tpc); 409 + unaligned_panic("Kernel does fpu/atomic " 410 + "unaligned load/store.", regs); 271 411 272 - __asm__ __volatile__ ("\n" 273 - "kernel_unaligned_trap_fault:\n\t" 274 - "mov %0, %%o0\n\t" 275 - "call kernel_mna_trap_fault\n\t" 276 - " mov %1, %%o1\n\t" 277 - : 278 - : "r" (regs), "r" (insn) 279 - : "o0", "o1", "o2", "o3", "o4", "o5", "o7", 280 - "g1", "g2", "g3", "g4", "g7", "cc"); 412 + kernel_mna_trap_fault(); 281 413 } else { 282 - unsigned long addr = compute_effective_address(regs, insn, ((insn >> 25) & 0x1f)); 414 + unsigned long addr; 283 415 416 + addr = compute_effective_address(regs, insn, 417 + ((insn >> 25) & 0x1f)); 284 418 #ifdef DEBUG_MNA 285 - printk("KMNA: pc=%016lx [dir=%s addr=%016lx size=%d] retpc[%016lx]\n", 286 - regs->tpc, dirstrings[dir], addr, size, regs->u_regs[UREG_RETPC]); 419 + printk("KMNA: pc=%016lx [dir=%s addr=%016lx size=%d] " 420 + "retpc[%016lx]\n", 421 + regs->tpc, dirstrings[dir], addr, size, 422 + regs->u_regs[UREG_RETPC]); 287 423 #endif 288 424 switch (dir) { 289 425 case load: 290 - do_integer_load(fetch_reg_addr(((insn>>25)&0x1f), regs), 291 - size, (unsigned long *) addr, 292 - decode_signedness(insn), decode_asi(insn, regs), 293 - kernel_unaligned_trap_fault); 426 + do_int_load(fetch_reg_addr(((insn>>25)&0x1f), regs), 427 + size, (unsigned long *) addr, 428 + decode_signedness(insn), 429 + decode_asi(insn, regs)); 294 430 break; 295 431 296 432 case store: 297 - do_integer_store(((insn>>25)&0x1f), size, 298 - (unsigned long *) addr, regs, 299 - decode_asi(insn, regs), 300 - kernel_unaligned_trap_fault); 433 + do_int_store(((insn>>25)&0x1f), size, 434 + (unsigned long *) addr, regs, 435 + decode_asi(insn, regs)); 301 436 break; 302 - #if 0 /* unsupported */ 303 - case both: 304 - do_atomic(fetch_reg_addr(((insn>>25)&0x1f), regs), 305 - (unsigned long *) addr, 306 - kernel_unaligned_trap_fault); 307 - break; 308 - #endif 437 + 309 438 default: 310 439 panic("Impossible kernel unaligned trap."); 311 440 /* Not reached... */
+27 -9
arch/sparc64/kernel/us2e_cpufreq.c
··· 88 88 { 89 89 unsigned long old_refr_count, refr_count, mctrl; 90 90 91 - 92 91 refr_count = (clock_tick * MCTRL0_REFR_INTERVAL); 93 92 refr_count /= (MCTRL0_REFR_CLKS_P_CNT * divisor * 1000000000UL); 94 93 ··· 229 230 return ret; 230 231 } 231 232 233 + static unsigned int us2e_freq_get(unsigned int cpu) 234 + { 235 + cpumask_t cpus_allowed; 236 + unsigned long clock_tick, estar; 237 + 238 + if (!cpu_online(cpu)) 239 + return 0; 240 + 241 + cpus_allowed = current->cpus_allowed; 242 + set_cpus_allowed(current, cpumask_of_cpu(cpu)); 243 + 244 + clock_tick = sparc64_get_clock_tick(cpu) / 1000; 245 + estar = read_hbreg(HBIRD_ESTAR_MODE_ADDR); 246 + 247 + set_cpus_allowed(current, cpus_allowed); 248 + 249 + return clock_tick / estar_to_divisor(estar); 250 + } 251 + 232 252 static void us2e_set_cpu_divider_index(unsigned int cpu, unsigned int index) 233 253 { 234 254 unsigned long new_bits, new_freq; ··· 261 243 cpus_allowed = current->cpus_allowed; 262 244 set_cpus_allowed(current, cpumask_of_cpu(cpu)); 263 245 264 - new_freq = clock_tick = sparc64_get_clock_tick(cpu); 246 + new_freq = clock_tick = sparc64_get_clock_tick(cpu) / 1000; 265 247 new_bits = index_to_estar_mode(index); 266 248 divisor = index_to_divisor(index); 267 249 new_freq /= divisor; ··· 276 258 cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); 277 259 278 260 if (old_divisor != divisor) 279 - us2e_transition(estar, new_bits, clock_tick, old_divisor, divisor); 261 + us2e_transition(estar, new_bits, clock_tick * 1000, 262 + old_divisor, divisor); 280 263 281 264 cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); 282 265 ··· 291 272 unsigned int new_index = 0; 292 273 293 274 if (cpufreq_frequency_table_target(policy, 294 - &us2e_freq_table[policy->cpu].table[0], 295 - target_freq, 296 - relation, 297 - &new_index)) 275 + &us2e_freq_table[policy->cpu].table[0], 276 + target_freq, relation, &new_index)) 298 277 return -EINVAL; 299 278 300 279 us2e_set_cpu_divider_index(policy->cpu, new_index); ··· 309 292 static int __init us2e_freq_cpu_init(struct cpufreq_policy *policy) 310 293 { 311 294 unsigned int cpu = policy->cpu; 312 - unsigned long clock_tick = sparc64_get_clock_tick(cpu); 295 + unsigned long clock_tick = sparc64_get_clock_tick(cpu) / 1000; 313 296 struct cpufreq_frequency_table *table = 314 297 &us2e_freq_table[cpu].table[0]; 315 298 ··· 368 351 memset(us2e_freq_table, 0, 369 352 (NR_CPUS * sizeof(struct us2e_freq_percpu_info))); 370 353 354 + driver->init = us2e_freq_cpu_init; 371 355 driver->verify = us2e_freq_verify; 372 356 driver->target = us2e_freq_target; 373 - driver->init = us2e_freq_cpu_init; 357 + driver->get = us2e_freq_get; 374 358 driver->exit = us2e_freq_cpu_exit; 375 359 driver->owner = THIS_MODULE, 376 360 strcpy(driver->name, "UltraSPARC-IIe");
+25 -4
arch/sparc64/kernel/us3_cpufreq.c
··· 56 56 57 57 static unsigned long get_current_freq(unsigned int cpu, unsigned long safari_cfg) 58 58 { 59 - unsigned long clock_tick = sparc64_get_clock_tick(cpu); 59 + unsigned long clock_tick = sparc64_get_clock_tick(cpu) / 1000; 60 60 unsigned long ret; 61 61 62 62 switch (safari_cfg & SAFARI_CFG_DIV_MASK) { ··· 76 76 return ret; 77 77 } 78 78 79 + static unsigned int us3_freq_get(unsigned int cpu) 80 + { 81 + cpumask_t cpus_allowed; 82 + unsigned long reg; 83 + unsigned int ret; 84 + 85 + if (!cpu_online(cpu)) 86 + return 0; 87 + 88 + cpus_allowed = current->cpus_allowed; 89 + set_cpus_allowed(current, cpumask_of_cpu(cpu)); 90 + 91 + reg = read_safari_cfg(); 92 + ret = get_current_freq(cpu, reg); 93 + 94 + set_cpus_allowed(current, cpus_allowed); 95 + 96 + return ret; 97 + } 98 + 79 99 static void us3_set_cpu_divider_index(unsigned int cpu, unsigned int index) 80 100 { 81 101 unsigned long new_bits, new_freq, reg; ··· 108 88 cpus_allowed = current->cpus_allowed; 109 89 set_cpus_allowed(current, cpumask_of_cpu(cpu)); 110 90 111 - new_freq = sparc64_get_clock_tick(cpu); 91 + new_freq = sparc64_get_clock_tick(cpu) / 1000; 112 92 switch (index) { 113 93 case 0: 114 94 new_bits = SAFARI_CFG_DIV_1; ··· 170 150 static int __init us3_freq_cpu_init(struct cpufreq_policy *policy) 171 151 { 172 152 unsigned int cpu = policy->cpu; 173 - unsigned long clock_tick = sparc64_get_clock_tick(cpu); 153 + unsigned long clock_tick = sparc64_get_clock_tick(cpu) / 1000; 174 154 struct cpufreq_frequency_table *table = 175 155 &us3_freq_table[cpu].table[0]; 176 156 ··· 226 206 memset(us3_freq_table, 0, 227 207 (NR_CPUS * sizeof(struct us3_freq_percpu_info))); 228 208 209 + driver->init = us3_freq_cpu_init; 229 210 driver->verify = us3_freq_verify; 230 211 driver->target = us3_freq_target; 231 - driver->init = us3_freq_cpu_init; 212 + driver->get = us3_freq_get; 232 213 driver->exit = us3_freq_cpu_exit; 233 214 driver->owner = THIS_MODULE, 234 215 strcpy(driver->name, "UltraSPARC-III");
+5 -1
arch/um/kernel/skas/process.c
··· 61 61 62 62 CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); 63 63 } while((n >= 0) && WIFSTOPPED(status) && 64 - (WSTOPSIG(status) == SIGVTALRM)); 64 + ((WSTOPSIG(status) == SIGVTALRM) || 65 + /* running UML inside a detached screen can cause 66 + * SIGWINCHes 67 + */ 68 + (WSTOPSIG(status) == SIGWINCH))); 65 69 66 70 if((n < 0) || !WIFSTOPPED(status) || 67 71 (WSTOPSIG(status) != SIGUSR1 && WSTOPSIG(status) != SIGTRAP)){
-1
arch/um/os-Linux/elf_aux.c
··· 9 9 */ 10 10 #include <elf.h> 11 11 #include <stddef.h> 12 - #include <asm/elf.h> 13 12 #include "init.h" 14 13 #include "elf_user.h" 15 14 #include "mem_user.h"
+8 -7
arch/x86_64/kernel/smpboot.c
··· 492 492 */ 493 493 set_cpu_sibling_map(smp_processor_id()); 494 494 495 + /* 496 + * Wait for TSC sync to not schedule things before. 497 + * We still process interrupts, which could see an inconsistent 498 + * time in that window unfortunately. 499 + * Do this here because TSC sync has global unprotected state. 500 + */ 501 + tsc_sync_wait(); 502 + 495 503 /* 496 504 * We need to hold call_lock, so there is no inconsistency 497 505 * between the time smp_call_function() determines number of ··· 516 508 cpu_set(smp_processor_id(), cpu_online_map); 517 509 per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; 518 510 unlock_ipi_call_lock(); 519 - 520 - mb(); 521 - 522 - /* Wait for TSC sync to not schedule things before. 523 - We still process interrupts, which could see an inconsistent 524 - time in that window unfortunately. */ 525 - tsc_sync_wait(); 526 511 527 512 cpu_idle(); 528 513 }
+1 -3
arch/x86_64/mm/fault.c
··· 211 211 { 212 212 if (tsk->pid == 1) 213 213 return 1; 214 - /* Warn for strace, but not for gdb */ 215 - if (!test_ti_thread_flag(tsk->thread_info, TIF_SYSCALL_TRACE) && 216 - (tsk->ptrace & PT_PTRACED)) 214 + if (tsk->ptrace & PT_PTRACED) 217 215 return 0; 218 216 return (tsk->sighand->action[sig-1].sa.sa_handler == SIG_IGN) || 219 217 (tsk->sighand->action[sig-1].sa.sa_handler == SIG_DFL);
+3 -1
drivers/base/bus.c
··· 180 180 up(&dev->sem); 181 181 put_device(dev); 182 182 } 183 - return err; 183 + if (err) 184 + return err; 185 + return count; 184 186 } 185 187 static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind); 186 188
+6 -4
drivers/base/class.c
··· 299 299 300 300 pr_debug("device class '%s': release.\n", cd->class_id); 301 301 302 + if (cd->devt_attr) { 303 + kfree(cd->devt_attr); 304 + cd->devt_attr = NULL; 305 + } 306 + 302 307 if (cls->release) 303 308 cls->release(cd); 304 309 else { ··· 596 591 597 592 if (class_dev->dev) 598 593 sysfs_remove_link(&class_dev->kobj, "device"); 599 - if (class_dev->devt_attr) { 594 + if (class_dev->devt_attr) 600 595 class_device_remove_file(class_dev, class_dev->devt_attr); 601 - kfree(class_dev->devt_attr); 602 - class_dev->devt_attr = NULL; 603 - } 604 596 class_device_remove_attrs(class_dev); 605 597 606 598 kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE);
+1
drivers/ide/Kconfig
··· 764 764 config BLK_DEV_IDEDMA_PMAC 765 765 bool "PowerMac IDE DMA support" 766 766 depends on BLK_DEV_IDE_PMAC 767 + select BLK_DEV_IDEDMA_PCI 767 768 help 768 769 This option allows the driver for the built-in IDE controller on 769 770 Power Macintoshes and PowerBooks to use DMA (direct memory access)
+1 -1
drivers/ide/ide-floppy.c
··· 317 317 unsigned long flags; 318 318 } idefloppy_floppy_t; 319 319 320 - #define IDEFLOPPY_TICKS_DELAY 3 /* default delay for ZIP 100 */ 320 + #define IDEFLOPPY_TICKS_DELAY HZ/20 /* default delay for ZIP 100 (50ms) */ 321 321 322 322 /* 323 323 * Floppy flag bits values.
+7
drivers/ide/pci/generic.c
··· 173 173 .channels = 2, 174 174 .autodma = NOAUTODMA, 175 175 .bootable = ON_BOARD, 176 + },{ /* 14 */ 177 + .name = "Revolution", 178 + .init_hwif = init_hwif_generic, 179 + .channels = 2, 180 + .autodma = AUTODMA, 181 + .bootable = OFF_BOARD, 176 182 } 177 183 }; 178 184 ··· 237 231 { PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11}, 238 232 { PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12}, 239 233 { PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13}, 234 + { PCI_VENDOR_ID_NETCELL,PCI_DEVICE_ID_REVOLUTION, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14}, 240 235 /* Must come last. If you add entries adjust this table appropriately and the init_one code */ 241 236 { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 0}, 242 237 { 0, },
+23
drivers/ide/pci/serverworks.c
··· 21 21 * 22 22 * CSB6: `Champion South Bridge' IDE Interface (optional: third channel) 23 23 * 24 + * HT1000: AKA BCM5785 - Hypertransport Southbridge for Opteron systems. IDE 25 + * controller same as the CSB6. Single channel ATA100 only. 26 + * 24 27 * Documentation: 25 28 * Available under NDA only. Errata info very hard to get. 26 29 * ··· 74 71 if (!svwks_revision) 75 72 pci_read_config_byte(dev, PCI_REVISION_ID, &svwks_revision); 76 73 74 + if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE) 75 + return 2; 77 76 if (dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { 78 77 u32 reg = 0; 79 78 if (isa_dev) ··· 114 109 case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: 115 110 case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE: 116 111 case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2: 112 + case PCI_DEVICE_ID_SERVERWORKS_HT1000IDE: 117 113 return 1; 118 114 default: 119 115 break; ··· 444 438 btr |= (svwks_revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2; 445 439 pci_write_config_byte(dev, 0x5A, btr); 446 440 } 441 + /* Setup HT1000 SouthBridge Controller - Single Channel Only */ 442 + else if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE) { 443 + pci_read_config_byte(dev, 0x5A, &btr); 444 + btr &= ~0x40; 445 + btr |= 0x3; 446 + pci_write_config_byte(dev, 0x5A, btr); 447 + } 447 448 448 449 return (dev->irq) ? dev->irq : 0; 449 450 } ··· 642 629 .channels = 1, /* 2 */ 643 630 .autodma = AUTODMA, 644 631 .bootable = ON_BOARD, 632 + },{ /* 4 */ 633 + .name = "SvrWks HT1000", 634 + .init_setup = init_setup_svwks, 635 + .init_chipset = init_chipset_svwks, 636 + .init_hwif = init_hwif_svwks, 637 + .init_dma = init_dma_svwks, 638 + .channels = 1, /* 2 */ 639 + .autodma = AUTODMA, 640 + .bootable = ON_BOARD, 645 641 } 646 642 }; 647 643 ··· 675 653 { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, 676 654 { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, 677 655 { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, 656 + { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, 678 657 { 0, }, 679 658 }; 680 659 MODULE_DEVICE_TABLE(pci, svwks_pci_tbl);
+1 -1
drivers/ide/ppc/pmac.c
··· 1664 1664 }; 1665 1665 1666 1666 static struct pci_device_id pmac_ide_pci_match[] = { 1667 - { PCI_VENDOR_ID_APPLE, PCI_DEVIEC_ID_APPLE_UNI_N_ATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 1667 + { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_ATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 1668 1668 { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_IPID_ATA100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 1669 1669 { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_K2_ATA100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 1670 1670 { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_SH_ATA,
+1
drivers/ide/setup-pci.c
··· 229 229 case PCI_DEVICE_ID_AMD_VIPER_7409: 230 230 case PCI_DEVICE_ID_CMD_643: 231 231 case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: 232 + case PCI_DEVICE_ID_REVOLUTION: 232 233 simplex_stat = hwif->INB(dma_base + 2); 233 234 hwif->OUTB((simplex_stat&0x60),(dma_base + 2)); 234 235 simplex_stat = hwif->INB(dma_base + 2);
+6 -4
drivers/md/md.c
··· 256 256 { 257 257 up(&mddev->reconfig_sem); 258 258 259 - if (mddev->thread) 260 - md_wakeup_thread(mddev->thread); 259 + md_wakeup_thread(mddev->thread); 261 260 } 262 261 263 262 mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr) ··· 622 623 mddev->raid_disks = sb->raid_disks; 623 624 mddev->size = sb->size; 624 625 mddev->events = md_event(sb); 626 + mddev->bitmap_offset = 0; 625 627 626 628 if (sb->state & (1<<MD_SB_CLEAN)) 627 629 mddev->recovery_cp = MaxSector; ··· 938 938 mddev->raid_disks = le32_to_cpu(sb->raid_disks); 939 939 mddev->size = le64_to_cpu(sb->size)/2; 940 940 mddev->events = le64_to_cpu(sb->events); 941 + mddev->bitmap_offset = 0; 941 942 942 943 mddev->recovery_cp = le64_to_cpu(sb->resync_offset); 943 944 memcpy(mddev->uuid, sb->set_uuid, 16); ··· 1713 1712 mddev->in_sync = 1; 1714 1713 1715 1714 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 1715 + md_wakeup_thread(mddev->thread); 1716 1716 1717 1717 if (mddev->sb_dirty) 1718 1718 md_update_sb(mddev); ··· 1826 1824 fput(mddev->bitmap_file); 1827 1825 mddev->bitmap_file = NULL; 1828 1826 } 1827 + mddev->bitmap_offset = 0; 1829 1828 1830 1829 /* 1831 1830 * Free resources if final stop ··· 2236 2233 export_rdev(rdev); 2237 2234 2238 2235 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 2239 - if (mddev->thread) 2240 - md_wakeup_thread(mddev->thread); 2236 + md_wakeup_thread(mddev->thread); 2241 2237 return err; 2242 2238 } 2243 2239
+7
drivers/net/8139cp.c
··· 1897 1897 { 1898 1898 struct net_device *dev; 1899 1899 struct cp_private *cp; 1900 + unsigned long flags; 1900 1901 1901 1902 dev = pci_get_drvdata (pdev); 1902 1903 cp = netdev_priv(dev); ··· 1911 1910 1912 1911 cp_init_hw (cp); 1913 1912 netif_start_queue (dev); 1913 + 1914 + spin_lock_irqsave (&cp->lock, flags); 1915 + 1916 + mii_check_media(&cp->mii_if, netif_msg_link(cp), FALSE); 1917 + 1918 + spin_unlock_irqrestore (&cp->lock, flags); 1914 1919 1915 1920 return 0; 1916 1921 }
+26 -26
drivers/net/dm9000.c
··· 48 48 * net_device_stats 49 49 * * introduced tx_timeout function 50 50 * * reworked locking 51 + * 52 + * 01-Jul-2005 Ben Dooks <ben@simtec.co.uk> 53 + * * fixed spinlock call without pointer 54 + * * ensure spinlock is initialised 51 55 */ 52 56 53 57 #include <linux/module.h> ··· 152 148 static int dm9000_open(struct net_device *); 153 149 static int dm9000_start_xmit(struct sk_buff *, struct net_device *); 154 150 static int dm9000_stop(struct net_device *); 155 - static int dm9000_do_ioctl(struct net_device *, struct ifreq *, int); 156 151 157 152 158 153 static void dm9000_timer(unsigned long); ··· 325 322 326 323 /* Save previous register address */ 327 324 reg_save = readb(db->io_addr); 328 - spin_lock_irqsave(db->lock,flags); 325 + spin_lock_irqsave(&db->lock,flags); 329 326 330 327 netif_stop_queue(dev); 331 328 dm9000_reset(db); ··· 336 333 337 334 /* Restore previous register address */ 338 335 writeb(reg_save, db->io_addr); 339 - spin_unlock_irqrestore(db->lock,flags); 336 + spin_unlock_irqrestore(&db->lock,flags); 340 337 } 341 338 342 339 ··· 390 387 int i; 391 388 u32 id_val; 392 389 393 - printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME); 394 - 395 390 /* Init network device */ 396 391 ndev = alloc_etherdev(sizeof (struct board_info)); 397 392 if (!ndev) { ··· 405 404 /* setup board info structure */ 406 405 db = (struct board_info *) ndev->priv; 407 406 memset(db, 0, sizeof (*db)); 407 + 408 + spin_lock_init(&db->lock); 408 409 409 410 if (pdev->num_resources < 2) { 410 411 ret = -ENODEV; ··· 544 541 ndev->stop = &dm9000_stop; 545 542 ndev->get_stats = &dm9000_get_stats; 546 543 ndev->set_multicast_list = &dm9000_hash_table; 547 - ndev->do_ioctl = &dm9000_do_ioctl; 548 544 549 545 #ifdef DM9000_PROGRAM_EEPROM 550 546 program_eeprom(db); ··· 614 612 615 613 /* set and active a timer process */ 616 614 init_timer(&db->timer); 617 - db->timer.expires = DM9000_TIMER_WUT * 2; 615 + db->timer.expires = DM9000_TIMER_WUT; 618 616 db->timer.data = (unsigned long) dev; 619 617 db->timer.function = &dm9000_timer; 620 618 add_timer(&db->timer); ··· 847 845 return &db->stats; 848 846 } 849 847 850 - /* 851 - * Process the upper socket ioctl command 852 - */ 853 - static int 854 - dm9000_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 855 - { 856 - PRINTK1("entering %s\n",__FUNCTION__); 857 - return 0; 858 - } 859 848 860 849 /* 861 850 * A periodic timer routine ··· 857 864 { 858 865 struct net_device *dev = (struct net_device *) data; 859 866 board_info_t *db = (board_info_t *) dev->priv; 860 - u8 reg_save; 861 - unsigned long flags; 862 867 863 868 PRINTK3("dm9000_timer()\n"); 864 869 865 - spin_lock_irqsave(db->lock,flags); 866 - /* Save previous register address */ 867 - reg_save = readb(db->io_addr); 868 - 869 870 mii_check_media(&db->mii, netif_msg_link(db), 0); 870 - 871 - /* Restore previous register address */ 872 - writeb(reg_save, db->io_addr); 873 - spin_unlock_irqrestore(db->lock,flags); 874 871 875 872 /* Set timer again */ 876 873 db->timer.expires = DM9000_TIMER_WUT; ··· 1081 1098 { 1082 1099 board_info_t *db = (board_info_t *) dev->priv; 1083 1100 unsigned long flags; 1101 + unsigned int reg_save; 1084 1102 int ret; 1085 1103 1086 1104 spin_lock_irqsave(&db->lock,flags); 1105 + 1106 + /* Save previous register address */ 1107 + reg_save = readb(db->io_addr); 1108 + 1087 1109 /* Fill the phyxcer register into REG_0C */ 1088 1110 iow(db, DM9000_EPAR, DM9000_PHY | reg); 1089 1111 ··· 1098 1110 1099 1111 /* The read data keeps on REG_0D & REG_0E */ 1100 1112 ret = (ior(db, DM9000_EPDRH) << 8) | ior(db, DM9000_EPDRL); 1113 + 1114 + /* restore the previous address */ 1115 + writeb(reg_save, db->io_addr); 1101 1116 1102 1117 spin_unlock_irqrestore(&db->lock,flags); 1103 1118 ··· 1115 1124 { 1116 1125 board_info_t *db = (board_info_t *) dev->priv; 1117 1126 unsigned long flags; 1127 + unsigned long reg_save; 1118 1128 1119 1129 spin_lock_irqsave(&db->lock,flags); 1130 + 1131 + /* Save previous register address */ 1132 + reg_save = readb(db->io_addr); 1120 1133 1121 1134 /* Fill the phyxcer register into REG_0C */ 1122 1135 iow(db, DM9000_EPAR, DM9000_PHY | reg); ··· 1132 1137 iow(db, DM9000_EPCR, 0xa); /* Issue phyxcer write command */ 1133 1138 udelay(500); /* Wait write complete */ 1134 1139 iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer write command */ 1140 + 1141 + /* restore the previous address */ 1142 + writeb(reg_save, db->io_addr); 1135 1143 1136 1144 spin_unlock_irqrestore(&db->lock,flags); 1137 1145 } ··· 1200 1202 static int __init 1201 1203 dm9000_init(void) 1202 1204 { 1205 + printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME); 1206 + 1203 1207 return driver_register(&dm9000_driver); /* search board and register */ 1204 1208 } 1205 1209
+4 -4
drivers/net/ioc3-eth.c
··· 499 499 ioc3_w_micr((phy << MICR_PHYADDR_SHIFT) | reg | MICR_READTRIG); 500 500 while (ioc3_r_micr() & MICR_BUSY); 501 501 502 - return ioc3_r_micr() & MIDR_DATA_MASK; 502 + return ioc3_r_midr_r() & MIDR_DATA_MASK; 503 503 } 504 504 505 505 static void ioc3_mdio_write(struct net_device *dev, int phy, int reg, int data) ··· 1291 1291 dev->features = NETIF_F_IP_CSUM; 1292 1292 #endif 1293 1293 1294 - ioc3_setup_duplex(ip); 1295 1294 sw_physid1 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID1); 1296 1295 sw_physid2 = ioc3_mdio_read(dev, ip->mii.phy_id, MII_PHYSID2); 1297 1296 ··· 1299 1300 goto out_stop; 1300 1301 1301 1302 mii_check_media(&ip->mii, 1, 1); 1303 + ioc3_setup_duplex(ip); 1302 1304 1303 1305 vendor = (sw_physid1 << 12) | (sw_physid2 >> 4); 1304 1306 model = (sw_physid2 >> 4) & 0x3f; ··· 1524 1524 struct ethtool_drvinfo *info) 1525 1525 { 1526 1526 struct ioc3_private *ip = netdev_priv(dev); 1527 - 1527 + 1528 1528 strcpy (info->driver, IOC3_NAME); 1529 1529 strcpy (info->version, IOC3_VERSION); 1530 1530 strcpy (info->bus_info, pci_name(ip->pdev)); ··· 1550 1550 spin_lock_irq(&ip->ioc3_lock); 1551 1551 rc = mii_ethtool_sset(&ip->mii, cmd); 1552 1552 spin_unlock_irq(&ip->ioc3_lock); 1553 - 1553 + 1554 1554 return rc; 1555 1555 } 1556 1556
+1 -1
drivers/net/loopback.c
··· 214 214 .ethtool_ops = &loopback_ethtool_ops, 215 215 }; 216 216 217 - /* Setup and register the of the LOOPBACK device. */ 217 + /* Setup and register the loopback device. */ 218 218 int __init loopback_init(void) 219 219 { 220 220 struct net_device_stats *stats;
+4 -2
drivers/net/tg3.c
··· 66 66 67 67 #define DRV_MODULE_NAME "tg3" 68 68 #define PFX DRV_MODULE_NAME ": " 69 - #define DRV_MODULE_VERSION "3.35" 70 - #define DRV_MODULE_RELDATE "August 6, 2005" 69 + #define DRV_MODULE_VERSION "3.36" 70 + #define DRV_MODULE_RELDATE "August 19, 2005" 71 71 72 72 #define TG3_DEF_MAC_MODE 0 73 73 #define TG3_DEF_RX_MODE 0 ··· 8970 8970 tp->phy_id = hw_phy_id; 8971 8971 if (hw_phy_id_masked == PHY_ID_BCM8002) 8972 8972 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; 8973 + else 8974 + tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES; 8973 8975 } else { 8974 8976 if (tp->phy_id != PHY_ID_INVALID) { 8975 8977 /* Do nothing, phy ID already set up in
+1 -1
drivers/pci/hotplug/pciehp.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29 #ifndef _PCIEHP_H
+1 -1
drivers/pci/hotplug/pciehp_core.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/pciehp_ctrl.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/pciehp_hpc.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/pciehp_pci.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/pciehprm.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/pciehprm_acpi.c
··· 20 20 * along with this program; if not, write to the Free Software 21 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 22 * 23 - * Send feedback to <dely.l.sy@intel.com> 23 + * Send feedback to <kristen.c.accardi@intel.com> 24 24 * 25 25 */ 26 26
+1 -1
drivers/pci/hotplug/pciehprm_nonacpi.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/pciehprm_nonacpi.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchp.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29 #ifndef _SHPCHP_H
+1 -1
drivers/pci/hotplug/shpchp_core.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchp_ctrl.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchp_hpc.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchp_pci.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchprm.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchprm_acpi.c
··· 20 20 * along with this program; if not, write to the Free Software 21 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 22 * 23 - * Send feedback to <dely.l.sy@intel.com> 23 + * Send feedback to <kristen.c.accardi@intel.com> 24 24 * 25 25 */ 26 26
+1 -1
drivers/pci/hotplug/shpchprm_legacy.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>,<dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>,<kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchprm_legacy.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchprm_nonacpi.c
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+1 -1
drivers/pci/hotplug/shpchprm_nonacpi.h
··· 23 23 * along with this program; if not, write to the Free Software 24 24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 25 * 26 - * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> 26 + * Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com> 27 27 * 28 28 */ 29 29
+4 -1
drivers/pci/msi.c
··· 453 453 } 454 454 } 455 455 456 - static void disable_msi_mode(struct pci_dev *dev, int pos, int type) 456 + void disable_msi_mode(struct pci_dev *dev, int pos, int type) 457 457 { 458 458 u16 control; 459 459 ··· 698 698 699 699 if (!pci_msi_enable || !dev) 700 700 return status; 701 + 702 + if (dev->no_msi) 703 + return status; 701 704 702 705 temp = dev->irq; 703 706
+6
drivers/pci/pci.h
··· 47 47 #define pci_msi_quirk 0 48 48 #endif 49 49 50 + #ifdef CONFIG_PCI_MSI 51 + void disable_msi_mode(struct pci_dev *dev, int pos, int type); 52 + #else 53 + static inline void disable_msi_mode(struct pci_dev *dev, int pos, int type) { } 54 + #endif 55 + 50 56 extern int pcie_mch_quirk; 51 57 extern struct device_attribute pci_dev_attrs[]; 52 58 extern struct class_device_attribute class_device_attr_cpuaffinity;
+21
drivers/pci/quirks.c
··· 1291 1291 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch ); 1292 1292 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch ); 1293 1293 1294 + 1295 + /* 1296 + * It's possible for the MSI to get corrupted if shpc and acpi 1297 + * are used together on certain PXH-based systems. 1298 + */ 1299 + static void __devinit quirk_pcie_pxh(struct pci_dev *dev) 1300 + { 1301 + disable_msi_mode(dev, pci_find_capability(dev, PCI_CAP_ID_MSI), 1302 + PCI_CAP_ID_MSI); 1303 + dev->no_msi = 1; 1304 + 1305 + printk(KERN_WARNING "PCI: PXH quirk detected, " 1306 + "disabling MSI for SHPC device\n"); 1307 + } 1308 + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_0, quirk_pcie_pxh); 1309 + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHD_1, quirk_pcie_pxh); 1310 + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0, quirk_pcie_pxh); 1311 + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pcie_pxh); 1312 + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh); 1313 + 1314 + 1294 1315 static void __devinit quirk_netmos(struct pci_dev *dev) 1295 1316 { 1296 1317 unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4;
+2
drivers/pnp/card.c
··· 312 312 if (drv->link.driver.probe) { 313 313 if (drv->link.driver.probe(&dev->dev)) { 314 314 dev->dev.driver = NULL; 315 + dev->card_link = NULL; 316 + up_write(&dev->dev.bus->subsys.rwsem); 315 317 return NULL; 316 318 } 317 319 }
+1
drivers/serial/sn_console.c
··· 1093 1093 return -1; 1094 1094 1095 1095 sal_console_port.sc_ops = &poll_ops; 1096 + spin_lock_init(&sal_console_port.sc_port.lock); 1096 1097 early_sn_setup(); /* Find SAL entry points */ 1097 1098 register_console(&sal_console_early); 1098 1099
+10 -11
drivers/usb/input/wacom.c
··· 342 342 goto exit; 343 343 } 344 344 345 - x = le16_to_cpu(*(__le16 *) &data[2]); 346 - y = le16_to_cpu(*(__le16 *) &data[4]); 347 - 348 345 input_regs(dev, regs); 349 346 350 347 if (data[1] & 0x10) { /* in prox */ ··· 370 373 } 371 374 } 372 375 373 - if (data[1] & 0x80) { 376 + if (data[1] & 0x90) { 377 + x = le16_to_cpu(*(__le16 *) &data[2]); 378 + y = le16_to_cpu(*(__le16 *) &data[4]); 374 379 input_report_abs(dev, ABS_X, x); 375 380 input_report_abs(dev, ABS_Y, y); 376 - } 377 - if (wacom->tool[0] != BTN_TOOL_MOUSE) { 378 - input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6])); 379 - input_report_key(dev, BTN_TOUCH, data[1] & 0x01); 380 - input_report_key(dev, BTN_STYLUS, data[1] & 0x02); 381 - input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); 381 + if (wacom->tool[0] != BTN_TOOL_MOUSE) { 382 + input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(__le16 *) &data[6])); 383 + input_report_key(dev, BTN_TOUCH, data[1] & 0x01); 384 + input_report_key(dev, BTN_STYLUS, data[1] & 0x02); 385 + input_report_key(dev, BTN_STYLUS2, data[1] & 0x04); 386 + } 382 387 } 383 388 384 389 input_report_key(dev, wacom->tool[0], data[1] & 0x10); ··· 567 568 568 569 /* Cintiq doesn't send data when RDY bit isn't set */ 569 570 if ((wacom->features->type == CINTIQ) && !(data[1] & 0x40)) 570 - return; 571 + goto exit; 571 572 572 573 if (wacom->features->type >= INTUOS3) { 573 574 input_report_abs(dev, ABS_X, (data[2] << 9) | (data[3] << 1) | ((data[9] >> 1) & 1));
+3 -1
drivers/usb/mon/mon_main.c
··· 2 2 * The USB Monitor, inspired by Dave Harding's USBMon. 3 3 * 4 4 * mon_main.c: Main file, module initiation and exit, registrations, etc. 5 + * 6 + * Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com) 5 7 */ 6 8 7 9 #include <linux/kernel.h> ··· 313 311 314 312 mondir = debugfs_create_dir("usbmon", NULL); 315 313 if (IS_ERR(mondir)) { 316 - printk(KERN_NOTICE TAG ": debugs is not available\n"); 314 + printk(KERN_NOTICE TAG ": debugfs is not available\n"); 317 315 return -ENODEV; 318 316 } 319 317 if (mondir == NULL) {
+2
drivers/usb/mon/usb_mon.h
··· 1 1 /* 2 2 * The USB Monitor, inspired by Dave Harding's USBMon. 3 + * 4 + * Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com) 3 5 */ 4 6 5 7 #ifndef __USB_MON_H
+1 -2
drivers/usb/net/zd1201.c
··· 346 346 if (datalen<14) 347 347 goto resubmit; 348 348 if ((seq & IEEE802_11_SCTL_FRAG) == 0) { 349 - frag = kmalloc(sizeof(struct zd1201_frag*), 350 - GFP_ATOMIC); 349 + frag = kmalloc(sizeof(*frag), GFP_ATOMIC); 351 350 if (!frag) 352 351 goto resubmit; 353 352 skb = dev_alloc_skb(IEEE802_11_DATA_LEN +14+2);
+1 -1
drivers/video/radeonfb.c
··· 80 80 #include <video/radeon.h> 81 81 #include <linux/radeonfb.h> 82 82 83 - #define DEBUG 1 83 + #define DEBUG 0 84 84 85 85 #if DEBUG 86 86 #define RTRACE printk
+4 -4
fs/afs/mntpt.c
··· 30 30 struct dentry *dentry, 31 31 struct nameidata *nd); 32 32 static int afs_mntpt_open(struct inode *inode, struct file *file); 33 - static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd); 33 + static void *afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd); 34 34 35 35 struct file_operations afs_mntpt_file_operations = { 36 36 .open = afs_mntpt_open, ··· 233 233 /* 234 234 * follow a link from a mountpoint directory, thus causing it to be mounted 235 235 */ 236 - static int afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd) 236 + static void *afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd) 237 237 { 238 238 struct vfsmount *newmnt; 239 239 struct dentry *old_dentry; ··· 249 249 newmnt = afs_mntpt_do_automount(dentry); 250 250 if (IS_ERR(newmnt)) { 251 251 path_release(nd); 252 - return PTR_ERR(newmnt); 252 + return (void *)newmnt; 253 253 } 254 254 255 255 old_dentry = nd->dentry; ··· 267 267 } 268 268 269 269 kleave(" = %d", err); 270 - return err; 270 + return ERR_PTR(err); 271 271 } /* end afs_mntpt_follow_link() */ 272 272 273 273 /*****************************************************************************/
+3 -2
fs/autofs/symlink.c
··· 12 12 13 13 #include "autofs_i.h" 14 14 15 - static int autofs_follow_link(struct dentry *dentry, struct nameidata *nd) 15 + /* Nothing to release.. */ 16 + static void *autofs_follow_link(struct dentry *dentry, struct nameidata *nd) 16 17 { 17 18 char *s=((struct autofs_symlink *)dentry->d_inode->u.generic_ip)->data; 18 19 nd_set_link(nd, s); 19 - return 0; 20 + return NULL; 20 21 } 21 22 22 23 struct inode_operations autofs_symlink_inode_operations = {
+2 -2
fs/autofs4/symlink.c
··· 12 12 13 13 #include "autofs_i.h" 14 14 15 - static int autofs4_follow_link(struct dentry *dentry, struct nameidata *nd) 15 + static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd) 16 16 { 17 17 struct autofs_info *ino = autofs4_dentry_ino(dentry); 18 18 nd_set_link(nd, (char *)ino->u.symlink); 19 - return 0; 19 + return NULL; 20 20 } 21 21 22 22 struct inode_operations autofs4_symlink_inode_operations = {
+5 -5
fs/befs/linuxvfs.c
··· 41 41 static void befs_destroy_inode(struct inode *inode); 42 42 static int befs_init_inodecache(void); 43 43 static void befs_destroy_inodecache(void); 44 - static int befs_follow_link(struct dentry *, struct nameidata *); 45 - static void befs_put_link(struct dentry *, struct nameidata *); 44 + static void *befs_follow_link(struct dentry *, struct nameidata *); 45 + static void befs_put_link(struct dentry *, struct nameidata *, void *); 46 46 static int befs_utf2nls(struct super_block *sb, const char *in, int in_len, 47 47 char **out, int *out_len); 48 48 static int befs_nls2utf(struct super_block *sb, const char *in, int in_len, ··· 461 461 * The data stream become link name. Unless the LONG_SYMLINK 462 462 * flag is set. 463 463 */ 464 - static int 464 + static void * 465 465 befs_follow_link(struct dentry *dentry, struct nameidata *nd) 466 466 { 467 467 befs_inode_info *befs_ino = BEFS_I(dentry->d_inode); ··· 487 487 } 488 488 489 489 nd_set_link(nd, link); 490 - return 0; 490 + return NULL; 491 491 } 492 492 493 - static void befs_put_link(struct dentry *dentry, struct nameidata *nd) 493 + static void befs_put_link(struct dentry *dentry, struct nameidata *nd, void *p) 494 494 { 495 495 befs_inode_info *befs_ino = BEFS_I(dentry->d_inode); 496 496 if (befs_ino->i_flags & BEFS_LONG_SYMLINK) {
+2 -2
fs/cifs/cifsfs.h
··· 83 83 extern struct dentry_operations cifs_dentry_ops; 84 84 85 85 /* Functions related to symlinks */ 86 - extern int cifs_follow_link(struct dentry *direntry, struct nameidata *nd); 87 - extern void cifs_put_link(struct dentry *direntry, struct nameidata *nd); 86 + extern void *cifs_follow_link(struct dentry *direntry, struct nameidata *nd); 87 + extern void cifs_put_link(struct dentry *direntry, struct nameidata *nd, void *); 88 88 extern int cifs_readlink(struct dentry *direntry, char __user *buffer, 89 89 int buflen); 90 90 extern int cifs_symlink(struct inode *inode, struct dentry *direntry,
+3 -3
fs/cifs/link.c
··· 92 92 return rc; 93 93 } 94 94 95 - int 95 + void * 96 96 cifs_follow_link(struct dentry *direntry, struct nameidata *nd) 97 97 { 98 98 struct inode *inode = direntry->d_inode; ··· 148 148 out_no_free: 149 149 FreeXid(xid); 150 150 nd_set_link(nd, target_path); 151 - return 0; 151 + return NULL; /* No cookie */ 152 152 } 153 153 154 154 int ··· 330 330 return rc; 331 331 } 332 332 333 - void cifs_put_link(struct dentry *direntry, struct nameidata *nd) 333 + void cifs_put_link(struct dentry *direntry, struct nameidata *nd, void *cookie) 334 334 { 335 335 char *p = nd_get_link(nd); 336 336 if (!IS_ERR(p))
+2 -2
fs/devfs/base.c
··· 2491 2491 return 0; 2492 2492 } /* End Function devfs_mknod */ 2493 2493 2494 - static int devfs_follow_link(struct dentry *dentry, struct nameidata *nd) 2494 + static void *devfs_follow_link(struct dentry *dentry, struct nameidata *nd) 2495 2495 { 2496 2496 struct devfs_entry *p = get_devfs_entry_from_vfs_inode(dentry->d_inode); 2497 2497 nd_set_link(nd, p ? p->u.symlink.linkname : ERR_PTR(-ENODEV)); 2498 - return 0; 2498 + return NULL; 2499 2499 } /* End Function devfs_follow_link */ 2500 2500 2501 2501 static struct inode_operations devfs_iops = {
+2 -2
fs/ext2/symlink.c
··· 21 21 #include "xattr.h" 22 22 #include <linux/namei.h> 23 23 24 - static int ext2_follow_link(struct dentry *dentry, struct nameidata *nd) 24 + static void *ext2_follow_link(struct dentry *dentry, struct nameidata *nd) 25 25 { 26 26 struct ext2_inode_info *ei = EXT2_I(dentry->d_inode); 27 27 nd_set_link(nd, (char *)ei->i_data); 28 - return 0; 28 + return NULL; 29 29 } 30 30 31 31 struct inode_operations ext2_symlink_inode_operations = {
+2 -2
fs/ext3/symlink.c
··· 23 23 #include <linux/namei.h> 24 24 #include "xattr.h" 25 25 26 - static int ext3_follow_link(struct dentry *dentry, struct nameidata *nd) 26 + static void * ext3_follow_link(struct dentry *dentry, struct nameidata *nd) 27 27 { 28 28 struct ext3_inode_info *ei = EXT3_I(dentry->d_inode); 29 29 nd_set_link(nd, (char*)ei->i_data); 30 - return 0; 30 + return NULL; 31 31 } 32 32 33 33 struct inode_operations ext3_symlink_inode_operations = {
+3 -3
fs/freevxfs/vxfs_immed.c
··· 38 38 #include "vxfs_inode.h" 39 39 40 40 41 - static int vxfs_immed_follow_link(struct dentry *, struct nameidata *); 41 + static void * vxfs_immed_follow_link(struct dentry *, struct nameidata *); 42 42 43 43 static int vxfs_immed_readpage(struct file *, struct page *); 44 44 ··· 72 72 * Returns: 73 73 * Zero on success, else a negative error code. 74 74 */ 75 - static int 75 + static void * 76 76 vxfs_immed_follow_link(struct dentry *dp, struct nameidata *np) 77 77 { 78 78 struct vxfs_inode_info *vip = VXFS_INO(dp->d_inode); 79 79 nd_set_link(np, vip->vii_immed.vi_immed); 80 - return 0; 80 + return NULL; 81 81 } 82 82 83 83 /**
+2
fs/ioprio.c
··· 62 62 63 63 break; 64 64 case IOPRIO_CLASS_IDLE: 65 + if (!capable(CAP_SYS_ADMIN)) 66 + return -EPERM; 65 67 break; 66 68 default: 67 69 return -EINVAL;
+9 -7
fs/jffs2/symlink.c
··· 18 18 #include <linux/namei.h> 19 19 #include "nodelist.h" 20 20 21 - static int jffs2_follow_link(struct dentry *dentry, struct nameidata *nd); 21 + static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd); 22 22 23 23 struct inode_operations jffs2_symlink_inode_operations = 24 24 { ··· 27 27 .setattr = jffs2_setattr 28 28 }; 29 29 30 - static int jffs2_follow_link(struct dentry *dentry, struct nameidata *nd) 30 + static void *jffs2_follow_link(struct dentry *dentry, struct nameidata *nd) 31 31 { 32 32 struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode); 33 + char *p = (char *)f->dents; 33 34 34 35 /* 35 36 * We don't acquire the f->sem mutex here since the only data we ··· 46 45 * nd_set_link() call. 47 46 */ 48 47 49 - if (!f->dents) { 48 + if (!p) { 50 49 printk(KERN_ERR "jffs2_follow_link(): can't find symlink taerget\n"); 51 - return -EIO; 50 + p = ERR_PTR(-EIO); 51 + } else { 52 + D1(printk(KERN_DEBUG "jffs2_follow_link(): target path is '%s'\n", (char *) f->dents)); 52 53 } 53 - D1(printk(KERN_DEBUG "jffs2_follow_link(): target path is '%s'\n", (char *) f->dents)); 54 54 55 - nd_set_link(nd, (char *)f->dents); 55 + nd_set_link(nd, p); 56 56 57 57 /* 58 58 * We unlock the f->sem mutex but VFS will use the f->dents string. This is safe 59 59 * since the only way that may cause f->dents to be changed is iput() operation. 60 60 * But VFS will not use f->dents after iput() has been called. 61 61 */ 62 - return 0; 62 + return NULL; 63 63 } 64 64
+4
fs/jfs/inode.c
··· 128 128 { 129 129 jfs_info("In jfs_delete_inode, inode = 0x%p", inode); 130 130 131 + if (is_bad_inode(inode) || 132 + (JFS_IP(inode)->fileset != cpu_to_le32(FILESYSTEM_I))) 133 + return; 134 + 131 135 if (test_cflag(COMMIT_Freewmap, inode)) 132 136 jfs_free_zero_link(inode); 133 137
+19 -17
fs/jfs/jfs_logmgr.c
··· 191 191 static bio_end_io_t lbmIODone; 192 192 static void lbmStartIO(struct lbuf * bp); 193 193 static void lmGCwrite(struct jfs_log * log, int cant_block); 194 - static int lmLogSync(struct jfs_log * log, int nosyncwait); 194 + static int lmLogSync(struct jfs_log * log, int hard_sync); 195 195 196 196 197 197 ··· 915 915 * if new sync address is available 916 916 * (normally the case if sync() is executed by back-ground 917 917 * process). 918 - * if not, explicitly run jfs_blogsync() to initiate 919 - * getting of new sync address. 920 918 * calculate new value of i_nextsync which determines when 921 919 * this code is called again. 922 920 * 923 921 * PARAMETERS: log - log structure 924 - * nosyncwait - 1 if called asynchronously 922 + * hard_sync - 1 to force all metadata to be written 925 923 * 926 924 * RETURN: 0 927 925 * 928 926 * serialization: LOG_LOCK() held on entry/exit 929 927 */ 930 - static int lmLogSync(struct jfs_log * log, int nosyncwait) 928 + static int lmLogSync(struct jfs_log * log, int hard_sync) 931 929 { 932 930 int logsize; 933 931 int written; /* written since last syncpt */ ··· 939 941 unsigned long flags; 940 942 941 943 /* push dirty metapages out to disk */ 942 - list_for_each_entry(sbi, &log->sb_list, log_list) { 943 - filemap_flush(sbi->ipbmap->i_mapping); 944 - filemap_flush(sbi->ipimap->i_mapping); 945 - filemap_flush(sbi->direct_inode->i_mapping); 946 - } 944 + if (hard_sync) 945 + list_for_each_entry(sbi, &log->sb_list, log_list) { 946 + filemap_fdatawrite(sbi->ipbmap->i_mapping); 947 + filemap_fdatawrite(sbi->ipimap->i_mapping); 948 + filemap_fdatawrite(sbi->direct_inode->i_mapping); 949 + } 950 + else 951 + list_for_each_entry(sbi, &log->sb_list, log_list) { 952 + filemap_flush(sbi->ipbmap->i_mapping); 953 + filemap_flush(sbi->ipimap->i_mapping); 954 + filemap_flush(sbi->direct_inode->i_mapping); 955 + } 947 956 948 957 /* 949 958 * forward syncpt ··· 1026 1021 /* next syncpt trigger = written + more */ 1027 1022 log->nextsync = written + more; 1028 1023 1029 - /* return if lmLogSync() from outside of transaction, e.g., sync() */ 1030 - if (nosyncwait) 1031 - return lsn; 1032 - 1033 1024 /* if number of bytes written from last sync point is more 1034 1025 * than 1/4 of the log size, stop new transactions from 1035 1026 * starting until all current transactions are completed ··· 1050 1049 * 1051 1050 * FUNCTION: write log SYNCPT record for specified log 1052 1051 * 1053 - * PARAMETERS: log - log structure 1052 + * PARAMETERS: log - log structure 1053 + * hard_sync - set to 1 to force metadata to be written 1054 1054 */ 1055 - void jfs_syncpt(struct jfs_log *log) 1055 + void jfs_syncpt(struct jfs_log *log, int hard_sync) 1056 1056 { LOG_LOCK(log); 1057 - lmLogSync(log, 1); 1057 + lmLogSync(log, hard_sync); 1058 1058 LOG_UNLOCK(log); 1059 1059 } 1060 1060
+1 -1
fs/jfs/jfs_logmgr.h
··· 510 510 extern int lmGroupCommit(struct jfs_log *, struct tblock *); 511 511 extern int jfsIOWait(void *); 512 512 extern void jfs_flush_journal(struct jfs_log * log, int wait); 513 - extern void jfs_syncpt(struct jfs_log *log); 513 + extern void jfs_syncpt(struct jfs_log *log, int hard_sync); 514 514 515 515 #endif /* _H_JFS_LOGMGR */
+7 -5
fs/jfs/jfs_txnmgr.c
··· 552 552 * synchronize with logsync barrier 553 553 */ 554 554 if (test_bit(log_SYNCBARRIER, &log->flag)) { 555 + TXN_UNLOCK(); 556 + 557 + /* write dirty metadata & forward log syncpt */ 558 + jfs_syncpt(log, 1); 559 + 555 560 jfs_info("log barrier off: 0x%x", log->lsn); 556 561 557 562 /* enable new transactions start */ ··· 564 559 565 560 /* wakeup all waitors for logsync barrier */ 566 561 TXN_WAKEUP(&log->syncwait); 567 - 568 - TXN_UNLOCK(); 569 - 570 - /* forward log syncpt */ 571 - jfs_syncpt(log); 572 562 573 563 goto wakeup; 574 564 } ··· 657 657 /* only anonymous txn. 658 658 * Remove from anon_list 659 659 */ 660 + TXN_LOCK(); 660 661 list_del_init(&jfs_ip->anon_inode_list); 662 + TXN_UNLOCK(); 661 663 } 662 664 jfs_ip->atlhead = tlck->next; 663 665 } else {
+3 -1
fs/jfs/super.c
··· 114 114 { 115 115 struct jfs_inode_info *ji = JFS_IP(inode); 116 116 117 + BUG_ON(!list_empty(&ji->anon_inode_list)); 118 + 117 119 spin_lock_irq(&ji->ag_lock); 118 120 if (ji->active_ag != -1) { 119 121 struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; ··· 533 531 /* log == NULL indicates read-only mount */ 534 532 if (log) { 535 533 jfs_flush_journal(log, wait); 536 - jfs_syncpt(log); 534 + jfs_syncpt(log, 0); 537 535 } 538 536 539 537 return 0;
+2 -2
fs/jfs/symlink.c
··· 22 22 #include "jfs_inode.h" 23 23 #include "jfs_xattr.h" 24 24 25 - static int jfs_follow_link(struct dentry *dentry, struct nameidata *nd) 25 + static void *jfs_follow_link(struct dentry *dentry, struct nameidata *nd) 26 26 { 27 27 char *s = JFS_IP(dentry->d_inode)->i_inline; 28 28 nd_set_link(nd, s); 29 - return 0; 29 + return NULL; 30 30 } 31 31 32 32 struct inode_operations jfs_symlink_inode_operations = {
+21 -19
fs/namei.c
··· 501 501 static inline int __do_follow_link(struct path *path, struct nameidata *nd) 502 502 { 503 503 int error; 504 + void *cookie; 504 505 struct dentry *dentry = path->dentry; 505 506 506 507 touch_atime(path->mnt, dentry); ··· 509 508 510 509 if (path->mnt == nd->mnt) 511 510 mntget(path->mnt); 512 - error = dentry->d_inode->i_op->follow_link(dentry, nd); 513 - if (!error) { 511 + cookie = dentry->d_inode->i_op->follow_link(dentry, nd); 512 + error = PTR_ERR(cookie); 513 + if (!IS_ERR(cookie)) { 514 514 char *s = nd_get_link(nd); 515 + error = 0; 515 516 if (s) 516 517 error = __vfs_follow_link(nd, s); 517 518 if (dentry->d_inode->i_op->put_link) 518 - dentry->d_inode->i_op->put_link(dentry, nd); 519 + dentry->d_inode->i_op->put_link(dentry, nd, cookie); 519 520 } 520 521 dput(dentry); 521 522 mntput(path->mnt); ··· 2347 2344 int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen) 2348 2345 { 2349 2346 struct nameidata nd; 2350 - int res; 2347 + void *cookie; 2348 + 2351 2349 nd.depth = 0; 2352 - res = dentry->d_inode->i_op->follow_link(dentry, &nd); 2353 - if (!res) { 2354 - res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd)); 2350 + cookie = dentry->d_inode->i_op->follow_link(dentry, &nd); 2351 + if (!IS_ERR(cookie)) { 2352 + int res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd)); 2355 2353 if (dentry->d_inode->i_op->put_link) 2356 - dentry->d_inode->i_op->put_link(dentry, &nd); 2354 + dentry->d_inode->i_op->put_link(dentry, &nd, cookie); 2355 + cookie = ERR_PTR(res); 2357 2356 } 2358 - return res; 2357 + return PTR_ERR(cookie); 2359 2358 } 2360 2359 2361 2360 int vfs_follow_link(struct nameidata *nd, const char *link) ··· 2400 2395 return res; 2401 2396 } 2402 2397 2403 - int page_follow_link_light(struct dentry *dentry, struct nameidata *nd) 2398 + void *page_follow_link_light(struct dentry *dentry, struct nameidata *nd) 2404 2399 { 2405 - struct page *page; 2400 + struct page *page = NULL; 2406 2401 nd_set_link(nd, page_getlink(dentry, &page)); 2407 - return 0; 2402 + return page; 2408 2403 } 2409 2404 2410 - void page_put_link(struct dentry *dentry, struct nameidata *nd) 2405 + void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) 2411 2406 { 2412 - if (!IS_ERR(nd_get_link(nd))) { 2413 - struct page *page; 2414 - page = find_get_page(dentry->d_inode->i_mapping, 0); 2415 - if (!page) 2416 - BUG(); 2407 + struct page *page = cookie; 2408 + 2409 + if (page) { 2417 2410 kunmap(page); 2418 - page_cache_release(page); 2419 2411 page_cache_release(page); 2420 2412 } 2421 2413 }
+19 -9
fs/nfs/dir.c
··· 182 182 /* We requested READDIRPLUS, but the server doesn't grok it */ 183 183 if (error == -ENOTSUPP && desc->plus) { 184 184 NFS_SERVER(inode)->caps &= ~NFS_CAP_READDIRPLUS; 185 - NFS_FLAGS(inode) &= ~NFS_INO_ADVISE_RDPLUS; 185 + clear_bit(NFS_INO_ADVISE_RDPLUS, &NFS_FLAGS(inode)); 186 186 desc->plus = 0; 187 187 goto again; 188 188 } 189 189 goto error; 190 190 } 191 191 SetPageUptodate(page); 192 - NFS_FLAGS(inode) |= NFS_INO_INVALID_ATIME; 192 + spin_lock(&inode->i_lock); 193 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME; 194 + spin_unlock(&inode->i_lock); 193 195 /* Ensure consistent page alignment of the data. 194 196 * Note: assumes we have exclusive access to this mapping either 195 197 * through inode->i_sem or some other mechanism. ··· 464 462 page, 465 463 NFS_SERVER(inode)->dtsize, 466 464 desc->plus); 467 - NFS_FLAGS(inode) |= NFS_INO_INVALID_ATIME; 465 + spin_lock(&inode->i_lock); 466 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME; 467 + spin_unlock(&inode->i_lock); 468 468 desc->page = page; 469 469 desc->ptr = kmap(page); /* matching kunmap in nfs_do_filldir */ 470 470 if (desc->error >= 0) { ··· 549 545 break; 550 546 } 551 547 if (res == -ETOOSMALL && desc->plus) { 552 - NFS_FLAGS(inode) &= ~NFS_INO_ADVISE_RDPLUS; 548 + clear_bit(NFS_INO_ADVISE_RDPLUS, &NFS_FLAGS(inode)); 553 549 nfs_zap_caches(inode); 554 550 desc->plus = 0; 555 551 desc->entry->eof = 0; ··· 612 608 { 613 609 if (IS_ROOT(dentry)) 614 610 return 1; 615 - if ((NFS_FLAGS(dir) & NFS_INO_INVALID_ATTR) != 0 611 + if ((NFS_I(dir)->cache_validity & NFS_INO_INVALID_ATTR) != 0 616 612 || nfs_attribute_timeout(dir)) 617 613 return 0; 618 614 return nfs_verify_change_attribute(dir, (unsigned long)dentry->d_fsdata); ··· 939 935 error = nfs_revalidate_inode(NFS_SERVER(dir), dir); 940 936 if (error < 0) { 941 937 res = ERR_PTR(error); 938 + unlock_kernel(); 942 939 goto out; 943 940 } 944 941 ··· 1580 1575 1581 1576 int nfs_access_get_cached(struct inode *inode, struct rpc_cred *cred, struct nfs_access_entry *res) 1582 1577 { 1583 - struct nfs_access_entry *cache = &NFS_I(inode)->cache_access; 1578 + struct nfs_inode *nfsi = NFS_I(inode); 1579 + struct nfs_access_entry *cache = &nfsi->cache_access; 1584 1580 1585 1581 if (cache->cred != cred 1586 1582 || time_after(jiffies, cache->jiffies + NFS_ATTRTIMEO(inode)) 1587 - || (NFS_FLAGS(inode) & NFS_INO_INVALID_ACCESS)) 1583 + || (nfsi->cache_validity & NFS_INO_INVALID_ACCESS)) 1588 1584 return -ENOENT; 1589 1585 memcpy(res, cache, sizeof(*res)); 1590 1586 return 0; ··· 1593 1587 1594 1588 void nfs_access_add_cache(struct inode *inode, struct nfs_access_entry *set) 1595 1589 { 1596 - struct nfs_access_entry *cache = &NFS_I(inode)->cache_access; 1590 + struct nfs_inode *nfsi = NFS_I(inode); 1591 + struct nfs_access_entry *cache = &nfsi->cache_access; 1597 1592 1598 1593 if (cache->cred != set->cred) { 1599 1594 if (cache->cred) 1600 1595 put_rpccred(cache->cred); 1601 1596 cache->cred = get_rpccred(set->cred); 1602 1597 } 1603 - NFS_FLAGS(inode) &= ~NFS_INO_INVALID_ACCESS; 1598 + /* FIXME: replace current access_cache BKL reliance with inode->i_lock */ 1599 + spin_lock(&inode->i_lock); 1600 + nfsi->cache_validity &= ~NFS_INO_INVALID_ACCESS; 1601 + spin_unlock(&inode->i_lock); 1604 1602 cache->jiffies = set->jiffies; 1605 1603 cache->mask = set->mask; 1606 1604 }
+3 -2
fs/nfs/file.c
··· 134 134 */ 135 135 static int nfs_revalidate_file(struct inode *inode, struct file *filp) 136 136 { 137 + struct nfs_inode *nfsi = NFS_I(inode); 137 138 int retval = 0; 138 139 139 - if ((NFS_FLAGS(inode) & NFS_INO_REVAL_PAGECACHE) || nfs_attribute_timeout(inode)) 140 + if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) || nfs_attribute_timeout(inode)) 140 141 retval = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 141 142 nfs_revalidate_mapping(inode, filp->f_mapping); 142 143 return 0; ··· 165 164 goto force_reval; 166 165 if (nfsi->npages != 0) 167 166 return 0; 168 - if (!(NFS_FLAGS(inode) & NFS_INO_REVAL_PAGECACHE) && !nfs_attribute_timeout(inode)) 167 + if (!(nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) && !nfs_attribute_timeout(inode)) 169 168 return 0; 170 169 force_reval: 171 170 return __nfs_revalidate_inode(server, inode);
+128 -69
fs/nfs/inode.c
··· 615 615 struct nfs_inode *nfsi = NFS_I(inode); 616 616 int mode = inode->i_mode; 617 617 618 + spin_lock(&inode->i_lock); 619 + 618 620 NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode); 619 621 NFS_ATTRTIMEO_UPDATE(inode) = jiffies; 620 622 621 623 memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode))); 622 624 if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) 623 - nfsi->flags |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 625 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 624 626 else 625 - nfsi->flags |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 627 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 628 + 629 + spin_unlock(&inode->i_lock); 626 630 } 627 631 628 632 static void nfs_zap_acl_cache(struct inode *inode) ··· 636 632 clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache; 637 633 if (clear_acl_cache != NULL) 638 634 clear_acl_cache(inode); 639 - NFS_I(inode)->flags &= ~NFS_INO_INVALID_ACL; 635 + spin_lock(&inode->i_lock); 636 + NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL; 637 + spin_unlock(&inode->i_lock); 640 638 } 641 639 642 640 /* ··· 745 739 inode->i_fop = &nfs_dir_operations; 746 740 if (nfs_server_capable(inode, NFS_CAP_READDIRPLUS) 747 741 && fattr->size <= NFS_LIMIT_READDIRPLUS) 748 - NFS_FLAGS(inode) |= NFS_INO_ADVISE_RDPLUS; 742 + set_bit(NFS_INO_ADVISE_RDPLUS, &NFS_FLAGS(inode)); 749 743 } else if (S_ISLNK(inode->i_mode)) 750 744 inode->i_op = &nfs_symlink_inode_operations; 751 745 else ··· 820 814 nfs_wb_all(inode); 821 815 } 822 816 error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); 823 - if (error == 0) { 817 + if (error == 0) 824 818 nfs_refresh_inode(inode, &fattr); 819 + nfs_end_data_update(inode); 820 + unlock_kernel(); 821 + return error; 822 + } 823 + 824 + /** 825 + * nfs_setattr_update_inode - Update inode metadata after a setattr call. 826 + * @inode: pointer to struct inode 827 + * @attr: pointer to struct iattr 828 + * 829 + * Note: we do this in the *proc.c in order to ensure that 830 + * it works for things like exclusive creates too. 831 + */ 832 + void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr) 833 + { 834 + if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) { 825 835 if ((attr->ia_valid & ATTR_MODE) != 0) { 826 - int mode; 827 - mode = inode->i_mode & ~S_IALLUGO; 828 - mode |= attr->ia_mode & S_IALLUGO; 836 + int mode = attr->ia_mode & S_IALLUGO; 837 + mode |= inode->i_mode & ~S_IALLUGO; 829 838 inode->i_mode = mode; 830 839 } 831 840 if ((attr->ia_valid & ATTR_UID) != 0) 832 841 inode->i_uid = attr->ia_uid; 833 842 if ((attr->ia_valid & ATTR_GID) != 0) 834 843 inode->i_gid = attr->ia_gid; 835 - if ((attr->ia_valid & ATTR_SIZE) != 0) { 836 - inode->i_size = attr->ia_size; 837 - vmtruncate(inode, attr->ia_size); 838 - } 844 + spin_lock(&inode->i_lock); 845 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 846 + spin_unlock(&inode->i_lock); 839 847 } 840 - if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) 841 - NFS_FLAGS(inode) |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 842 - nfs_end_data_update(inode); 843 - unlock_kernel(); 844 - return error; 848 + if ((attr->ia_valid & ATTR_SIZE) != 0) { 849 + inode->i_size = attr->ia_size; 850 + vmtruncate(inode, attr->ia_size); 851 + } 852 + } 853 + 854 + static int nfs_wait_schedule(void *word) 855 + { 856 + if (signal_pending(current)) 857 + return -ERESTARTSYS; 858 + schedule(); 859 + return 0; 845 860 } 846 861 847 862 /* 848 863 * Wait for the inode to get unlocked. 849 - * (Used for NFS_INO_LOCKED and NFS_INO_REVALIDATING). 850 864 */ 851 - static int 852 - nfs_wait_on_inode(struct inode *inode, int flag) 865 + static int nfs_wait_on_inode(struct inode *inode) 853 866 { 854 867 struct rpc_clnt *clnt = NFS_CLIENT(inode); 855 868 struct nfs_inode *nfsi = NFS_I(inode); 856 - 869 + sigset_t oldmask; 857 870 int error; 858 - if (!(NFS_FLAGS(inode) & flag)) 859 - return 0; 871 + 860 872 atomic_inc(&inode->i_count); 861 - error = nfs_wait_event(clnt, nfsi->nfs_i_wait, 862 - !(NFS_FLAGS(inode) & flag)); 873 + rpc_clnt_sigmask(clnt, &oldmask); 874 + error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING, 875 + nfs_wait_schedule, TASK_INTERRUPTIBLE); 876 + rpc_clnt_sigunmask(clnt, &oldmask); 863 877 iput(inode); 878 + 864 879 return error; 880 + } 881 + 882 + static void nfs_wake_up_inode(struct inode *inode) 883 + { 884 + struct nfs_inode *nfsi = NFS_I(inode); 885 + 886 + clear_bit(NFS_INO_REVALIDATING, &nfsi->flags); 887 + smp_mb__after_clear_bit(); 888 + wake_up_bit(&nfsi->flags, NFS_INO_REVALIDATING); 865 889 } 866 890 867 891 int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) 868 892 { 869 893 struct inode *inode = dentry->d_inode; 870 - struct nfs_inode *nfsi = NFS_I(inode); 871 - int need_atime = nfsi->flags & NFS_INO_INVALID_ATIME; 894 + int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME; 872 895 int err; 873 896 874 897 if (__IS_FLG(inode, MS_NOATIME)) ··· 1043 1008 struct nfs_fattr fattr; 1044 1009 struct nfs_inode *nfsi = NFS_I(inode); 1045 1010 unsigned long verifier; 1046 - unsigned int flags; 1011 + unsigned long cache_validity; 1047 1012 1048 1013 dfprintk(PAGECACHE, "NFS: revalidating (%s/%Ld)\n", 1049 1014 inode->i_sb->s_id, (long long)NFS_FILEID(inode)); ··· 1054 1019 if (NFS_STALE(inode)) 1055 1020 goto out_nowait; 1056 1021 1057 - while (NFS_REVALIDATING(inode)) { 1058 - status = nfs_wait_on_inode(inode, NFS_INO_REVALIDATING); 1059 - if (status < 0) 1060 - goto out_nowait; 1061 - if (NFS_ATTRTIMEO(inode) == 0) 1062 - continue; 1063 - if (NFS_FLAGS(inode) & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ATIME)) 1064 - continue; 1065 - status = NFS_STALE(inode) ? -ESTALE : 0; 1066 - goto out_nowait; 1022 + status = nfs_wait_on_inode(inode); 1023 + if (status < 0) 1024 + goto out; 1025 + if (NFS_STALE(inode)) { 1026 + status = -ESTALE; 1027 + /* Do we trust the cached ESTALE? */ 1028 + if (NFS_ATTRTIMEO(inode) != 0) { 1029 + if (nfsi->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ATIME)) { 1030 + /* no */ 1031 + } else 1032 + goto out; 1033 + } 1067 1034 } 1068 - NFS_FLAGS(inode) |= NFS_INO_REVALIDATING; 1069 1035 1070 1036 /* Protect against RPC races by saving the change attribute */ 1071 1037 verifier = nfs_save_change_attribute(inode); ··· 1078 1042 if (status == -ESTALE) { 1079 1043 nfs_zap_caches(inode); 1080 1044 if (!S_ISDIR(inode->i_mode)) 1081 - NFS_FLAGS(inode) |= NFS_INO_STALE; 1045 + set_bit(NFS_INO_STALE, &NFS_FLAGS(inode)); 1082 1046 } 1083 1047 goto out; 1084 1048 } ··· 1090 1054 (long long)NFS_FILEID(inode), status); 1091 1055 goto out; 1092 1056 } 1093 - flags = nfsi->flags; 1094 - nfsi->flags &= ~NFS_INO_REVAL_PAGECACHE; 1057 + spin_lock(&inode->i_lock); 1058 + cache_validity = nfsi->cache_validity; 1059 + nfsi->cache_validity &= ~NFS_INO_REVAL_PAGECACHE; 1060 + 1095 1061 /* 1096 1062 * We may need to keep the attributes marked as invalid if 1097 1063 * we raced with nfs_end_attr_update(). 1098 1064 */ 1099 1065 if (verifier == nfsi->cache_change_attribute) 1100 - nfsi->flags &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME); 1101 - /* Do the page cache invalidation */ 1066 + nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME); 1067 + spin_unlock(&inode->i_lock); 1068 + 1102 1069 nfs_revalidate_mapping(inode, inode->i_mapping); 1103 - if (flags & NFS_INO_INVALID_ACL) 1070 + 1071 + if (cache_validity & NFS_INO_INVALID_ACL) 1104 1072 nfs_zap_acl_cache(inode); 1073 + 1105 1074 dfprintk(PAGECACHE, "NFS: (%s/%Ld) revalidation complete\n", 1106 1075 inode->i_sb->s_id, 1107 1076 (long long)NFS_FILEID(inode)); 1108 1077 1109 - out: 1110 - NFS_FLAGS(inode) &= ~NFS_INO_REVALIDATING; 1111 - wake_up(&nfsi->nfs_i_wait); 1078 + out: 1079 + nfs_wake_up_inode(inode); 1080 + 1112 1081 out_nowait: 1113 1082 unlock_kernel(); 1114 1083 return status; ··· 1137 1096 */ 1138 1097 int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 1139 1098 { 1140 - if (!(NFS_FLAGS(inode) & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA)) 1099 + if (!(NFS_I(inode)->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA)) 1141 1100 && !nfs_attribute_timeout(inode)) 1142 1101 return NFS_STALE(inode) ? -ESTALE : 0; 1143 1102 return __nfs_revalidate_inode(server, inode); ··· 1152 1111 { 1153 1112 struct nfs_inode *nfsi = NFS_I(inode); 1154 1113 1155 - if (nfsi->flags & NFS_INO_INVALID_DATA) { 1114 + if (nfsi->cache_validity & NFS_INO_INVALID_DATA) { 1156 1115 if (S_ISREG(inode->i_mode)) { 1157 1116 if (filemap_fdatawrite(mapping) == 0) 1158 1117 filemap_fdatawait(mapping); 1159 1118 nfs_wb_all(inode); 1160 1119 } 1161 1120 invalidate_inode_pages2(mapping); 1162 - nfsi->flags &= ~NFS_INO_INVALID_DATA; 1121 + 1122 + spin_lock(&inode->i_lock); 1123 + nfsi->cache_validity &= ~NFS_INO_INVALID_DATA; 1163 1124 if (S_ISDIR(inode->i_mode)) { 1164 1125 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 1165 1126 /* This ensures we revalidate child dentries */ 1166 1127 nfsi->cache_change_attribute++; 1167 1128 } 1129 + spin_unlock(&inode->i_lock); 1130 + 1168 1131 dfprintk(PAGECACHE, "NFS: (%s/%Ld) data cache invalidated\n", 1169 1132 inode->i_sb->s_id, 1170 1133 (long long)NFS_FILEID(inode)); ··· 1198 1153 1199 1154 if (!nfs_have_delegation(inode, FMODE_READ)) { 1200 1155 /* Mark the attribute cache for revalidation */ 1201 - nfsi->flags |= NFS_INO_INVALID_ATTR; 1156 + spin_lock(&inode->i_lock); 1157 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 1202 1158 /* Directories and symlinks: invalidate page cache too */ 1203 1159 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) 1204 - nfsi->flags |= NFS_INO_INVALID_DATA; 1160 + nfsi->cache_validity |= NFS_INO_INVALID_DATA; 1161 + spin_unlock(&inode->i_lock); 1205 1162 } 1206 1163 nfsi->cache_change_attribute ++; 1207 1164 atomic_dec(&nfsi->data_updates); ··· 1228 1181 if (nfs_have_delegation(inode, FMODE_READ)) 1229 1182 return 0; 1230 1183 1184 + spin_lock(&inode->i_lock); 1185 + 1231 1186 /* Are we in the process of updating data on the server? */ 1232 1187 data_unstable = nfs_caches_unstable(inode); 1233 1188 ··· 1238 1189 && nfsi->change_attr == fattr->pre_change_attr) 1239 1190 nfsi->change_attr = fattr->change_attr; 1240 1191 if (nfsi->change_attr != fattr->change_attr) { 1241 - nfsi->flags |= NFS_INO_INVALID_ATTR; 1192 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 1242 1193 if (!data_unstable) 1243 - nfsi->flags |= NFS_INO_REVAL_PAGECACHE; 1194 + nfsi->cache_validity |= NFS_INO_REVAL_PAGECACHE; 1244 1195 } 1245 1196 } 1246 1197 1247 - if ((fattr->valid & NFS_ATTR_FATTR) == 0) 1198 + if ((fattr->valid & NFS_ATTR_FATTR) == 0) { 1199 + spin_unlock(&inode->i_lock); 1248 1200 return 0; 1201 + } 1249 1202 1250 1203 /* Has the inode gone and changed behind our back? */ 1251 1204 if (nfsi->fileid != fattr->fileid 1252 - || (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) 1205 + || (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) { 1206 + spin_unlock(&inode->i_lock); 1253 1207 return -EIO; 1208 + } 1254 1209 1255 1210 cur_size = i_size_read(inode); 1256 1211 new_isize = nfs_size_to_loff_t(fattr->size); ··· 1269 1216 1270 1217 /* Verify a few of the more important attributes */ 1271 1218 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) { 1272 - nfsi->flags |= NFS_INO_INVALID_ATTR; 1219 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 1273 1220 if (!data_unstable) 1274 - nfsi->flags |= NFS_INO_REVAL_PAGECACHE; 1221 + nfsi->cache_validity |= NFS_INO_REVAL_PAGECACHE; 1275 1222 } 1276 1223 if (cur_size != new_isize) { 1277 - nfsi->flags |= NFS_INO_INVALID_ATTR; 1224 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 1278 1225 if (nfsi->npages == 0) 1279 - nfsi->flags |= NFS_INO_REVAL_PAGECACHE; 1226 + nfsi->cache_validity |= NFS_INO_REVAL_PAGECACHE; 1280 1227 } 1281 1228 1282 1229 /* Have any file permissions changed? */ 1283 1230 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) 1284 1231 || inode->i_uid != fattr->uid 1285 1232 || inode->i_gid != fattr->gid) 1286 - nfsi->flags |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 1233 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 1287 1234 1288 1235 /* Has the link count changed? */ 1289 1236 if (inode->i_nlink != fattr->nlink) 1290 - nfsi->flags |= NFS_INO_INVALID_ATTR; 1237 + nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 1291 1238 1292 1239 if (!timespec_equal(&inode->i_atime, &fattr->atime)) 1293 - nfsi->flags |= NFS_INO_INVALID_ATIME; 1240 + nfsi->cache_validity |= NFS_INO_INVALID_ATIME; 1294 1241 1295 1242 nfsi->read_cache_jiffies = fattr->timestamp; 1243 + spin_unlock(&inode->i_lock); 1296 1244 return 0; 1297 1245 } 1298 1246 ··· 1332 1278 goto out_err; 1333 1279 } 1334 1280 1281 + spin_lock(&inode->i_lock); 1282 + 1335 1283 /* 1336 1284 * Make sure the inode's type hasn't changed. 1337 1285 */ 1338 - if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) 1286 + if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) { 1287 + spin_unlock(&inode->i_lock); 1339 1288 goto out_changed; 1289 + } 1340 1290 1341 1291 /* 1342 1292 * Update the read time so we don't revalidate too often. ··· 1431 1373 || S_ISLNK(inode->i_mode))) 1432 1374 invalid &= ~NFS_INO_INVALID_DATA; 1433 1375 if (!nfs_have_delegation(inode, FMODE_READ)) 1434 - nfsi->flags |= invalid; 1376 + nfsi->cache_validity |= invalid; 1435 1377 1378 + spin_unlock(&inode->i_lock); 1436 1379 return 0; 1437 1380 out_changed: 1438 1381 /* ··· 1450 1391 */ 1451 1392 nfs_invalidate_inode(inode); 1452 1393 out_err: 1453 - NFS_FLAGS(inode) |= NFS_INO_STALE; 1394 + set_bit(NFS_INO_STALE, &NFS_FLAGS(inode)); 1454 1395 return -ESTALE; 1455 1396 } 1456 1397 ··· 2009 1950 nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, SLAB_KERNEL); 2010 1951 if (!nfsi) 2011 1952 return NULL; 2012 - nfsi->flags = 0; 1953 + nfsi->flags = 0UL; 1954 + nfsi->cache_validity = 0UL; 2013 1955 #ifdef CONFIG_NFS_V3_ACL 2014 1956 nfsi->acl_access = ERR_PTR(-EAGAIN); 2015 1957 nfsi->acl_default = ERR_PTR(-EAGAIN); ··· 2042 1982 nfsi->ndirty = 0; 2043 1983 nfsi->ncommit = 0; 2044 1984 nfsi->npages = 0; 2045 - init_waitqueue_head(&nfsi->nfs_i_wait); 2046 1985 nfs4_init_once(nfsi); 2047 1986 } 2048 1987 }
+3 -1
fs/nfs/nfs3acl.c
··· 308 308 nfs_begin_data_update(inode); 309 309 status = rpc_call(server->client_acl, ACLPROC3_SETACL, 310 310 &args, &fattr, 0); 311 - NFS_FLAGS(inode) |= NFS_INO_INVALID_ACCESS; 311 + spin_lock(&inode->i_lock); 312 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS; 313 + spin_unlock(&inode->i_lock); 312 314 nfs_end_data_update(inode); 313 315 dprintk("NFS reply setacl: %d\n", status); 314 316
+4
fs/nfs/nfs3proc.c
··· 120 120 dprintk("NFS call setattr\n"); 121 121 fattr->valid = 0; 122 122 status = rpc_call(NFS_CLIENT(inode), NFS3PROC_SETATTR, &arg, fattr, 0); 123 + if (status == 0) 124 + nfs_setattr_update_inode(inode, sattr); 123 125 dprintk("NFS reply setattr: %d\n", status); 124 126 return status; 125 127 } ··· 372 370 * not sure this buys us anything (and I'd have 373 371 * to revamp the NFSv3 XDR code) */ 374 372 status = nfs3_proc_setattr(dentry, &fattr, sattr); 373 + if (status == 0) 374 + nfs_setattr_update_inode(dentry->d_inode, sattr); 375 375 nfs_refresh_inode(dentry->d_inode, &fattr); 376 376 dprintk("NFS reply setattr (post-create): %d\n", status); 377 377 }
+8 -2
fs/nfs/nfs4proc.c
··· 753 753 .rpc_argp = &arg, 754 754 .rpc_resp = &res, 755 755 }; 756 + int status; 756 757 757 758 fattr->valid = 0; 758 759 ··· 763 762 } else 764 763 memcpy(&arg.stateid, &zero_stateid, sizeof(arg.stateid)); 765 764 766 - return rpc_call_sync(server->client, &msg, 0); 765 + status = rpc_call_sync(server->client, &msg, 0); 766 + return status; 767 767 } 768 768 769 769 static int nfs4_do_setattr(struct nfs_server *server, struct nfs_fattr *fattr, ··· 1147 1145 1148 1146 status = nfs4_do_setattr(NFS_SERVER(inode), fattr, 1149 1147 NFS_FH(inode), sattr, state); 1148 + if (status == 0) 1149 + nfs_setattr_update_inode(inode, sattr); 1150 1150 if (state != NULL) 1151 1151 nfs4_close_state(state, FMODE_WRITE); 1152 1152 put_rpccred(cred); ··· 1453 1449 struct nfs_fattr fattr; 1454 1450 status = nfs4_do_setattr(NFS_SERVER(dir), &fattr, 1455 1451 NFS_FH(state->inode), sattr, state); 1456 - if (status == 0) 1452 + if (status == 0) { 1453 + nfs_setattr_update_inode(state->inode, sattr); 1457 1454 goto out; 1455 + } 1458 1456 } else if (flags != 0) 1459 1457 goto out; 1460 1458 nfs4_close_state(state, flags);
+2
fs/nfs/proc.c
··· 114 114 dprintk("NFS call setattr\n"); 115 115 fattr->valid = 0; 116 116 status = rpc_call(NFS_CLIENT(inode), NFSPROC_SETATTR, &arg, fattr, 0); 117 + if (status == 0) 118 + nfs_setattr_update_inode(inode, sattr); 117 119 dprintk("NFS reply setattr: %d\n", status); 118 120 return status; 119 121 }
+6 -2
fs/nfs/read.c
··· 140 140 if (rdata->res.eof != 0 || result == 0) 141 141 break; 142 142 } while (count); 143 - NFS_FLAGS(inode) |= NFS_INO_INVALID_ATIME; 143 + spin_lock(&inode->i_lock); 144 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME; 145 + spin_unlock(&inode->i_lock); 144 146 145 147 if (count) 146 148 memclear_highpage_flush(page, rdata->args.pgbase, count); ··· 475 473 } 476 474 task->tk_status = -EIO; 477 475 } 478 - NFS_FLAGS(data->inode) |= NFS_INO_INVALID_ATIME; 476 + spin_lock(&data->inode->i_lock); 477 + NFS_I(data->inode)->cache_validity |= NFS_INO_INVALID_ATIME; 478 + spin_unlock(&data->inode->i_lock); 479 479 data->complete(data, status); 480 480 } 481 481
+8 -29
fs/nfs/symlink.c
··· 27 27 28 28 /* Symlink caching in the page cache is even more simplistic 29 29 * and straight-forward than readdir caching. 30 - * 31 - * At the beginning of the page we store pointer to struct page in question, 32 - * simplifying nfs_put_link() (if inode got invalidated we can't find the page 33 - * to be freed via pagecache lookup). 34 - * The NUL-terminated string follows immediately thereafter. 35 30 */ 36 - 37 - struct nfs_symlink { 38 - struct page *page; 39 - char body[0]; 40 - }; 41 31 42 32 static int nfs_symlink_filler(struct inode *inode, struct page *page) 43 33 { 44 - const unsigned int pgbase = offsetof(struct nfs_symlink, body); 45 - const unsigned int pglen = PAGE_SIZE - pgbase; 46 34 int error; 47 35 48 36 lock_kernel(); 49 - error = NFS_PROTO(inode)->readlink(inode, page, pgbase, pglen); 37 + error = NFS_PROTO(inode)->readlink(inode, page, 0, PAGE_SIZE); 50 38 unlock_kernel(); 51 39 if (error < 0) 52 40 goto error; ··· 48 60 return -EIO; 49 61 } 50 62 51 - static int nfs_follow_link(struct dentry *dentry, struct nameidata *nd) 63 + static void *nfs_follow_link(struct dentry *dentry, struct nameidata *nd) 52 64 { 53 65 struct inode *inode = dentry->d_inode; 54 66 struct page *page; 55 - struct nfs_symlink *p; 56 67 void *err = ERR_PTR(nfs_revalidate_inode(NFS_SERVER(inode), inode)); 57 68 if (err) 58 69 goto read_failed; ··· 65 78 err = ERR_PTR(-EIO); 66 79 goto getlink_read_error; 67 80 } 68 - p = kmap(page); 69 - p->page = page; 70 - nd_set_link(nd, p->body); 71 - return 0; 81 + nd_set_link(nd, kmap(page)); 82 + return page; 72 83 73 84 getlink_read_error: 74 85 page_cache_release(page); 75 86 read_failed: 76 87 nd_set_link(nd, err); 77 - return 0; 88 + return NULL; 78 89 } 79 90 80 - static void nfs_put_link(struct dentry *dentry, struct nameidata *nd) 91 + static void nfs_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) 81 92 { 82 - char *s = nd_get_link(nd); 83 - if (!IS_ERR(s)) { 84 - struct nfs_symlink *p; 85 - struct page *page; 86 - 87 - p = container_of(s, struct nfs_symlink, body[0]); 88 - page = p->page; 89 - 93 + if (cookie) { 94 + struct page *page = cookie; 90 95 kunmap(page); 91 96 page_cache_release(page); 92 97 }
+1
fs/nfs_common/nfsacl.c
··· 239 239 if (xdr_decode_word(buf, base, &entries) || 240 240 entries > NFS_ACL_MAX_ENTRIES) 241 241 return -EINVAL; 242 + nfsacl_desc.desc.array_maxlen = entries; 242 243 err = xdr_decode_array2(buf, base + 4, &nfsacl_desc.desc); 243 244 if (err) 244 245 return err;
+1
fs/nfsd/nfssvc.c
··· 287 287 svc_exit_thread(rqstp); 288 288 289 289 /* Release module */ 290 + unlock_kernel(); 290 291 module_put_and_exit(0); 291 292 } 292 293
+3
fs/ntfs/ChangeLog
··· 174 174 fact that the vfs and ntfs inodes are one struct in memory to find 175 175 the ntfs inode in memory if present. Also, the ntfs inode has its 176 176 own locking so it does not matter if the vfs inode is locked. 177 + - Fix bug in mft record writing where we forgot to set the device in 178 + the buffers when mapping them after the VM had discarded them. 179 + Thanks to Martin MOKREJŠ for the bug report. 177 180 178 181 2.1.22 - Many bug and race fixes and error handling improvements. 179 182
+1
fs/ntfs/aops.c
··· 924 924 LCN lcn; 925 925 unsigned int vcn_ofs; 926 926 927 + bh->b_bdev = vol->sb->s_bdev; 927 928 /* Obtain the vcn and offset of the current block. */ 928 929 vcn = (VCN)block << bh_size_bits; 929 930 vcn_ofs = vcn & vol->cluster_size_mask;
+2
fs/ntfs/mft.c
··· 533 533 LCN lcn; 534 534 unsigned int vcn_ofs; 535 535 536 + bh->b_bdev = vol->sb->s_bdev; 536 537 /* Obtain the vcn and offset of the current block. */ 537 538 vcn = ((VCN)mft_no << vol->mft_record_size_bits) + 538 539 (block_start - m_start); ··· 726 725 LCN lcn; 727 726 unsigned int vcn_ofs; 728 727 728 + bh->b_bdev = vol->sb->s_bdev; 729 729 /* Obtain the vcn and offset of the current block. */ 730 730 vcn = ((VCN)ni->mft_no << vol->mft_record_size_bits) + 731 731 (block_start - m_start);
+4 -4
fs/proc/base.c
··· 890 890 }; 891 891 #endif /* CONFIG_SECCOMP */ 892 892 893 - static int proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd) 893 + static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd) 894 894 { 895 895 struct inode *inode = dentry->d_inode; 896 896 int error = -EACCES; ··· 907 907 error = PROC_I(inode)->op.proc_get_link(inode, &nd->dentry, &nd->mnt); 908 908 nd->last_type = LAST_BIND; 909 909 out: 910 - return error; 910 + return ERR_PTR(error); 911 911 } 912 912 913 913 static int do_proc_readlink(struct dentry *dentry, struct vfsmount *mnt, ··· 1692 1692 return vfs_readlink(dentry,buffer,buflen,tmp); 1693 1693 } 1694 1694 1695 - static int proc_self_follow_link(struct dentry *dentry, struct nameidata *nd) 1695 + static void *proc_self_follow_link(struct dentry *dentry, struct nameidata *nd) 1696 1696 { 1697 1697 char tmp[30]; 1698 1698 sprintf(tmp, "%d", current->tgid); 1699 - return vfs_follow_link(nd,tmp); 1699 + return ERR_PTR(vfs_follow_link(nd,tmp)); 1700 1700 } 1701 1701 1702 1702 static struct inode_operations proc_self_inode_operations = {
+2 -2
fs/proc/generic.c
··· 329 329 spin_unlock(&proc_inum_lock); 330 330 } 331 331 332 - static int proc_follow_link(struct dentry *dentry, struct nameidata *nd) 332 + static void *proc_follow_link(struct dentry *dentry, struct nameidata *nd) 333 333 { 334 334 nd_set_link(nd, PDE(dentry->d_inode)->data); 335 - return 0; 335 + return NULL; 336 336 } 337 337 338 338 static struct inode_operations proc_link_inode_operations = {
+1 -1
fs/reiserfs/inode.c
··· 1985 1985 * iput doesn't deadlock in reiserfs_delete_xattrs. The locking 1986 1986 * code really needs to be reworked, but this will take care of it 1987 1987 * for now. -jeffm */ 1988 - if (REISERFS_I(dir)->i_acl_default) { 1988 + if (REISERFS_I(dir)->i_acl_default && !IS_ERR(REISERFS_I(dir)->i_acl_default)) { 1989 1989 reiserfs_write_unlock_xattrs(dir->i_sb); 1990 1990 iput(inode); 1991 1991 reiserfs_write_lock_xattrs(dir->i_sb);
+3 -3
fs/smbfs/symlink.c
··· 34 34 return smb_proc_symlink(server_from_dentry(dentry), dentry, oldname); 35 35 } 36 36 37 - static int smb_follow_link(struct dentry *dentry, struct nameidata *nd) 37 + static void *smb_follow_link(struct dentry *dentry, struct nameidata *nd) 38 38 { 39 39 char *link = __getname(); 40 40 DEBUG1("followlink of %s/%s\n", DENTRY_PATH(dentry)); ··· 52 52 } 53 53 } 54 54 nd_set_link(nd, link); 55 - return 0; 55 + return NULL; 56 56 } 57 57 58 - static void smb_put_link(struct dentry *dentry, struct nameidata *nd) 58 + static void smb_put_link(struct dentry *dentry, struct nameidata *nd, void *p) 59 59 { 60 60 char *s = nd_get_link(nd); 61 61 if (!IS_ERR(s))
+3 -3
fs/sysfs/symlink.c
··· 151 151 152 152 } 153 153 154 - static int sysfs_follow_link(struct dentry *dentry, struct nameidata *nd) 154 + static void *sysfs_follow_link(struct dentry *dentry, struct nameidata *nd) 155 155 { 156 156 int error = -ENOMEM; 157 157 unsigned long page = get_zeroed_page(GFP_KERNEL); 158 158 if (page) 159 159 error = sysfs_getlink(dentry, (char *) page); 160 160 nd_set_link(nd, error ? ERR_PTR(error) : (char *)page); 161 - return 0; 161 + return NULL; 162 162 } 163 163 164 - static void sysfs_put_link(struct dentry *dentry, struct nameidata *nd) 164 + static void sysfs_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) 165 165 { 166 166 char *page = nd_get_link(nd); 167 167 if (!IS_ERR(page))
+2 -2
fs/sysv/symlink.c
··· 8 8 #include "sysv.h" 9 9 #include <linux/namei.h> 10 10 11 - static int sysv_follow_link(struct dentry *dentry, struct nameidata *nd) 11 + static void *sysv_follow_link(struct dentry *dentry, struct nameidata *nd) 12 12 { 13 13 nd_set_link(nd, (char *)SYSV_I(dentry->d_inode)->i_data); 14 - return 0; 14 + return NULL; 15 15 } 16 16 17 17 struct inode_operations sysv_fast_symlink_inode_operations = {
+2 -2
fs/ufs/symlink.c
··· 29 29 #include <linux/namei.h> 30 30 #include <linux/ufs_fs.h> 31 31 32 - static int ufs_follow_link(struct dentry *dentry, struct nameidata *nd) 32 + static void *ufs_follow_link(struct dentry *dentry, struct nameidata *nd) 33 33 { 34 34 struct ufs_inode_info *p = UFS_I(dentry->d_inode); 35 35 nd_set_link(nd, (char*)p->i_u1.i_symlink); 36 - return 0; 36 + return NULL; 37 37 } 38 38 39 39 struct inode_operations ufs_fast_symlink_inode_operations = {
+5 -5
fs/xfs/linux-2.6/xfs_iops.c
··· 374 374 * we need to be very careful about how much stack we use. 375 375 * uio is kmalloced for this reason... 376 376 */ 377 - STATIC int 377 + STATIC void * 378 378 linvfs_follow_link( 379 379 struct dentry *dentry, 380 380 struct nameidata *nd) ··· 391 391 link = (char *)kmalloc(MAXNAMELEN+1, GFP_KERNEL); 392 392 if (!link) { 393 393 nd_set_link(nd, ERR_PTR(-ENOMEM)); 394 - return 0; 394 + return NULL; 395 395 } 396 396 397 397 uio = (uio_t *)kmalloc(sizeof(uio_t), GFP_KERNEL); 398 398 if (!uio) { 399 399 kfree(link); 400 400 nd_set_link(nd, ERR_PTR(-ENOMEM)); 401 - return 0; 401 + return NULL; 402 402 } 403 403 404 404 vp = LINVFS_GET_VP(dentry->d_inode); ··· 422 422 kfree(uio); 423 423 424 424 nd_set_link(nd, link); 425 - return 0; 425 + return NULL; 426 426 } 427 427 428 - static void linvfs_put_link(struct dentry *dentry, struct nameidata *nd) 428 + static void linvfs_put_link(struct dentry *dentry, struct nameidata *nd, void *p) 429 429 { 430 430 char *s = nd_get_link(nd); 431 431 if (!IS_ERR(s))
+5
include/asm-arm/unistd.h
··· 350 350 #endif 351 351 352 352 #define __NR_vserver (__NR_SYSCALL_BASE+313) 353 + #define __NR_ioprio_set (__NR_SYSCALL_BASE+314) 354 + #define __NR_ioprio_get (__NR_SYSCALL_BASE+315) 355 + #define __NR_inotify_init (__NR_SYSCALL_BASE+316) 356 + #define __NR_inotify_add_watch (__NR_SYSCALL_BASE+317) 357 + #define __NR_inotify_rm_watch (__NR_SYSCALL_BASE+318) 353 358 354 359 /* 355 360 * The following SWIs are ARM private.
+1 -1
include/asm-i386/processor.h
··· 29 29 }; 30 30 31 31 #define desc_empty(desc) \ 32 - (!((desc)->a + (desc)->b)) 32 + (!((desc)->a | (desc)->b)) 33 33 34 34 #define desc_equal(desc1, desc2) \ 35 35 (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
-8
include/asm-ia64/io.h
··· 120 120 ia64_mfa(); 121 121 } 122 122 123 - static inline const unsigned long 124 - __ia64_get_io_port_base (void) 125 - { 126 - extern unsigned long ia64_iobase; 127 - 128 - return ia64_iobase; 129 - } 130 - 131 123 static inline void* 132 124 __ia64_mk_io_addr (unsigned long port) 133 125 {
+2 -2
include/asm-ia64/iosapic.h
··· 75 75 unsigned int gsi_base); 76 76 #ifdef CONFIG_HOTPLUG 77 77 extern int iosapic_remove (unsigned int gsi_base); 78 + #else 79 + #define iosapic_remove(gsi_base) (-EINVAL) 78 80 #endif /* CONFIG_HOTPLUG */ 79 81 extern int gsi_to_vector (unsigned int gsi); 80 82 extern int gsi_to_irq (unsigned int gsi); ··· 104 102 #else 105 103 #define iosapic_system_init(pcat_compat) do { } while (0) 106 104 #define iosapic_init(address,gsi_base) (-EINVAL) 107 - #ifdef CONFIG_HOTPLUG 108 105 #define iosapic_remove(gsi_base) (-ENODEV) 109 - #endif /* CONFIG_HOTPLUG */ 110 106 #define iosapic_register_intr(gsi,polarity,trigger) (gsi) 111 107 #define iosapic_unregister_intr(irq) do { } while (0) 112 108 #define iosapic_override_isa_irq(isa_irq,gsi,polarity,trigger) do { } while (0)
-4
include/asm-ppc/ibm44x.h
··· 423 423 #define MQ0_CONFIG_SIZE_2G 0x0000c000 424 424 425 425 /* Internal SRAM Controller 440GX/440SP */ 426 - #ifdef CONFIG_440SP 427 - #define DCRN_SRAM0_BASE 0x100 428 - #else /* 440GX */ 429 426 #define DCRN_SRAM0_BASE 0x000 430 - #endif 431 427 432 428 #define DCRN_SRAM0_SB0CR (DCRN_SRAM0_BASE + 0x020) 433 429 #define DCRN_SRAM0_SB1CR (DCRN_SRAM0_BASE + 0x021)
+1 -1
include/asm-ppc/ppc4xx_dma.h
··· 285 285 286 286 #define GET_DMA_POLARITY(chan) (DMAReq_ActiveLow(chan) | DMAAck_ActiveLow(chan) | EOT_ActiveLow(chan)) 287 287 288 - #elif defined(CONFIG_STBXXX_DMA) /* stb03xxx */ 288 + #elif defined(CONFIG_STB03xxx) /* stb03xxx */ 289 289 290 290 #define DMA_PPC4xx_SIZE 4096 291 291
+8 -1
include/asm-ppc64/iSeries/LparMap.h
··· 19 19 #ifndef _LPARMAP_H 20 20 #define _LPARMAP_H 21 21 22 + #ifndef __ASSEMBLY__ 23 + 22 24 #include <asm/types.h> 23 25 24 26 /* ··· 73 71 } xRanges[HvRangesToMap]; 74 72 }; 75 73 76 - extern struct LparMap xLparMap; 74 + extern const struct LparMap xLparMap; 75 + 76 + #endif /* __ASSEMBLY__ */ 77 + 78 + /* the fixed address where the LparMap exists */ 79 + #define LPARMAP_PHYS 0x7000 77 80 78 81 #endif /* _LPARMAP_H */
+7 -1
include/asm-sh/unistd.h
··· 295 295 #define __NR_add_key 285 296 296 #define __NR_request_key 286 297 297 #define __NR_keyctl 287 298 + #define __NR_ioprio_set 288 299 + #define __NR_ioprio_get 289 300 + #define __NR_inotify_init 290 301 + #define __NR_inotify_add_watch 291 302 + #define __NR_inotify_rm_watch 292 298 303 299 - #define NR_syscalls 288 304 + 305 + #define NR_syscalls 293 300 306 301 307 /* user-visible error numbers are in the range -1 - -124: see <asm-sh/errno.h> */ 302 308
+6 -1
include/asm-sh64/unistd.h
··· 338 338 #define __NR_add_key 313 339 339 #define __NR_request_key 314 340 340 #define __NR_keyctl 315 341 + #define __NR_ioprio_set 316 342 + #define __NR_ioprio_get 317 343 + #define __NR_inotify_init 318 344 + #define __NR_inotify_add_watch 319 345 + #define __NR_inotify_rm_watch 320 341 346 342 - #define NR_syscalls 316 347 + #define NR_syscalls 321 343 348 344 349 /* user-visible error numbers are in the range -1 - -125: see <asm-sh64/errno.h> */ 345 350
+5
include/asm-sparc64/thread_info.h
··· 68 68 69 69 struct restart_block restart_block; 70 70 71 + struct pt_regs *kern_una_regs; 72 + unsigned int kern_una_insn; 73 + 71 74 unsigned long fpregs[0] __attribute__ ((aligned(64))); 72 75 }; 73 76 ··· 106 103 #define TI_PCR 0x00000490 107 104 #define TI_CEE_STUFF 0x00000498 108 105 #define TI_RESTART_BLOCK 0x000004a0 106 + #define TI_KUNA_REGS 0x000004c8 107 + #define TI_KUNA_INSN 0x000004d0 109 108 #define TI_FPREGS 0x00000500 110 109 111 110 /* We embed this in the uppermost byte of thread_info->flags */
+2 -2
include/asm-um/page.h
··· 104 104 * casting is the right thing, but 32-bit UML can't have 64-bit virtual 105 105 * addresses 106 106 */ 107 - #define __pa(virt) to_phys((void *) (unsigned long) virt) 108 - #define __va(phys) to_virt((unsigned long) phys) 107 + #define __pa(virt) to_phys((void *) (unsigned long) (virt)) 108 + #define __va(phys) to_virt((unsigned long) (phys)) 109 109 110 110 #define page_to_pfn(page) ((page) - mem_map) 111 111 #define pfn_to_page(pfn) (mem_map + (pfn))
+1 -1
include/asm-x86_64/processor.h
··· 32 32 #define ID_MASK 0x00200000 33 33 34 34 #define desc_empty(desc) \ 35 - (!((desc)->a + (desc)->b)) 35 + (!((desc)->a | (desc)->b)) 36 36 37 37 #define desc_equal(desc1, desc2) \ 38 38 (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
+4 -4
include/linux/fs.h
··· 993 993 int (*rename) (struct inode *, struct dentry *, 994 994 struct inode *, struct dentry *); 995 995 int (*readlink) (struct dentry *, char __user *,int); 996 - int (*follow_link) (struct dentry *, struct nameidata *); 997 - void (*put_link) (struct dentry *, struct nameidata *); 996 + void * (*follow_link) (struct dentry *, struct nameidata *); 997 + void (*put_link) (struct dentry *, struct nameidata *, void *); 998 998 void (*truncate) (struct inode *); 999 999 int (*permission) (struct inode *, int, struct nameidata *); 1000 1000 int (*setattr) (struct dentry *, struct iattr *); ··· 1602 1602 extern int vfs_readlink(struct dentry *, char __user *, int, const char *); 1603 1603 extern int vfs_follow_link(struct nameidata *, const char *); 1604 1604 extern int page_readlink(struct dentry *, char __user *, int); 1605 - extern int page_follow_link_light(struct dentry *, struct nameidata *); 1606 - extern void page_put_link(struct dentry *, struct nameidata *); 1605 + extern void *page_follow_link_light(struct dentry *, struct nameidata *); 1606 + extern void page_put_link(struct dentry *, struct nameidata *, void *); 1607 1607 extern int page_symlink(struct inode *inode, const char *symname, int len); 1608 1608 extern struct inode_operations page_symlink_inode_operations; 1609 1609 extern int generic_readlink(struct dentry *, char __user *, int);
+24 -18
include/linux/nfs_fs.h
··· 112 112 /* 113 113 * Various flags 114 114 */ 115 - unsigned int flags; 115 + unsigned long flags; /* atomic bit ops */ 116 + unsigned long cache_validity; /* bit mask */ 116 117 117 118 /* 118 119 * read_cache_jiffies is when we started read-caching this inode, ··· 175 174 /* Open contexts for shared mmap writes */ 176 175 struct list_head open_files; 177 176 178 - wait_queue_head_t nfs_i_wait; 179 - 180 177 #ifdef CONFIG_NFS_V4 181 178 struct nfs4_cached_acl *nfs4_acl; 182 179 /* NFSv4 state */ ··· 187 188 }; 188 189 189 190 /* 190 - * Legal inode flag values 191 + * Cache validity bit flags 191 192 */ 192 - #define NFS_INO_STALE 0x0001 /* possible stale inode */ 193 - #define NFS_INO_ADVISE_RDPLUS 0x0002 /* advise readdirplus */ 194 - #define NFS_INO_REVALIDATING 0x0004 /* revalidating attrs */ 195 - #define NFS_INO_INVALID_ATTR 0x0008 /* cached attrs are invalid */ 196 - #define NFS_INO_INVALID_DATA 0x0010 /* cached data is invalid */ 197 - #define NFS_INO_INVALID_ATIME 0x0020 /* cached atime is invalid */ 198 - #define NFS_INO_INVALID_ACCESS 0x0040 /* cached access cred invalid */ 199 - #define NFS_INO_INVALID_ACL 0x0080 /* cached acls are invalid */ 200 - #define NFS_INO_REVAL_PAGECACHE 0x1000 /* must revalidate pagecache */ 193 + #define NFS_INO_INVALID_ATTR 0x0001 /* cached attrs are invalid */ 194 + #define NFS_INO_INVALID_DATA 0x0002 /* cached data is invalid */ 195 + #define NFS_INO_INVALID_ATIME 0x0004 /* cached atime is invalid */ 196 + #define NFS_INO_INVALID_ACCESS 0x0008 /* cached access cred invalid */ 197 + #define NFS_INO_INVALID_ACL 0x0010 /* cached acls are invalid */ 198 + #define NFS_INO_REVAL_PAGECACHE 0x0020 /* must revalidate pagecache */ 199 + 200 + /* 201 + * Bit offsets in flags field 202 + */ 203 + #define NFS_INO_REVALIDATING (0) /* revalidating attrs */ 204 + #define NFS_INO_ADVISE_RDPLUS (1) /* advise readdirplus */ 205 + #define NFS_INO_STALE (2) /* possible stale inode */ 201 206 202 207 static inline struct nfs_inode *NFS_I(struct inode *inode) 203 208 { ··· 227 224 #define NFS_ATTRTIMEO_UPDATE(inode) (NFS_I(inode)->attrtimeo_timestamp) 228 225 229 226 #define NFS_FLAGS(inode) (NFS_I(inode)->flags) 230 - #define NFS_REVALIDATING(inode) (NFS_FLAGS(inode) & NFS_INO_REVALIDATING) 231 - #define NFS_STALE(inode) (NFS_FLAGS(inode) & NFS_INO_STALE) 227 + #define NFS_STALE(inode) (test_bit(NFS_INO_STALE, &NFS_FLAGS(inode))) 232 228 233 229 #define NFS_FILEID(inode) (NFS_I(inode)->fileid) 234 230 ··· 238 236 239 237 static inline void NFS_CACHEINV(struct inode *inode) 240 238 { 241 - if (!nfs_caches_unstable(inode)) 242 - NFS_FLAGS(inode) |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS; 239 + if (!nfs_caches_unstable(inode)) { 240 + spin_lock(&inode->i_lock); 241 + NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS; 242 + spin_unlock(&inode->i_lock); 243 + } 243 244 } 244 245 245 246 static inline int nfs_server_capable(struct inode *inode, int cap) ··· 252 247 253 248 static inline int NFS_USE_READDIRPLUS(struct inode *inode) 254 249 { 255 - return NFS_FLAGS(inode) & NFS_INO_ADVISE_RDPLUS; 250 + return test_bit(NFS_INO_ADVISE_RDPLUS, &NFS_FLAGS(inode)); 256 251 } 257 252 258 253 /** ··· 297 292 extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *); 298 293 extern void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping); 299 294 extern int nfs_setattr(struct dentry *, struct iattr *); 295 + extern void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr); 300 296 extern void nfs_begin_attr_update(struct inode *); 301 297 extern void nfs_end_attr_update(struct inode *); 302 298 extern void nfs_begin_data_update(struct inode *);
+2 -1
include/linux/pci.h
··· 556 556 /* keep track of device state */ 557 557 unsigned int is_enabled:1; /* pci_enable_device has been called */ 558 558 unsigned int is_busmaster:1; /* device is busmaster */ 559 - 559 + unsigned int no_msi:1; /* device may not use msi */ 560 + 560 561 u32 saved_config_space[16]; /* config space saved at suspend time */ 561 562 struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */ 562 563 int rom_attr_enabled; /* has display of the rom attribute been enabled? */
+10 -1
include/linux/pci_ids.h
··· 881 881 #define PCI_DEVICE_ID_APPLE_UNI_N_PCI15 0x002e 882 882 #define PCI_DEVICE_ID_APPLE_UNI_N_FW2 0x0030 883 883 #define PCI_DEVICE_ID_APPLE_UNI_N_GMAC2 0x0032 884 - #define PCI_DEVIEC_ID_APPLE_UNI_N_ATA 0x0033 884 + #define PCI_DEVICE_ID_APPLE_UNI_N_ATA 0x0033 885 885 #define PCI_DEVICE_ID_APPLE_UNI_N_AGP2 0x0034 886 886 #define PCI_DEVICE_ID_APPLE_IPID_ATA100 0x003b 887 887 #define PCI_DEVICE_ID_APPLE_KEYLARGO_I 0x003e ··· 1580 1580 #define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211 1581 1581 #define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212 1582 1582 #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213 1583 + #define PCI_DEVICE_ID_SERVERWORKS_HT1000IDE 0x0214 1583 1584 #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217 1584 1585 #define PCI_DEVICE_ID_SERVERWORKS_OSB4USB 0x0220 1585 1586 #define PCI_DEVICE_ID_SERVERWORKS_CSB5USB PCI_DEVICE_ID_SERVERWORKS_OSB4USB ··· 2185 2184 #define PCI_VENDOR_ID_SIBYTE 0x166d 2186 2185 #define PCI_DEVICE_ID_BCM1250_HT 0x0002 2187 2186 2187 + #define PCI_VENDOR_ID_NETCELL 0x169c 2188 + #define PCI_DEVICE_ID_REVOLUTION 0x0044 2189 + 2188 2190 #define PCI_VENDOR_ID_LINKSYS 0x1737 2189 2191 #define PCI_DEVICE_ID_LINKSYS_EG1032 0x1032 2190 2192 #define PCI_DEVICE_ID_LINKSYS_EG1064 0x1064 ··· 2285 2281 #define PCI_VENDOR_ID_INTEL 0x8086 2286 2282 #define PCI_DEVICE_ID_INTEL_EESSC 0x0008 2287 2283 #define PCI_DEVICE_ID_INTEL_21145 0x0039 2284 + #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320 2285 + #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321 2286 + #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329 2287 + #define PCI_DEVICE_ID_INTEL_PXH_1 0x032A 2288 + #define PCI_DEVICE_ID_INTEL_PXHV 0x032C 2288 2289 #define PCI_DEVICE_ID_INTEL_82375 0x0482 2289 2290 #define PCI_DEVICE_ID_INTEL_82424 0x0483 2290 2291 #define PCI_DEVICE_ID_INTEL_82378 0x0484
+1
include/linux/sunrpc/xdr.h
··· 177 177 struct xdr_array2_desc { 178 178 unsigned int elem_size; 179 179 unsigned int array_len; 180 + unsigned int array_maxlen; 180 181 xdr_xcode_elem_t xcode; 181 182 }; 182 183
+16 -2
include/net/ax25.h
··· 139 139 #define AX25_DEF_DS_TIMEOUT (3 * 60 * HZ) /* DAMA timeout 3 minutes */ 140 140 141 141 typedef struct ax25_uid_assoc { 142 - struct ax25_uid_assoc *next; 142 + struct hlist_node uid_node; 143 + atomic_t refcount; 143 144 uid_t uid; 144 145 ax25_address call; 145 146 } ax25_uid_assoc; 147 + 148 + #define ax25_uid_for_each(__ax25, node, list) \ 149 + hlist_for_each_entry(__ax25, node, list, uid_node) 150 + 151 + #define ax25_uid_hold(ax25) \ 152 + atomic_inc(&((ax25)->refcount)) 153 + 154 + static inline void ax25_uid_put(ax25_uid_assoc *assoc) 155 + { 156 + if (atomic_dec_and_test(&assoc->refcount)) { 157 + kfree(assoc); 158 + } 159 + } 146 160 147 161 typedef struct { 148 162 ax25_address calls[AX25_MAX_DIGIS]; ··· 390 376 391 377 /* ax25_uid.c */ 392 378 extern int ax25_uid_policy; 393 - extern ax25_address *ax25_findbyuid(uid_t); 379 + extern ax25_uid_assoc *ax25_findbyuid(uid_t); 394 380 extern int ax25_uid_ioctl(int, struct sockaddr_ax25 *); 395 381 extern struct file_operations ax25_uid_fops; 396 382 extern void ax25_uid_free(void);
+5
include/net/sock.h
··· 384 384 SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */ 385 385 }; 386 386 387 + static inline void sock_copy_flags(struct sock *nsk, struct sock *osk) 388 + { 389 + nsk->sk_flags = osk->sk_flags; 390 + } 391 + 387 392 static inline void sock_set_flag(struct sock *sk, enum sock_flags flag) 388 393 { 389 394 __set_bit(flag, &sk->sk_flags);
+2 -2
kernel/sched.c
··· 3378 3378 */ 3379 3379 int can_nice(const task_t *p, const int nice) 3380 3380 { 3381 - /* convert nice value [19,-20] to rlimit style value [0,39] */ 3382 - int nice_rlim = 19 - nice; 3381 + /* convert nice value [19,-20] to rlimit style value [1,40] */ 3382 + int nice_rlim = 20 - nice; 3383 3383 return (nice_rlim <= p->signal->rlim[RLIMIT_NICE].rlim_cur || 3384 3384 capable(CAP_SYS_NICE)); 3385 3385 }
+1 -1
kernel/signal.c
··· 692 692 { 693 693 struct task_struct *t; 694 694 695 - if (p->flags & SIGNAL_GROUP_EXIT) 695 + if (p->signal->flags & SIGNAL_GROUP_EXIT) 696 696 /* 697 697 * The process is in the middle of dying already. 698 698 */
+1 -1
kernel/timer.c
··· 1023 1023 parent = me->group_leader->real_parent; 1024 1024 for (;;) { 1025 1025 pid = parent->tgid; 1026 - #ifdef CONFIG_SMP 1026 + #if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) 1027 1027 { 1028 1028 struct task_struct *old = parent; 1029 1029
+1 -1
lib/zlib_inflate/inftrees.c
··· 141 141 { 142 142 *t = NULL; 143 143 *m = 0; 144 - return Z_DATA_ERROR; 144 + return Z_OK; 145 145 } 146 146 147 147
+6 -11
mm/shmem.c
··· 1773 1773 return 0; 1774 1774 } 1775 1775 1776 - static int shmem_follow_link_inline(struct dentry *dentry, struct nameidata *nd) 1776 + static void *shmem_follow_link_inline(struct dentry *dentry, struct nameidata *nd) 1777 1777 { 1778 1778 nd_set_link(nd, (char *)SHMEM_I(dentry->d_inode)); 1779 - return 0; 1779 + return NULL; 1780 1780 } 1781 1781 1782 - static int shmem_follow_link(struct dentry *dentry, struct nameidata *nd) 1782 + static void *shmem_follow_link(struct dentry *dentry, struct nameidata *nd) 1783 1783 { 1784 1784 struct page *page = NULL; 1785 1785 int res = shmem_getpage(dentry->d_inode, 0, &page, SGP_READ, NULL); 1786 1786 nd_set_link(nd, res ? ERR_PTR(res) : kmap(page)); 1787 - return 0; 1787 + return page; 1788 1788 } 1789 1789 1790 - static void shmem_put_link(struct dentry *dentry, struct nameidata *nd) 1790 + static void shmem_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) 1791 1791 { 1792 1792 if (!IS_ERR(nd_get_link(nd))) { 1793 - struct page *page; 1794 - 1795 - page = find_get_page(dentry->d_inode->i_mapping, 0); 1796 - if (!page) 1797 - BUG(); 1793 + struct page *page = cookie; 1798 1794 kunmap(page); 1799 1795 mark_page_accessed(page); 1800 - page_cache_release(page); 1801 1796 page_cache_release(page); 1802 1797 } 1803 1798 }
+12 -10
net/802/tr.c
··· 251 251 unsigned int hash; 252 252 struct rif_cache *entry; 253 253 unsigned char *olddata; 254 + unsigned long flags; 254 255 static const unsigned char mcast_func_addr[] 255 256 = {0xC0,0x00,0x00,0x04,0x00,0x00}; 256 257 257 - spin_lock_bh(&rif_lock); 258 + spin_lock_irqsave(&rif_lock, flags); 258 259 259 260 /* 260 261 * Broadcasts are single route as stated in RFC 1042 ··· 324 323 else 325 324 slack = 18 - ((ntohs(trh->rcf) & TR_RCF_LEN_MASK)>>8); 326 325 olddata = skb->data; 327 - spin_unlock_bh(&rif_lock); 326 + spin_unlock_irqrestore(&rif_lock, flags); 328 327 329 328 skb_pull(skb, slack); 330 329 memmove(skb->data, olddata, sizeof(struct trh_hdr) - slack); ··· 338 337 static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev) 339 338 { 340 339 unsigned int hash, rii_p = 0; 340 + unsigned long flags; 341 341 struct rif_cache *entry; 342 342 343 343 344 - spin_lock_bh(&rif_lock); 344 + spin_lock_irqsave(&rif_lock, flags); 345 345 346 346 /* 347 347 * Firstly see if the entry exists ··· 380 378 if(!entry) 381 379 { 382 380 printk(KERN_DEBUG "tr.c: Couldn't malloc rif cache entry !\n"); 383 - spin_unlock_bh(&rif_lock); 381 + spin_unlock_irqrestore(&rif_lock, flags); 384 382 return; 385 383 } 386 384 ··· 422 420 } 423 421 entry->last_used=jiffies; 424 422 } 425 - spin_unlock_bh(&rif_lock); 423 + spin_unlock_irqrestore(&rif_lock, flags); 426 424 } 427 425 428 426 /* ··· 432 430 static void rif_check_expire(unsigned long dummy) 433 431 { 434 432 int i; 435 - unsigned long next_interval = jiffies + sysctl_tr_rif_timeout/2; 433 + unsigned long flags, next_interval = jiffies + sysctl_tr_rif_timeout/2; 436 434 437 - spin_lock_bh(&rif_lock); 435 + spin_lock_irqsave(&rif_lock, flags); 438 436 439 437 for(i =0; i < RIF_TABLE_SIZE; i++) { 440 438 struct rif_cache *entry, **pentry; ··· 456 454 } 457 455 } 458 456 459 - spin_unlock_bh(&rif_lock); 457 + spin_unlock_irqrestore(&rif_lock, flags); 460 458 461 459 mod_timer(&rif_timer, next_interval); 462 460 ··· 487 485 488 486 static void *rif_seq_start(struct seq_file *seq, loff_t *pos) 489 487 { 490 - spin_lock_bh(&rif_lock); 488 + spin_lock_irq(&rif_lock); 491 489 492 490 return *pos ? rif_get_idx(*pos - 1) : SEQ_START_TOKEN; 493 491 } ··· 518 516 519 517 static void rif_seq_stop(struct seq_file *seq, void *v) 520 518 { 521 - spin_unlock_bh(&rif_lock); 519 + spin_unlock_irq(&rif_lock); 522 520 } 523 521 524 522 static int rif_seq_show(struct seq_file *seq, void *v)
+13 -14
net/ax25/af_ax25.c
··· 875 875 sk->sk_sndbuf = osk->sk_sndbuf; 876 876 sk->sk_state = TCP_ESTABLISHED; 877 877 sk->sk_sleep = osk->sk_sleep; 878 - 879 - if (sock_flag(osk, SOCK_DBG)) 880 - sock_set_flag(sk, SOCK_DBG); 881 - 882 - if (sock_flag(osk, SOCK_ZAPPED)) 883 - sock_set_flag(sk, SOCK_ZAPPED); 878 + sock_copy_flags(sk, osk); 884 879 885 880 oax25 = ax25_sk(osk); 886 881 ··· 1002 1007 struct sock *sk = sock->sk; 1003 1008 struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr; 1004 1009 ax25_dev *ax25_dev = NULL; 1005 - ax25_address *call; 1010 + ax25_uid_assoc *user; 1011 + ax25_address call; 1006 1012 ax25_cb *ax25; 1007 1013 int err = 0; 1008 1014 ··· 1022 1026 if (addr->fsa_ax25.sax25_family != AF_AX25) 1023 1027 return -EINVAL; 1024 1028 1025 - call = ax25_findbyuid(current->euid); 1026 - if (call == NULL && ax25_uid_policy && !capable(CAP_NET_ADMIN)) { 1027 - return -EACCES; 1029 + user = ax25_findbyuid(current->euid); 1030 + if (user) { 1031 + call = user->call; 1032 + ax25_uid_put(user); 1033 + } else { 1034 + if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) 1035 + return -EACCES; 1036 + 1037 + call = addr->fsa_ax25.sax25_call; 1028 1038 } 1029 1039 1030 1040 lock_sock(sk); ··· 1041 1039 goto out; 1042 1040 } 1043 1041 1044 - if (call == NULL) 1045 - ax25->source_addr = addr->fsa_ax25.sax25_call; 1046 - else 1047 - ax25->source_addr = *call; 1042 + ax25->source_addr = call; 1048 1043 1049 1044 /* 1050 1045 * User already set interface with SO_BINDTODEVICE
+7 -5
net/ax25/ax25_route.c
··· 422 422 */ 423 423 int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr) 424 424 { 425 + ax25_uid_assoc *user; 425 426 ax25_route *ax25_rt; 426 - ax25_address *call; 427 427 int err; 428 428 429 429 if ((ax25_rt = ax25_get_route(addr, NULL)) == NULL) ··· 434 434 goto put; 435 435 } 436 436 437 - if ((call = ax25_findbyuid(current->euid)) == NULL) { 437 + user = ax25_findbyuid(current->euid); 438 + if (user) { 439 + ax25->source_addr = user->call; 440 + ax25_uid_put(user); 441 + } else { 438 442 if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) { 439 443 err = -EPERM; 440 444 goto put; 441 445 } 442 - call = (ax25_address *)ax25->ax25_dev->dev->dev_addr; 446 + ax25->source_addr = *(ax25_address *)ax25->ax25_dev->dev->dev_addr; 443 447 } 444 - 445 - ax25->source_addr = *call; 446 448 447 449 if (ax25_rt->digipeat != NULL) { 448 450 if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
+36 -47
net/ax25/ax25_uid.c
··· 28 28 #include <linux/fcntl.h> 29 29 #include <linux/mm.h> 30 30 #include <linux/interrupt.h> 31 + #include <linux/list.h> 31 32 #include <linux/notifier.h> 32 33 #include <linux/proc_fs.h> 33 34 #include <linux/seq_file.h> ··· 42 41 * Callsign/UID mapper. This is in kernel space for security on multi-amateur machines. 43 42 */ 44 43 45 - static ax25_uid_assoc *ax25_uid_list; 44 + HLIST_HEAD(ax25_uid_list); 46 45 static DEFINE_RWLOCK(ax25_uid_lock); 47 46 48 47 int ax25_uid_policy = 0; 49 48 50 - ax25_address *ax25_findbyuid(uid_t uid) 49 + ax25_uid_assoc *ax25_findbyuid(uid_t uid) 51 50 { 52 - ax25_uid_assoc *ax25_uid; 53 - ax25_address *res = NULL; 51 + ax25_uid_assoc *ax25_uid, *res = NULL; 52 + struct hlist_node *node; 54 53 55 54 read_lock(&ax25_uid_lock); 56 - for (ax25_uid = ax25_uid_list; ax25_uid != NULL; ax25_uid = ax25_uid->next) { 55 + ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 57 56 if (ax25_uid->uid == uid) { 58 - res = &ax25_uid->call; 57 + ax25_uid_hold(ax25_uid); 58 + res = ax25_uid; 59 59 break; 60 60 } 61 61 } 62 62 read_unlock(&ax25_uid_lock); 63 63 64 - return NULL; 64 + return res; 65 65 } 66 66 67 67 int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) 68 68 { 69 - ax25_uid_assoc *s, *ax25_uid; 69 + ax25_uid_assoc *ax25_uid; 70 + struct hlist_node *node; 71 + ax25_uid_assoc *user; 70 72 unsigned long res; 71 73 72 74 switch (cmd) { 73 75 case SIOCAX25GETUID: 74 76 res = -ENOENT; 75 77 read_lock(&ax25_uid_lock); 76 - for (ax25_uid = ax25_uid_list; ax25_uid != NULL; ax25_uid = ax25_uid->next) { 78 + ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 77 79 if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) { 78 80 res = ax25_uid->uid; 79 81 break; ··· 89 85 case SIOCAX25ADDUID: 90 86 if (!capable(CAP_NET_ADMIN)) 91 87 return -EPERM; 92 - if (ax25_findbyuid(sax->sax25_uid)) 88 + user = ax25_findbyuid(sax->sax25_uid); 89 + if (user) { 90 + ax25_uid_put(user); 93 91 return -EEXIST; 92 + } 94 93 if (sax->sax25_uid == 0) 95 94 return -EINVAL; 96 95 if ((ax25_uid = kmalloc(sizeof(*ax25_uid), GFP_KERNEL)) == NULL) 97 96 return -ENOMEM; 98 97 98 + atomic_set(&ax25_uid->refcount, 1); 99 99 ax25_uid->uid = sax->sax25_uid; 100 100 ax25_uid->call = sax->sax25_call; 101 101 102 102 write_lock(&ax25_uid_lock); 103 - ax25_uid->next = ax25_uid_list; 104 - ax25_uid_list = ax25_uid; 103 + hlist_add_head(&ax25_uid->uid_node, &ax25_uid_list); 105 104 write_unlock(&ax25_uid_lock); 106 105 107 106 return 0; ··· 113 106 if (!capable(CAP_NET_ADMIN)) 114 107 return -EPERM; 115 108 109 + ax25_uid = NULL; 116 110 write_lock(&ax25_uid_lock); 117 - for (ax25_uid = ax25_uid_list; ax25_uid != NULL; ax25_uid = ax25_uid->next) { 118 - if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) { 111 + ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 112 + if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) 119 113 break; 120 - } 121 114 } 122 115 if (ax25_uid == NULL) { 123 116 write_unlock(&ax25_uid_lock); 124 117 return -ENOENT; 125 118 } 126 - if ((s = ax25_uid_list) == ax25_uid) { 127 - ax25_uid_list = s->next; 128 - write_unlock(&ax25_uid_lock); 129 - kfree(ax25_uid); 130 - return 0; 131 - } 132 - while (s != NULL && s->next != NULL) { 133 - if (s->next == ax25_uid) { 134 - s->next = ax25_uid->next; 135 - write_unlock(&ax25_uid_lock); 136 - kfree(ax25_uid); 137 - return 0; 138 - } 139 - s = s->next; 140 - } 119 + hlist_del_init(&ax25_uid->uid_node); 120 + ax25_uid_put(ax25_uid); 141 121 write_unlock(&ax25_uid_lock); 142 122 143 - return -ENOENT; 123 + return 0; 144 124 145 125 default: 146 126 return -EINVAL; ··· 141 147 static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos) 142 148 { 143 149 struct ax25_uid_assoc *pt; 144 - int i = 1; 150 + struct hlist_node *node; 151 + int i = 0; 145 152 146 153 read_lock(&ax25_uid_lock); 147 - if (*pos == 0) 148 - return SEQ_START_TOKEN; 149 - 150 - for (pt = ax25_uid_list; pt != NULL; pt = pt->next) { 154 + ax25_uid_for_each(pt, node, &ax25_uid_list) { 151 155 if (i == *pos) 152 156 return pt; 153 157 ++i; ··· 156 164 static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos) 157 165 { 158 166 ++*pos; 159 - return (v == SEQ_START_TOKEN) ? ax25_uid_list : 160 - ((struct ax25_uid_assoc *) v)->next; 167 + 168 + return hlist_entry(((ax25_uid_assoc *)v)->uid_node.next, 169 + ax25_uid_assoc, uid_node); 161 170 } 162 171 163 172 static void ax25_uid_seq_stop(struct seq_file *seq, void *v) ··· 172 179 seq_printf(seq, "Policy: %d\n", ax25_uid_policy); 173 180 else { 174 181 struct ax25_uid_assoc *pt = v; 175 - 176 182 177 183 seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(&pt->call)); 178 184 } ··· 205 213 */ 206 214 void __exit ax25_uid_free(void) 207 215 { 208 - ax25_uid_assoc *s, *ax25_uid; 216 + ax25_uid_assoc *ax25_uid; 217 + struct hlist_node *node; 209 218 210 219 write_lock(&ax25_uid_lock); 211 - ax25_uid = ax25_uid_list; 212 - while (ax25_uid != NULL) { 213 - s = ax25_uid; 214 - ax25_uid = ax25_uid->next; 215 - 216 - kfree(s); 220 + ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { 221 + hlist_del_init(&ax25_uid->uid_node); 222 + ax25_uid_put(ax25_uid); 217 223 } 218 - ax25_uid_list = NULL; 219 224 write_unlock(&ax25_uid_lock); 220 225 }
+1 -1
net/decnet/dn_neigh.c
··· 148 148 149 149 __neigh_parms_put(neigh->parms); 150 150 neigh->parms = neigh_parms_clone(parms); 151 - rcu_read_unlock(); 152 151 153 152 if (dn_db->use_long) 154 153 neigh->ops = &dn_long_ops; 155 154 else 156 155 neigh->ops = &dn_short_ops; 156 + rcu_read_unlock(); 157 157 158 158 if (dn->flags & DN_NDFLAG_P3) 159 159 neigh->ops = &dn_phase3_ops;
+6 -6
net/ipv4/icmp.c
··· 349 349 { 350 350 struct sk_buff *skb; 351 351 352 - ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param, 353 - icmp_param->data_len+icmp_param->head_len, 354 - icmp_param->head_len, 355 - ipc, rt, MSG_DONTWAIT); 356 - 357 - if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) { 352 + if (ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param, 353 + icmp_param->data_len+icmp_param->head_len, 354 + icmp_param->head_len, 355 + ipc, rt, MSG_DONTWAIT) < 0) 356 + ip_flush_pending_frames(icmp_socket->sk); 357 + else if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) { 358 358 struct icmphdr *icmph = skb->h.icmph; 359 359 unsigned int csum = 0; 360 360 struct sk_buff *skb1;
+7 -4
net/ipv4/inetpeer.c
··· 450 450 /* Trigger the timer after inet_peer_gc_mintime .. inet_peer_gc_maxtime 451 451 * interval depending on the total number of entries (more entries, 452 452 * less interval). */ 453 - peer_periodic_timer.expires = jiffies 454 - + inet_peer_gc_maxtime 455 - - (inet_peer_gc_maxtime - inet_peer_gc_mintime) / HZ * 456 - peer_total / inet_peer_threshold * HZ; 453 + if (peer_total >= inet_peer_threshold) 454 + peer_periodic_timer.expires = jiffies + inet_peer_gc_mintime; 455 + else 456 + peer_periodic_timer.expires = jiffies 457 + + inet_peer_gc_maxtime 458 + - (inet_peer_gc_maxtime - inet_peer_gc_mintime) / HZ * 459 + peer_total / inet_peer_threshold * HZ; 457 460 add_timer(&peer_periodic_timer); 458 461 } 459 462
+1 -1
net/ipv4/ipcomp.c
··· 358 358 int cpu; 359 359 360 360 /* This can be any valid CPU ID so we don't need locking. */ 361 - cpu = smp_processor_id(); 361 + cpu = raw_smp_processor_id(); 362 362 363 363 list_for_each_entry(pos, &ipcomp_tfms_list, list) { 364 364 struct crypto_tfm *tfm;
+7
net/ipv4/netfilter/ip_queue.c
··· 214 214 break; 215 215 216 216 case IPQ_COPY_PACKET: 217 + if (entry->skb->ip_summed == CHECKSUM_HW && 218 + (*errp = skb_checksum_help(entry->skb, 219 + entry->info->outdev == NULL))) { 220 + read_unlock_bh(&queue_lock); 221 + return NULL; 222 + } 217 223 if (copy_range == 0 || copy_range > entry->skb->len) 218 224 data_len = entry->skb->len; 219 225 else ··· 391 385 if (!skb_ip_make_writable(&e->skb, v->data_len)) 392 386 return -ENOMEM; 393 387 memcpy(e->skb->data, v->payload, v->data_len); 388 + e->skb->ip_summed = CHECKSUM_NONE; 394 389 e->skb->nfcache |= NFC_ALTERED; 395 390 396 391 /*
+9 -8
net/ipv4/netfilter/ipt_ECN.c
··· 61 61 if (!tcph) 62 62 return 0; 63 63 64 - if (!(einfo->operation & IPT_ECN_OP_SET_ECE 65 - || tcph->ece == einfo->proto.tcp.ece) 66 - && (!(einfo->operation & IPT_ECN_OP_SET_CWR 67 - || tcph->cwr == einfo->proto.tcp.cwr))) 64 + if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) || 65 + tcph->ece == einfo->proto.tcp.ece) && 66 + ((!(einfo->operation & IPT_ECN_OP_SET_CWR) || 67 + tcph->cwr == einfo->proto.tcp.cwr))) 68 68 return 1; 69 69 70 70 if (!skb_ip_make_writable(pskb, (*pskb)->nh.iph->ihl*4+sizeof(*tcph))) 71 71 return 0; 72 72 tcph = (void *)(*pskb)->nh.iph + (*pskb)->nh.iph->ihl*4; 73 + 74 + if ((*pskb)->ip_summed == CHECKSUM_HW && 75 + skb_checksum_help(*pskb, inward)) 76 + return 0; 73 77 74 78 diffs[0] = ((u_int16_t *)tcph)[6]; 75 79 if (einfo->operation & IPT_ECN_OP_SET_ECE) ··· 83 79 diffs[1] = ((u_int16_t *)tcph)[6]; 84 80 diffs[0] = diffs[0] ^ 0xFFFF; 85 81 86 - if ((*pskb)->ip_summed != CHECKSUM_HW) 82 + if ((*pskb)->ip_summed != CHECKSUM_UNNECESSARY) 87 83 tcph->check = csum_fold(csum_partial((char *)diffs, 88 84 sizeof(diffs), 89 85 tcph->check^0xFFFF)); 90 - else 91 - if (skb_checksum_help(*pskb, inward)) 92 - return 0; 93 86 (*pskb)->nfcache |= NFC_ALTERED; 94 87 return 1; 95 88 }
+4 -3
net/ipv4/netfilter/ipt_TCPMSS.c
··· 61 61 if (!skb_ip_make_writable(pskb, (*pskb)->len)) 62 62 return NF_DROP; 63 63 64 + if ((*pskb)->ip_summed == CHECKSUM_HW && 65 + skb_checksum_help(*pskb, out == NULL)) 66 + return NF_DROP; 67 + 64 68 iph = (*pskb)->nh.iph; 65 69 tcplen = (*pskb)->len - iph->ihl*4; 66 70 ··· 190 186 newmss); 191 187 192 188 retmodified: 193 - /* We never hw checksum SYN packets. */ 194 - BUG_ON((*pskb)->ip_summed == CHECKSUM_HW); 195 - 196 189 (*pskb)->nfcache |= NFC_UNKNOWN | NFC_ALTERED; 197 190 return IPT_CONTINUE; 198 191 }
+1 -1
net/ipv4/tcp.c
··· 584 584 sk_charge_skb(sk, skb); 585 585 if (!sk->sk_send_head) 586 586 sk->sk_send_head = skb; 587 - else if (tp->nonagle&TCP_NAGLE_PUSH) 587 + if (tp->nonagle & TCP_NAGLE_PUSH) 588 588 tp->nonagle &= ~TCP_NAGLE_PUSH; 589 589 } 590 590
+7 -2
net/ipv4/tcp_ipv4.c
··· 242 242 tcp_port_rover = rover; 243 243 spin_unlock(&tcp_portalloc_lock); 244 244 245 - /* Exhausted local port range during search? */ 245 + /* Exhausted local port range during search? It is not 246 + * possible for us to be holding one of the bind hash 247 + * locks if this test triggers, because if 'remaining' 248 + * drops to zero, we broke out of the do/while loop at 249 + * the top level, not from the 'break;' statement. 250 + */ 246 251 ret = 1; 247 - if (remaining <= 0) 252 + if (unlikely(remaining <= 0)) 248 253 goto fail; 249 254 250 255 /* OK, here is the one we will use. HEAD is
+20 -23
net/ipv4/tcp_output.c
··· 861 861 u16 flags; 862 862 863 863 /* All of a TSO frame must be composed of paged data. */ 864 - BUG_ON(skb->len != skb->data_len); 864 + if (skb->len != skb->data_len) 865 + return tcp_fragment(sk, skb, len, mss_now); 865 866 866 867 buff = sk_stream_alloc_pskb(sk, 0, 0, GFP_ATOMIC); 867 868 if (unlikely(buff == NULL)) ··· 925 924 926 925 limit = min(send_win, cong_win); 927 926 928 - /* If sk_send_head can be sent fully now, just do it. */ 929 - if (skb->len <= limit) 930 - return 0; 931 - 932 927 if (sysctl_tcp_tso_win_divisor) { 933 928 u32 chunk = min(tp->snd_wnd, tp->snd_cwnd * tp->mss_cache); 934 929 ··· 971 974 972 975 sent_pkts = 0; 973 976 while ((skb = sk->sk_send_head)) { 977 + unsigned int limit; 978 + 974 979 tso_segs = tcp_init_tso_segs(sk, skb, mss_now); 975 980 BUG_ON(!tso_segs); 976 981 ··· 993 994 break; 994 995 } 995 996 997 + limit = mss_now; 996 998 if (tso_segs > 1) { 997 - u32 limit = tcp_window_allows(tp, skb, 998 - mss_now, cwnd_quota); 999 + limit = tcp_window_allows(tp, skb, 1000 + mss_now, cwnd_quota); 999 1001 1000 1002 if (skb->len < limit) { 1001 1003 unsigned int trim = skb->len % mss_now; ··· 1004 1004 if (trim) 1005 1005 limit = skb->len - trim; 1006 1006 } 1007 - if (skb->len > limit) { 1008 - if (tso_fragment(sk, skb, limit, mss_now)) 1009 - break; 1010 - } 1011 - } else if (unlikely(skb->len > mss_now)) { 1012 - if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now))) 1013 - break; 1014 1007 } 1008 + 1009 + if (skb->len > limit && 1010 + unlikely(tso_fragment(sk, skb, limit, mss_now))) 1011 + break; 1015 1012 1016 1013 TCP_SKB_CB(skb)->when = tcp_time_stamp; 1017 1014 ··· 1061 1064 cwnd_quota = tcp_snd_test(sk, skb, mss_now, TCP_NAGLE_PUSH); 1062 1065 1063 1066 if (likely(cwnd_quota)) { 1067 + unsigned int limit; 1068 + 1064 1069 BUG_ON(!tso_segs); 1065 1070 1071 + limit = mss_now; 1066 1072 if (tso_segs > 1) { 1067 - u32 limit = tcp_window_allows(tp, skb, 1068 - mss_now, cwnd_quota); 1073 + limit = tcp_window_allows(tp, skb, 1074 + mss_now, cwnd_quota); 1069 1075 1070 1076 if (skb->len < limit) { 1071 1077 unsigned int trim = skb->len % mss_now; ··· 1076 1076 if (trim) 1077 1077 limit = skb->len - trim; 1078 1078 } 1079 - if (skb->len > limit) { 1080 - if (unlikely(tso_fragment(sk, skb, limit, mss_now))) 1081 - return; 1082 - } 1083 - } else if (unlikely(skb->len > mss_now)) { 1084 - if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now))) 1085 - return; 1086 1079 } 1080 + 1081 + if (skb->len > limit && 1082 + unlikely(tso_fragment(sk, skb, limit, mss_now))) 1083 + return; 1087 1084 1088 1085 /* Send it out now. */ 1089 1086 TCP_SKB_CB(skb)->when = tcp_time_stamp;
+5 -4
net/ipv6/ip6_input.c
··· 198 198 if (!raw_sk) { 199 199 if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { 200 200 IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS); 201 - icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff); 201 + icmpv6_send(skb, ICMPV6_PARAMPROB, 202 + ICMPV6_UNK_NEXTHDR, nhoff, 203 + skb->dev); 202 204 } 203 - } else { 205 + } else 204 206 IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); 205 - kfree_skb(skb); 206 - } 207 + kfree_skb(skb); 207 208 } 208 209 rcu_read_unlock(); 209 210 return 0;
+1 -1
net/ipv6/ipcomp6.c
··· 354 354 int cpu; 355 355 356 356 /* This can be any valid CPU ID so we don't need locking. */ 357 - cpu = smp_processor_id(); 357 + cpu = raw_smp_processor_id(); 358 358 359 359 list_for_each_entry(pos, &ipcomp6_tfms_list, list) { 360 360 struct crypto_tfm *tfm;
+7
net/ipv6/netfilter/ip6_queue.c
··· 211 211 break; 212 212 213 213 case IPQ_COPY_PACKET: 214 + if (entry->skb->ip_summed == CHECKSUM_HW && 215 + (*errp = skb_checksum_help(entry->skb, 216 + entry->info->outdev == NULL))) { 217 + read_unlock_bh(&queue_lock); 218 + return NULL; 219 + } 214 220 if (copy_range == 0 || copy_range > entry->skb->len) 215 221 data_len = entry->skb->len; 216 222 else ··· 387 381 if (!skb_ip_make_writable(&e->skb, v->data_len)) 388 382 return -ENOMEM; 389 383 memcpy(e->skb->data, v->payload, v->data_len); 384 + e->skb->ip_summed = CHECKSUM_NONE; 390 385 e->skb->nfcache |= NFC_ALTERED; 391 386 392 387 /*
+2
net/ipv6/raw.c
··· 328 328 329 329 if (skb->ip_summed != CHECKSUM_UNNECESSARY) { 330 330 if (skb->ip_summed == CHECKSUM_HW) { 331 + skb_postpull_rcsum(skb, skb->nh.raw, 332 + skb->h.raw - skb->nh.raw); 331 333 skb->ip_summed = CHECKSUM_UNNECESSARY; 332 334 if (csum_ipv6_magic(&skb->nh.ipv6h->saddr, 333 335 &skb->nh.ipv6h->daddr,
+7 -2
net/ipv6/tcp_ipv6.c
··· 158 158 tcp_port_rover = rover; 159 159 spin_unlock(&tcp_portalloc_lock); 160 160 161 - /* Exhausted local port range during search? */ 161 + /* Exhausted local port range during search? It is not 162 + * possible for us to be holding one of the bind hash 163 + * locks if this test triggers, because if 'remaining' 164 + * drops to zero, we broke out of the do/while loop at 165 + * the top level, not from the 'break;' statement. 166 + */ 162 167 ret = 1; 163 - if (remaining <= 0) 168 + if (unlikely(remaining <= 0)) 164 169 goto fail; 165 170 166 171 /* OK, here is the one we will use. */
+17 -14
net/netrom/af_netrom.c
··· 459 459 sk->sk_sndbuf = osk->sk_sndbuf; 460 460 sk->sk_state = TCP_ESTABLISHED; 461 461 sk->sk_sleep = osk->sk_sleep; 462 - 463 - if (sock_flag(osk, SOCK_ZAPPED)) 464 - sock_set_flag(sk, SOCK_ZAPPED); 465 - 466 - if (sock_flag(osk, SOCK_DBG)) 467 - sock_set_flag(sk, SOCK_DBG); 462 + sock_copy_flags(sk, osk); 468 463 469 464 skb_queue_head_init(&nr->ack_queue); 470 465 skb_queue_head_init(&nr->reseq_queue); ··· 536 541 struct nr_sock *nr = nr_sk(sk); 537 542 struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr; 538 543 struct net_device *dev; 539 - ax25_address *user, *source; 544 + ax25_uid_assoc *user; 545 + ax25_address *source; 540 546 541 547 lock_sock(sk); 542 548 if (!sock_flag(sk, SOCK_ZAPPED)) { ··· 576 580 } else { 577 581 source = &addr->fsa_ax25.sax25_call; 578 582 579 - if ((user = ax25_findbyuid(current->euid)) == NULL) { 583 + user = ax25_findbyuid(current->euid); 584 + if (user) { 585 + nr->user_addr = user->call; 586 + ax25_uid_put(user); 587 + } else { 580 588 if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) { 581 589 release_sock(sk); 582 590 dev_put(dev); 583 591 return -EPERM; 584 592 } 585 - user = source; 593 + nr->user_addr = *source; 586 594 } 587 595 588 - nr->user_addr = *user; 589 596 nr->source_addr = *source; 590 597 } 591 598 ··· 608 609 struct sock *sk = sock->sk; 609 610 struct nr_sock *nr = nr_sk(sk); 610 611 struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr; 611 - ax25_address *user, *source = NULL; 612 + ax25_address *source = NULL; 613 + ax25_uid_assoc *user; 612 614 struct net_device *dev; 613 615 614 616 lock_sock(sk); ··· 650 650 } 651 651 source = (ax25_address *)dev->dev_addr; 652 652 653 - if ((user = ax25_findbyuid(current->euid)) == NULL) { 653 + user = ax25_findbyuid(current->euid); 654 + if (user) { 655 + nr->user_addr = user->call; 656 + ax25_uid_put(user); 657 + } else { 654 658 if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) { 655 659 dev_put(dev); 656 660 release_sock(sk); 657 661 return -EPERM; 658 662 } 659 - user = source; 663 + nr->user_addr = *source; 660 664 } 661 665 662 - nr->user_addr = *user; 663 666 nr->source_addr = *source; 664 667 nr->device = dev; 665 668
+14 -13
net/rose/af_rose.c
··· 556 556 sk->sk_sndbuf = osk->sk_sndbuf; 557 557 sk->sk_state = TCP_ESTABLISHED; 558 558 sk->sk_sleep = osk->sk_sleep; 559 - 560 - if (sock_flag(osk, SOCK_ZAPPED)) 561 - sock_set_flag(sk, SOCK_ZAPPED); 562 - 563 - if (sock_flag(osk, SOCK_DBG)) 564 - sock_set_flag(sk, SOCK_DBG); 559 + sock_copy_flags(sk, osk); 565 560 566 561 init_timer(&rose->timer); 567 562 init_timer(&rose->idletimer); ··· 626 631 struct rose_sock *rose = rose_sk(sk); 627 632 struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr; 628 633 struct net_device *dev; 629 - ax25_address *user, *source; 634 + ax25_address *source; 635 + ax25_uid_assoc *user; 630 636 int n; 631 637 632 638 if (!sock_flag(sk, SOCK_ZAPPED)) ··· 652 656 653 657 source = &addr->srose_call; 654 658 655 - if ((user = ax25_findbyuid(current->euid)) == NULL) { 659 + user = ax25_findbyuid(current->euid); 660 + if (user) { 661 + rose->source_call = user->call; 662 + ax25_uid_put(user); 663 + } else { 656 664 if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) 657 665 return -EACCES; 658 - user = source; 666 + rose->source_call = *source; 659 667 } 660 668 661 669 rose->source_addr = addr->srose_addr; 662 - rose->source_call = *user; 663 670 rose->device = dev; 664 671 rose->source_ndigis = addr->srose_ndigis; 665 672 ··· 689 690 struct rose_sock *rose = rose_sk(sk); 690 691 struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr; 691 692 unsigned char cause, diagnostic; 692 - ax25_address *user; 693 693 struct net_device *dev; 694 + ax25_uid_assoc *user; 694 695 int n; 695 696 696 697 if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) { ··· 740 741 if ((dev = rose_dev_first()) == NULL) 741 742 return -ENETUNREACH; 742 743 743 - if ((user = ax25_findbyuid(current->euid)) == NULL) 744 + user = ax25_findbyuid(current->euid); 745 + if (!user) 744 746 return -EINVAL; 745 747 746 748 memcpy(&rose->source_addr, dev->dev_addr, ROSE_ADDR_LEN); 747 - rose->source_call = *user; 749 + rose->source_call = user->call; 748 750 rose->device = dev; 751 + ax25_uid_put(user); 749 752 750 753 rose_insert_socket(sk); /* Finish the bind */ 751 754 }
+4 -2
net/rose/rose_route.c
··· 994 994 * 1. The frame isn't for us, 995 995 * 2. It isn't "owned" by any existing route. 996 996 */ 997 - if (frametype != ROSE_CALL_REQUEST) /* XXX */ 998 - return 0; 997 + if (frametype != ROSE_CALL_REQUEST) { /* XXX */ 998 + ret = 0; 999 + goto out; 1000 + } 999 1001 1000 1002 len = (((skb->data[3] >> 4) & 0x0F) + 1) / 2; 1001 1003 len += (((skb->data[3] >> 0) & 0x0F) + 1) / 2;
+1
net/sched/sch_generic.c
··· 438 438 if (!ops->init || ops->init(sch, NULL) == 0) 439 439 return sch; 440 440 441 + qdisc_destroy(sch); 441 442 errout: 442 443 return NULL; 443 444 }
+1
net/sctp/proc.c
··· 57 57 SNMP_MIB_ITEM("SctpReasmUsrMsgs", SCTP_MIB_REASMUSRMSGS), 58 58 SNMP_MIB_ITEM("SctpOutSCTPPacks", SCTP_MIB_OUTSCTPPACKS), 59 59 SNMP_MIB_ITEM("SctpInSCTPPacks", SCTP_MIB_INSCTPPACKS), 60 + SNMP_MIB_SENTINEL 60 61 }; 61 62 62 63 /* Return the current value of a particular entry in the mib by adding its
-2
net/sunrpc/auth_gss/gss_krb5_crypto.c
··· 185 185 sg->page = body->pages[i]; 186 186 sg->offset = offset; 187 187 sg->length = thislen; 188 - kmap(sg->page); /* XXX kmap_atomic? */ 189 188 crypto_digest_update(tfm, sg, 1); 190 - kunmap(sg->page); 191 189 len -= thislen; 192 190 i++; 193 191 offset = 0;
+1
net/sunrpc/xdr.c
··· 993 993 return -EINVAL; 994 994 } else { 995 995 if (xdr_decode_word(buf, base, &desc->array_len) != 0 || 996 + desc->array_len > desc->array_maxlen || 996 997 (unsigned long) base + 4 + desc->array_len * 997 998 desc->elem_size > buf->len) 998 999 return -EINVAL;
+7 -2
scripts/mod/modpost.c
··· 359 359 /* ignore __this_module, it will be resolved shortly */ 360 360 if (strcmp(symname, MODULE_SYMBOL_PREFIX "__this_module") == 0) 361 361 break; 362 - #ifdef STT_REGISTER 362 + /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */ 363 + #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER) 364 + /* add compatibility with older glibc */ 365 + #ifndef STT_SPARC_REGISTER 366 + #define STT_SPARC_REGISTER STT_REGISTER 367 + #endif 363 368 if (info->hdr->e_machine == EM_SPARC || 364 369 info->hdr->e_machine == EM_SPARCV9) { 365 370 /* Ignore register directives. */ 366 - if (ELF_ST_TYPE(sym->st_info) == STT_REGISTER) 371 + if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER) 367 372 break; 368 373 } 369 374 #endif
+2 -1
sound/ppc/pmac.c
··· 765 765 */ 766 766 static void snd_pmac_sound_feature(pmac_t *chip, int enable) 767 767 { 768 - ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable); 768 + if (ppc_md.feature_call) 769 + ppc_md.feature_call(PMAC_FTR_SOUND_CHIP_ENABLE, chip->node, 0, enable); 769 770 } 770 771 771 772 /*