merge linus into test branch

Len Brown 9774f338 3be11c8f

+1415 -2815
+2 -2
Documentation/DocBook/genericirq.tmpl
··· 303 303 do { 304 304 if (desc->status &amp; masked) 305 305 desc->chip->enable(); 306 - desc-status &amp;= ~pending; 306 + desc->status &amp;= ~pending; 307 307 handle_IRQ_event(desc->action); 308 308 } while (status &amp; pending); 309 - desc-status &amp;= ~running; 309 + desc->status &amp;= ~running; 310 310 desc->chip->end(); 311 311 </programlisting> 312 312 </para>
+6
MAINTAINERS
··· 1277 1277 W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml 1278 1278 S: Maintained 1279 1279 1280 + HID CORE LAYER 1281 + P: Jiri Kosina 1282 + M: jkosina@suse.cz 1283 + L: linux-input@atrey.karlin.mff.cuni.cz 1284 + S: Maintained 1285 + 1280 1286 HIGH-SPEED SCC DRIVER FOR AX.25 1281 1287 P: Klaus Kudielka 1282 1288 M: klaus.kudielka@ieee.org
-5
Makefile
··· 496 496 CFLAGS += -fomit-frame-pointer 497 497 endif 498 498 499 - ifdef CONFIG_UNWIND_INFO 500 - CFLAGS += -fasynchronous-unwind-tables 501 - LDFLAGS_vmlinux += --eh-frame-hdr 502 - endif 503 - 504 499 ifdef CONFIG_DEBUG_INFO 505 500 CFLAGS += -g 506 501 endif
-2
arch/i386/defconfig
··· 1493 1493 # CONFIG_DEBUG_VM is not set 1494 1494 # CONFIG_DEBUG_LIST is not set 1495 1495 # CONFIG_FRAME_POINTER is not set 1496 - CONFIG_UNWIND_INFO=y 1497 - CONFIG_STACK_UNWIND=y 1498 1496 # CONFIG_FORCED_INLINING is not set 1499 1497 # CONFIG_HEADERS_CHECK is not set 1500 1498 # CONFIG_RCU_TORTURE_TEST is not set
+8 -25
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
··· 126 126 } 127 127 } 128 128 129 - static void wrport(u16 port, u8 bit_width, u32 value) 130 - { 131 - if (bit_width <= 8) 132 - outb(value, port); 133 - else if (bit_width <= 16) 134 - outw(value, port); 135 - else if (bit_width <= 32) 136 - outl(value, port); 137 - } 138 - 139 - static void rdport(u16 port, u8 bit_width, u32 * ret) 140 - { 141 - *ret = 0; 142 - if (bit_width <= 8) 143 - *ret = inb(port); 144 - else if (bit_width <= 16) 145 - *ret = inw(port); 146 - else if (bit_width <= 32) 147 - *ret = inl(port); 148 - } 149 - 150 129 struct msr_addr { 151 130 u32 reg; 152 131 }; ··· 156 177 rdmsr(cmd->addr.msr.reg, cmd->val, h); 157 178 break; 158 179 case SYSTEM_IO_CAPABLE: 159 - rdport(cmd->addr.io.port, cmd->addr.io.bit_width, &cmd->val); 180 + acpi_os_read_port((acpi_io_address)cmd->addr.io.port, 181 + &cmd->val, 182 + (u32)cmd->addr.io.bit_width); 160 183 break; 161 184 default: 162 185 break; ··· 174 193 wrmsr(cmd->addr.msr.reg, cmd->val, h); 175 194 break; 176 195 case SYSTEM_IO_CAPABLE: 177 - wrport(cmd->addr.io.port, cmd->addr.io.bit_width, cmd->val); 196 + acpi_os_write_port((acpi_io_address)cmd->addr.io.port, 197 + cmd->val, 198 + (u32)cmd->addr.io.bit_width); 178 199 break; 179 200 default: 180 201 break; ··· 682 699 if (result) 683 700 goto err_freqfree; 684 701 685 - switch (data->cpu_feature) { 702 + switch (perf->control_register.space_id) { 686 703 case ACPI_ADR_SPACE_SYSTEM_IO: 687 704 /* Current speed is unknown and not detectable by IO port */ 688 705 policy->cur = acpi_cpufreq_guess_freq(data, policy->cpu); 689 706 break; 690 707 case ACPI_ADR_SPACE_FIXED_HARDWARE: 691 708 acpi_cpufreq_driver.get = get_cur_freq_on_cpu; 692 - get_cur_freq_on_cpu(cpu); 709 + policy->cur = get_cur_freq_on_cpu(cpu); 693 710 break; 694 711 default: 695 712 break;
+3 -1
arch/i386/kernel/cpu/cpufreq/longhaul.c
··· 787 787 switch (c->x86_model) { 788 788 case 6 ... 9: 789 789 return cpufreq_register_driver(&longhaul_driver); 790 + case 10: 791 + printk(KERN_ERR PFX "Use acpi-cpufreq driver for VIA C7\n"); 790 792 default: 791 - printk (KERN_INFO PFX "Unknown VIA CPU. Contact davej@codemonkey.org.uk\n"); 793 + ;; 792 794 } 793 795 794 796 return -ENODEV;
-32
arch/i386/kernel/entry.S
··· 979 979 jmp error_code 980 980 CFI_ENDPROC 981 981 982 - #ifdef CONFIG_STACK_UNWIND 983 - ENTRY(arch_unwind_init_running) 984 - CFI_STARTPROC 985 - movl 4(%esp), %edx 986 - movl (%esp), %ecx 987 - leal 4(%esp), %eax 988 - movl %ebx, PT_EBX(%edx) 989 - xorl %ebx, %ebx 990 - movl %ebx, PT_ECX(%edx) 991 - movl %ebx, PT_EDX(%edx) 992 - movl %esi, PT_ESI(%edx) 993 - movl %edi, PT_EDI(%edx) 994 - movl %ebp, PT_EBP(%edx) 995 - movl %ebx, PT_EAX(%edx) 996 - movl $__USER_DS, PT_DS(%edx) 997 - movl $__USER_DS, PT_ES(%edx) 998 - movl $0, PT_GS(%edx) 999 - movl %ebx, PT_ORIG_EAX(%edx) 1000 - movl %ecx, PT_EIP(%edx) 1001 - movl 12(%esp), %ecx 1002 - movl $__KERNEL_CS, PT_CS(%edx) 1003 - movl %ebx, PT_EFLAGS(%edx) 1004 - movl %eax, PT_OLDESP(%edx) 1005 - movl 8(%esp), %eax 1006 - movl %ecx, 8(%esp) 1007 - movl PT_EBX(%edx), %ebx 1008 - movl $__KERNEL_DS, PT_OLDSS(%edx) 1009 - jmpl *%eax 1010 - CFI_ENDPROC 1011 - ENDPROC(arch_unwind_init_running) 1012 - #endif 1013 - 1014 982 ENTRY(kernel_thread_helper) 1015 983 pushl $0 # fake return address for unwinder 1016 984 CFI_STARTPROC
-83
arch/i386/kernel/traps.c
··· 94 94 asmlinkage void machine_check(void); 95 95 96 96 int kstack_depth_to_print = 24; 97 - #ifdef CONFIG_STACK_UNWIND 98 - static int call_trace = 1; 99 - #else 100 - #define call_trace (-1) 101 - #endif 102 97 ATOMIC_NOTIFIER_HEAD(i386die_chain); 103 98 104 99 int register_die_notifier(struct notifier_block *nb) ··· 147 152 return ebp; 148 153 } 149 154 150 - struct ops_and_data { 151 - struct stacktrace_ops *ops; 152 - void *data; 153 - }; 154 - 155 - static asmlinkage int 156 - dump_trace_unwind(struct unwind_frame_info *info, void *data) 157 - { 158 - struct ops_and_data *oad = (struct ops_and_data *)data; 159 - int n = 0; 160 - unsigned long sp = UNW_SP(info); 161 - 162 - if (arch_unw_user_mode(info)) 163 - return -1; 164 - while (unwind(info) == 0 && UNW_PC(info)) { 165 - n++; 166 - oad->ops->address(oad->data, UNW_PC(info)); 167 - if (arch_unw_user_mode(info)) 168 - break; 169 - if ((sp & ~(PAGE_SIZE - 1)) == (UNW_SP(info) & ~(PAGE_SIZE - 1)) 170 - && sp > UNW_SP(info)) 171 - break; 172 - sp = UNW_SP(info); 173 - } 174 - return n; 175 - } 176 - 177 155 #define MSG(msg) ops->warning(data, msg) 178 156 179 157 void dump_trace(struct task_struct *task, struct pt_regs *regs, ··· 158 190 if (!task) 159 191 task = current; 160 192 161 - if (call_trace >= 0) { 162 - int unw_ret = 0; 163 - struct unwind_frame_info info; 164 - struct ops_and_data oad = { .ops = ops, .data = data }; 165 - 166 - if (regs) { 167 - if (unwind_init_frame_info(&info, task, regs) == 0) 168 - unw_ret = dump_trace_unwind(&info, &oad); 169 - } else if (task == current) 170 - unw_ret = unwind_init_running(&info, dump_trace_unwind, 171 - &oad); 172 - else { 173 - if (unwind_init_blocked(&info, task) == 0) 174 - unw_ret = dump_trace_unwind(&info, &oad); 175 - } 176 - if (unw_ret > 0) { 177 - if (call_trace == 1 && !arch_unw_user_mode(&info)) { 178 - ops->warning_symbol(data, 179 - "DWARF2 unwinder stuck at %s", 180 - UNW_PC(&info)); 181 - if (UNW_SP(&info) >= PAGE_OFFSET) { 182 - MSG("Leftover inexact backtrace:"); 183 - stack = (void *)UNW_SP(&info); 184 - if (!stack) 185 - return; 186 - ebp = UNW_FP(&info); 187 - } else 188 - MSG("Full inexact backtrace again:"); 189 - } else if (call_trace >= 1) 190 - return; 191 - else 192 - MSG("Full inexact backtrace again:"); 193 - } else 194 - MSG("Inexact backtrace:"); 195 - } 196 193 if (!stack) { 197 194 unsigned long dummy; 198 195 stack = &dummy; ··· 1191 1258 return 1; 1192 1259 } 1193 1260 __setup("kstack=", kstack_setup); 1194 - 1195 - #ifdef CONFIG_STACK_UNWIND 1196 - static int __init call_trace_setup(char *s) 1197 - { 1198 - if (strcmp(s, "old") == 0) 1199 - call_trace = -1; 1200 - else if (strcmp(s, "both") == 0) 1201 - call_trace = 0; 1202 - else if (strcmp(s, "newfallback") == 0) 1203 - call_trace = 1; 1204 - else if (strcmp(s, "new") == 2) 1205 - call_trace = 2; 1206 - return 1; 1207 - } 1208 - __setup("call_trace=", call_trace_setup); 1209 - #endif
+34 -13
arch/s390/defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.19-rc2 4 - # Wed Oct 18 17:11:10 2006 3 + # Linux kernel version: 2.6.20-rc1 4 + # Fri Dec 15 16:52:28 2006 5 5 # 6 6 CONFIG_MMU=y 7 7 CONFIG_LOCKDEP_SUPPORT=y 8 8 CONFIG_STACKTRACE_SUPPORT=y 9 9 CONFIG_RWSEM_XCHGADD_ALGORITHM=y 10 + # CONFIG_ARCH_HAS_ILOG2_U32 is not set 11 + # CONFIG_ARCH_HAS_ILOG2_U64 is not set 10 12 CONFIG_GENERIC_HWEIGHT=y 11 - CONFIG_GENERIC_CALIBRATE_DELAY=y 12 13 CONFIG_GENERIC_TIME=y 13 14 CONFIG_S390=y 14 15 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" ··· 38 37 CONFIG_IKCONFIG=y 39 38 CONFIG_IKCONFIG_PROC=y 40 39 # CONFIG_CPUSETS is not set 40 + CONFIG_SYSFS_DEPRECATED=y 41 41 # CONFIG_RELAY is not set 42 42 CONFIG_INITRAMFS_SOURCE="" 43 43 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 44 44 CONFIG_SYSCTL=y 45 45 # CONFIG_EMBEDDED is not set 46 - # CONFIG_SYSCTL_SYSCALL is not set 46 + CONFIG_SYSCTL_SYSCALL=y 47 47 CONFIG_KALLSYMS=y 48 48 # CONFIG_KALLSYMS_ALL is not set 49 49 # CONFIG_KALLSYMS_EXTRA_PASS is not set ··· 121 119 CONFIG_CHECK_STACK=y 122 120 CONFIG_STACK_GUARD=256 123 121 # CONFIG_WARN_STACK is not set 122 + CONFIG_ARCH_POPULATES_NODE_MAP=y 124 123 CONFIG_SELECT_MEMORY_MODEL=y 125 124 CONFIG_FLATMEM_MANUAL=y 126 125 # CONFIG_DISCONTIGMEM_MANUAL is not set ··· 131 128 # CONFIG_SPARSEMEM_STATIC is not set 132 129 CONFIG_SPLIT_PTLOCK_CPUS=4 133 130 CONFIG_RESOURCES_64BIT=y 131 + CONFIG_HOLES_IN_ZONE=y 134 132 135 133 # 136 134 # I/O subsystem configuration ··· 200 196 # CONFIG_TCP_CONG_ADVANCED is not set 201 197 CONFIG_TCP_CONG_CUBIC=y 202 198 CONFIG_DEFAULT_TCP_CONG="cubic" 199 + # CONFIG_TCP_MD5SIG is not set 203 200 CONFIG_IPV6=y 204 201 # CONFIG_IPV6_PRIVACY is not set 205 202 # CONFIG_IPV6_ROUTER_PREF is not set ··· 216 211 # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set 217 212 CONFIG_IPV6_SIT=y 218 213 # CONFIG_IPV6_TUNNEL is not set 219 - # CONFIG_IPV6_SUBTREES is not set 220 214 # CONFIG_IPV6_MULTIPLE_TABLES is not set 221 215 # CONFIG_NETWORK_SECMARK is not set 222 216 # CONFIG_NETFILTER is not set ··· 250 246 # QoS and/or fair queueing 251 247 # 252 248 CONFIG_NET_SCHED=y 249 + CONFIG_NET_SCH_FIFO=y 253 250 CONFIG_NET_SCH_CLK_JIFFIES=y 254 251 # CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set 255 252 # CONFIG_NET_SCH_CLK_CPU is not set ··· 282 277 CONFIG_NET_CLS_FW=m 283 278 CONFIG_NET_CLS_U32=m 284 279 # CONFIG_CLS_U32_PERF is not set 280 + CONFIG_CLS_U32_MARK=y 285 281 CONFIG_NET_CLS_RSVP=m 286 282 CONFIG_NET_CLS_RSVP6=m 287 283 # CONFIG_NET_EMATCH is not set ··· 321 315 # 322 316 # CONFIG_RAID_ATTRS is not set 323 317 CONFIG_SCSI=y 318 + # CONFIG_SCSI_TGT is not set 324 319 CONFIG_SCSI_NETLINK=y 325 320 CONFIG_SCSI_PROC_FS=y 326 321 ··· 342 335 CONFIG_SCSI_MULTI_LUN=y 343 336 CONFIG_SCSI_CONSTANTS=y 344 337 CONFIG_SCSI_LOGGING=y 338 + CONFIG_SCSI_SCAN_ASYNC=y 345 339 346 340 # 347 341 # SCSI Transports ··· 554 546 # CONFIG_AUTOFS_FS is not set 555 547 # CONFIG_AUTOFS4_FS is not set 556 548 # CONFIG_FUSE_FS is not set 549 + CONFIG_GENERIC_ACL=y 557 550 558 551 # 559 552 # CD-ROM/DVD Filesystems ··· 580 571 CONFIG_TMPFS_POSIX_ACL=y 581 572 # CONFIG_HUGETLB_PAGE is not set 582 573 CONFIG_RAMFS=y 583 - # CONFIG_CONFIGFS_FS is not set 574 + CONFIG_CONFIGFS_FS=m 584 575 585 576 # 586 577 # Miscellaneous filesystems ··· 625 616 # CONFIG_CODA_FS is not set 626 617 # CONFIG_AFS_FS is not set 627 618 # CONFIG_9P_FS is not set 628 - CONFIG_GENERIC_ACL=y 629 619 630 620 # 631 621 # Partition Types ··· 654 646 # CONFIG_NLS is not set 655 647 656 648 # 649 + # Distributed Lock Manager 650 + # 651 + CONFIG_DLM=m 652 + CONFIG_DLM_TCP=y 653 + # CONFIG_DLM_SCTP is not set 654 + # CONFIG_DLM_DEBUG is not set 655 + 656 + # 657 657 # Instrumentation Support 658 658 # 659 659 ··· 679 663 CONFIG_ENABLE_MUST_CHECK=y 680 664 CONFIG_MAGIC_SYSRQ=y 681 665 # CONFIG_UNUSED_SYMBOLS is not set 666 + CONFIG_DEBUG_FS=y 667 + CONFIG_HEADERS_CHECK=y 682 668 CONFIG_DEBUG_KERNEL=y 683 669 CONFIG_LOG_BUF_SHIFT=17 684 670 # CONFIG_SCHEDSTATS is not set ··· 697 679 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 698 680 # CONFIG_DEBUG_KOBJECT is not set 699 681 # CONFIG_DEBUG_INFO is not set 700 - CONFIG_DEBUG_FS=y 701 682 # CONFIG_DEBUG_VM is not set 702 683 # CONFIG_DEBUG_LIST is not set 703 684 # CONFIG_FRAME_POINTER is not set 704 685 # CONFIG_UNWIND_INFO is not set 705 686 CONFIG_FORCED_INLINING=y 706 - CONFIG_HEADERS_CHECK=y 707 687 # CONFIG_RCU_TORTURE_TEST is not set 708 688 # CONFIG_LKDTM is not set 709 689 ··· 715 699 # Cryptographic options 716 700 # 717 701 CONFIG_CRYPTO=y 718 - CONFIG_CRYPTO_ALGAPI=m 719 - CONFIG_CRYPTO_BLKCIPHER=m 720 - CONFIG_CRYPTO_MANAGER=m 702 + CONFIG_CRYPTO_ALGAPI=y 703 + CONFIG_CRYPTO_BLKCIPHER=y 704 + CONFIG_CRYPTO_MANAGER=y 721 705 # CONFIG_CRYPTO_HMAC is not set 706 + # CONFIG_CRYPTO_XCBC is not set 722 707 # CONFIG_CRYPTO_NULL is not set 723 708 # CONFIG_CRYPTO_MD4 is not set 724 709 # CONFIG_CRYPTO_MD5 is not set ··· 730 713 # CONFIG_CRYPTO_SHA512 is not set 731 714 # CONFIG_CRYPTO_WP512 is not set 732 715 # CONFIG_CRYPTO_TGR192 is not set 716 + # CONFIG_CRYPTO_GF128MUL is not set 733 717 CONFIG_CRYPTO_ECB=m 734 - CONFIG_CRYPTO_CBC=m 718 + CONFIG_CRYPTO_CBC=y 719 + # CONFIG_CRYPTO_LRW is not set 735 720 # CONFIG_CRYPTO_DES is not set 736 721 # CONFIG_CRYPTO_DES_S390 is not set 737 722 # CONFIG_CRYPTO_BLOWFISH is not set ··· 759 740 # 760 741 # Library routines 761 742 # 743 + CONFIG_BITREVERSE=m 762 744 # CONFIG_CRC_CCITT is not set 763 745 # CONFIG_CRC16 is not set 764 746 CONFIG_CRC32=m 765 747 # CONFIG_LIBCRC32C is not set 766 748 CONFIG_PLIST=y 749 + CONFIG_IOMAP_COPY=y
+2 -2
arch/s390/hypfs/hypfs_diag.c
··· 379 379 static void *diag204_alloc_rbuf(void) 380 380 { 381 381 diag204_buf = (void*)__get_free_pages(GFP_KERNEL,0); 382 - if (diag204_buf) 382 + if (!diag204_buf) 383 383 return ERR_PTR(-ENOMEM); 384 384 diag204_buf_pages = 1; 385 385 return diag204_buf; ··· 521 521 } 522 522 rc = diag224_get_name_table(); 523 523 if (rc) { 524 - diag224_delete_name_table(); 524 + diag204_free_buffer(); 525 525 printk(KERN_ERR "hypfs: could not get name table.\n"); 526 526 } 527 527 return rc;
+14 -45
arch/s390/kernel/ipl.c
··· 609 609 static struct subsys_attribute on_panic_attr = 610 610 __ATTR(on_panic, 0644, on_panic_show, on_panic_store); 611 611 612 - static void print_fcp_block(struct ipl_parameter_block *fcp_block) 613 - { 614 - printk(KERN_EMERG "wwpn: %016llx\n", 615 - (unsigned long long)fcp_block->ipl_info.fcp.wwpn); 616 - printk(KERN_EMERG "lun: %016llx\n", 617 - (unsigned long long)fcp_block->ipl_info.fcp.lun); 618 - printk(KERN_EMERG "bootprog: %lld\n", 619 - (unsigned long long)fcp_block->ipl_info.fcp.bootprog); 620 - printk(KERN_EMERG "br_lba: %lld\n", 621 - (unsigned long long)fcp_block->ipl_info.fcp.br_lba); 622 - printk(KERN_EMERG "device: %llx\n", 623 - (unsigned long long)fcp_block->ipl_info.fcp.devno); 624 - printk(KERN_EMERG "opt: %x\n", fcp_block->ipl_info.fcp.opt); 625 - } 626 - 627 612 void do_reipl(void) 628 613 { 629 614 struct ccw_dev_id devid; 630 615 static char buf[100]; 631 616 char loadparm[LOADPARM_LEN + 1]; 632 - 633 - switch (reipl_type) { 634 - case IPL_TYPE_CCW: 635 - reipl_get_ascii_loadparm(loadparm); 636 - printk(KERN_EMERG "reboot on ccw device: 0.0.%04x\n", 637 - reipl_block_ccw->ipl_info.ccw.devno); 638 - printk(KERN_EMERG "loadparm = '%s'\n", loadparm); 639 - break; 640 - case IPL_TYPE_FCP: 641 - printk(KERN_EMERG "reboot on fcp device:\n"); 642 - print_fcp_block(reipl_block_fcp); 643 - break; 644 - default: 645 - break; 646 - } 647 617 648 618 switch (reipl_method) { 649 619 case IPL_METHOD_CCW_CIO: ··· 624 654 reipl_ccw_dev(&devid); 625 655 break; 626 656 case IPL_METHOD_CCW_VM: 657 + reipl_get_ascii_loadparm(loadparm); 627 658 if (strlen(loadparm) == 0) 628 659 sprintf(buf, "IPL %X", 629 660 reipl_block_ccw->ipl_info.ccw.devno); ··· 654 683 diag308(DIAG308_IPL, NULL); 655 684 break; 656 685 } 657 - printk(KERN_EMERG "reboot failed!\n"); 658 686 signal_processor(smp_processor_id(), sigp_stop_and_store_status); 659 687 } 660 688 ··· 661 691 { 662 692 struct ccw_dev_id devid; 663 693 static char buf[100]; 664 - 665 - switch (dump_type) { 666 - case IPL_TYPE_CCW: 667 - printk(KERN_EMERG "Automatic dump on ccw device: 0.0.%04x\n", 668 - dump_block_ccw->ipl_info.ccw.devno); 669 - break; 670 - case IPL_TYPE_FCP: 671 - printk(KERN_EMERG "Automatic dump on fcp device:\n"); 672 - print_fcp_block(dump_block_fcp); 673 - break; 674 - default: 675 - return; 676 - } 677 694 678 695 switch (dump_method) { 679 696 case IPL_METHOD_CCW_CIO: ··· 994 1037 } 995 1038 996 1039 extern void reset_mcck_handler(void); 1040 + extern void reset_pgm_handler(void); 1041 + extern __u32 dump_prefix_page; 997 1042 998 1043 void s390_reset_system(void) 999 1044 { 1000 1045 struct _lowcore *lc; 1001 1046 1002 - /* Stack for interrupt/machine check handler */ 1003 1047 lc = (struct _lowcore *)(unsigned long) store_prefix(); 1048 + 1049 + /* Stack for interrupt/machine check handler */ 1004 1050 lc->panic_stack = S390_lowcore.panic_stack; 1051 + 1052 + /* Save prefix page address for dump case */ 1053 + dump_prefix_page = (unsigned long) lc; 1005 1054 1006 1055 /* Disable prefixing */ 1007 1056 set_prefix(0); ··· 1019 1056 S390_lowcore.mcck_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK; 1020 1057 S390_lowcore.mcck_new_psw.addr = 1021 1058 PSW_ADDR_AMODE | (unsigned long) &reset_mcck_handler; 1059 + 1060 + /* Set new program check handler */ 1061 + S390_lowcore.program_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK; 1062 + S390_lowcore.program_new_psw.addr = 1063 + PSW_ADDR_AMODE | (unsigned long) &reset_pgm_handler; 1064 + 1022 1065 do_reset_calls(); 1023 1066 }
+5 -1
arch/s390/kernel/reipl.S
··· 16 16 stm %r0,%r15,__LC_GPREGS_SAVE_AREA 17 17 stctl %c0,%c15,__LC_CREGS_SAVE_AREA 18 18 stam %a0,%a15,__LC_AREGS_SAVE_AREA 19 - stpx __LC_PREFIX_SAVE_AREA 19 + mvc __LC_PREFIX_SAVE_AREA(4),dump_prefix_page-.Lpg0(%r13) 20 20 stckc .Lclkcmp-.Lpg0(%r13) 21 21 mvc __LC_CLOCK_COMP_SAVE_AREA(8),.Lclkcmp-.Lpg0(%r13) 22 22 stpt __LC_CPU_TIMER_SAVE_AREA ··· 79 79 .long 0x00000000,0x00000000 80 80 .long 0x00000000,0x00000000 81 81 .long 0x00000000,0x00000000 82 + .globl dump_prefix_page 83 + dump_prefix_page: 84 + .long 0x00000000 85 +
+4 -1
arch/s390/kernel/reipl64.S
··· 20 20 stg %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1) 21 21 stctg %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1) 22 22 stam %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1) 23 - stpx __LC_PREFIX_SAVE_AREA-0x1000(%r1) 23 + mvc __LC_PREFIX_SAVE_AREA-0x1000(4,%r1),dump_prefix_page-.Lpg0(%r13) 24 24 stfpc __LC_FP_CREG_SAVE_AREA-0x1000(%r1) 25 25 stckc .Lclkcmp-.Lpg0(%r13) 26 26 mvc __LC_CLOCK_COMP_SAVE_AREA-0x1000(8,%r1),.Lclkcmp-.Lpg0(%r13) ··· 103 103 .long 0x00000000,0x00000000 104 104 .long 0x00000000,0x00000000 105 105 .long 0x00000000,0x00000000 106 + .globl dump_prefix_page 107 + dump_prefix_page: 108 + .long 0x00000000
+42
arch/s390/kernel/reset.S
··· 3 3 * 4 4 * Copyright (C) IBM Corp. 2006 5 5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 6 + * Michael Holzheu <holzheu@de.ibm.com> 6 7 */ 7 8 8 9 #include <asm/ptrace.h> ··· 28 27 s390_reset_mcck_handler: 29 28 .quad 0 30 29 30 + .globl reset_pgm_handler 31 + reset_pgm_handler: 32 + stmg %r0,%r15,__LC_SAVE_AREA 33 + basr %r13,0 34 + 0: lg %r15,__LC_PANIC_STACK # load panic stack 35 + aghi %r15,-STACK_FRAME_OVERHEAD 36 + lg %r1,s390_reset_pgm_handler-0b(%r13) 37 + ltgr %r1,%r1 38 + jz 1f 39 + basr %r14,%r1 40 + lmg %r0,%r15,__LC_SAVE_AREA 41 + lpswe __LC_PGM_OLD_PSW 42 + 1: lpswe disabled_wait_psw-0b(%r13) 43 + .globl s390_reset_pgm_handler 44 + s390_reset_pgm_handler: 45 + .quad 0 46 + .align 8 47 + disabled_wait_psw: 48 + .quad 0x0002000180000000,0x0000000000000000 + reset_pgm_handler 49 + 31 50 #else /* CONFIG_64BIT */ 32 51 33 52 .globl reset_mcck_handler ··· 65 44 .globl s390_reset_mcck_handler 66 45 s390_reset_mcck_handler: 67 46 .long 0 47 + 48 + .globl reset_pgm_handler 49 + reset_pgm_handler: 50 + stm %r0,%r15,__LC_SAVE_AREA 51 + basr %r13,0 52 + 0: l %r15,__LC_PANIC_STACK # load panic stack 53 + ahi %r15,-STACK_FRAME_OVERHEAD 54 + l %r1,s390_reset_pgm_handler-0b(%r13) 55 + ltr %r1,%r1 56 + jz 1f 57 + basr %r14,%r1 58 + lm %r0,%r15,__LC_SAVE_AREA 59 + lpsw __LC_PGM_OLD_PSW 60 + 61 + 1: lpsw disabled_wait_psw-0b(%r13) 62 + .globl s390_reset_pgm_handler 63 + s390_reset_pgm_handler: 64 + .long 0 65 + disabled_wait_psw: 66 + .align 8 67 + .long 0x000a0000,0x00000000 + reset_pgm_handler 68 68 69 69 #endif /* CONFIG_64BIT */
+582 -229
arch/sparc/defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 + # Linux kernel version: 2.6.20-rc1 4 + # Sun Dec 17 14:20:47 2006 3 5 # 4 6 CONFIG_MMU=y 5 - CONFIG_UID16=y 6 7 CONFIG_HIGHMEM=y 7 8 CONFIG_GENERIC_ISA_DMA=y 9 + CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 8 10 9 11 # 10 12 # Code maturity level options 11 13 # 12 14 CONFIG_EXPERIMENTAL=y 13 - CONFIG_CLEAN_COMPILE=y 14 - CONFIG_STANDALONE=y 15 15 CONFIG_BROKEN_ON_SMP=y 16 + CONFIG_INIT_ENV_ARG_LIMIT=32 16 17 17 18 # 18 19 # General setup 19 20 # 21 + CONFIG_LOCALVERSION="" 22 + CONFIG_LOCALVERSION_AUTO=y 20 23 CONFIG_SWAP=y 21 24 CONFIG_SYSVIPC=y 25 + # CONFIG_IPC_NS is not set 22 26 CONFIG_POSIX_MQUEUE=y 23 27 # CONFIG_BSD_PROCESS_ACCT is not set 24 - CONFIG_SYSCTL=y 28 + # CONFIG_TASKSTATS is not set 29 + # CONFIG_UTS_NS is not set 25 30 # CONFIG_AUDIT is not set 26 - CONFIG_LOG_BUF_SHIFT=14 27 - # CONFIG_HOTPLUG is not set 28 31 # CONFIG_IKCONFIG is not set 32 + CONFIG_SYSFS_DEPRECATED=y 33 + # CONFIG_RELAY is not set 34 + CONFIG_INITRAMFS_SOURCE="" 35 + # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 36 + CONFIG_SYSCTL=y 29 37 # CONFIG_EMBEDDED is not set 38 + CONFIG_UID16=y 39 + CONFIG_SYSCTL_SYSCALL=y 30 40 CONFIG_KALLSYMS=y 31 41 # CONFIG_KALLSYMS_ALL is not set 42 + # CONFIG_KALLSYMS_EXTRA_PASS is not set 43 + CONFIG_HOTPLUG=y 44 + CONFIG_PRINTK=y 45 + CONFIG_BUG=y 46 + CONFIG_ELF_CORE=y 47 + CONFIG_BASE_FULL=y 32 48 CONFIG_FUTEX=y 33 49 CONFIG_EPOLL=y 34 - CONFIG_IOSCHED_NOOP=y 35 - CONFIG_IOSCHED_AS=y 36 - CONFIG_IOSCHED_DEADLINE=y 37 - CONFIG_IOSCHED_CFQ=y 38 - # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 50 + CONFIG_SHMEM=y 51 + CONFIG_SLAB=y 52 + CONFIG_VM_EVENT_COUNTERS=y 53 + CONFIG_RT_MUTEXES=y 54 + # CONFIG_TINY_SHMEM is not set 55 + CONFIG_BASE_SMALL=0 56 + # CONFIG_SLOB is not set 39 57 40 58 # 41 59 # Loadable module support ··· 61 43 CONFIG_MODULES=y 62 44 CONFIG_MODULE_UNLOAD=y 63 45 # CONFIG_MODULE_FORCE_UNLOAD is not set 64 - CONFIG_OBSOLETE_MODPARM=y 65 46 # CONFIG_MODVERSIONS is not set 47 + # CONFIG_MODULE_SRCVERSION_ALL is not set 66 48 CONFIG_KMOD=y 67 49 68 50 # 69 - # General setup 51 + # Block layer 70 52 # 71 - CONFIG_VT=y 72 - CONFIG_VT_CONSOLE=y 73 - CONFIG_HW_CONSOLE=y 53 + CONFIG_BLOCK=y 54 + # CONFIG_LBD is not set 55 + # CONFIG_BLK_DEV_IO_TRACE is not set 56 + # CONFIG_LSF is not set 57 + 58 + # 59 + # IO Schedulers 60 + # 61 + CONFIG_IOSCHED_NOOP=y 62 + CONFIG_IOSCHED_AS=y 63 + CONFIG_IOSCHED_DEADLINE=y 64 + CONFIG_IOSCHED_CFQ=y 65 + # CONFIG_DEFAULT_AS is not set 66 + # CONFIG_DEFAULT_DEADLINE is not set 67 + CONFIG_DEFAULT_CFQ=y 68 + # CONFIG_DEFAULT_NOOP is not set 69 + CONFIG_DEFAULT_IOSCHED="cfq" 70 + 71 + # 72 + # General machine setup 73 + # 74 74 # CONFIG_SMP is not set 75 + CONFIG_SPARC=y 75 76 CONFIG_SPARC32=y 76 77 CONFIG_SBUS=y 77 78 CONFIG_SBUSCHAR=y ··· 98 61 CONFIG_SUN_AUXIO=y 99 62 CONFIG_SUN_IO=y 100 63 CONFIG_RWSEM_GENERIC_SPINLOCK=y 64 + CONFIG_GENERIC_FIND_NEXT_BIT=y 65 + CONFIG_GENERIC_HWEIGHT=y 66 + CONFIG_GENERIC_CALIBRATE_DELAY=y 67 + CONFIG_ARCH_MAY_HAVE_PC_FDC=y 68 + # CONFIG_ARCH_HAS_ILOG2_U32 is not set 69 + # CONFIG_ARCH_HAS_ILOG2_U64 is not set 101 70 CONFIG_SUN_PM=y 102 71 # CONFIG_SUN4 is not set 103 72 CONFIG_PCI=y 104 - # CONFIG_PCI_LEGACY_PROC is not set 105 - # CONFIG_PCI_NAMES is not set 73 + # CONFIG_PCI_MULTITHREAD_PROBE is not set 74 + # CONFIG_PCI_DEBUG is not set 106 75 CONFIG_SUN_OPENPROMFS=m 76 + # CONFIG_SPARC_LED is not set 107 77 CONFIG_BINFMT_ELF=y 108 78 CONFIG_BINFMT_AOUT=y 109 79 CONFIG_BINFMT_MISC=m 110 80 CONFIG_SUNOS_EMUL=y 81 + CONFIG_SELECT_MEMORY_MODEL=y 82 + CONFIG_FLATMEM_MANUAL=y 83 + # CONFIG_DISCONTIGMEM_MANUAL is not set 84 + # CONFIG_SPARSEMEM_MANUAL is not set 85 + CONFIG_FLATMEM=y 86 + CONFIG_FLAT_NODE_MEM_MAP=y 87 + # CONFIG_SPARSEMEM_STATIC is not set 88 + CONFIG_SPLIT_PTLOCK_CPUS=4 89 + # CONFIG_RESOURCES_64BIT is not set 111 90 112 91 # 113 - # Parallel port support 114 - # 115 - # CONFIG_PARPORT is not set 116 - 117 - # 118 - # Generic Driver Options 119 - # 120 - # CONFIG_DEBUG_DRIVER is not set 121 - 122 - # 123 - # Graphics support 124 - # 125 - # CONFIG_FB is not set 126 - 127 - # 128 - # Console display driver support 129 - # 130 - # CONFIG_MDA_CONSOLE is not set 131 - # CONFIG_PROM_CONSOLE is not set 132 - CONFIG_DUMMY_CONSOLE=y 133 - 134 - # 135 - # Memory Technology Devices (MTD) 136 - # 137 - # CONFIG_MTD is not set 138 - 139 - # 140 - # Serial drivers 141 - # 142 - # CONFIG_SERIAL_8250 is not set 143 - 144 - # 145 - # Non-8250 serial port support 146 - # 147 - CONFIG_SERIAL_SUNCORE=y 148 - CONFIG_SERIAL_SUNZILOG=y 149 - CONFIG_SERIAL_SUNZILOG_CONSOLE=y 150 - CONFIG_SERIAL_SUNSU=y 151 - CONFIG_SERIAL_SUNSU_CONSOLE=y 152 - # CONFIG_SERIAL_SUNSAB is not set 153 - CONFIG_SERIAL_CORE=y 154 - CONFIG_SERIAL_CORE_CONSOLE=y 155 - 156 - # 157 - # Misc Linux/SPARC drivers 158 - # 159 - CONFIG_SUN_OPENPROMIO=m 160 - CONFIG_SUN_MOSTEK_RTC=m 161 - # CONFIG_SUN_BPP is not set 162 - # CONFIG_SUN_VIDEOPIX is not set 163 - # CONFIG_SUN_AURORA is not set 164 - # CONFIG_TADPOLE_TS102_UCTRL is not set 165 - # CONFIG_SUN_JSFLASH is not set 166 - CONFIG_APM_RTC_IS_GMT=y 167 - CONFIG_RTC=m 168 - 169 - # 170 - # Block devices 171 - # 172 - # CONFIG_BLK_DEV_FD is not set 173 - # CONFIG_BLK_CPQ_DA is not set 174 - # CONFIG_BLK_CPQ_CISS_DA is not set 175 - # CONFIG_BLK_DEV_DAC960 is not set 176 - # CONFIG_BLK_DEV_UMEM is not set 177 - CONFIG_BLK_DEV_LOOP=m 178 - CONFIG_BLK_DEV_CRYPTOLOOP=m 179 - # CONFIG_BLK_DEV_NBD is not set 180 - # CONFIG_BLK_DEV_CARMEL is not set 181 - CONFIG_BLK_DEV_RAM=y 182 - CONFIG_BLK_DEV_RAM_SIZE=4096 183 - CONFIG_BLK_DEV_INITRD=y 184 - 185 - # 186 - # ATA/ATAPI/MFM/RLL support 187 - # 188 - # CONFIG_IDE is not set 189 - 190 - # 191 - # ISDN subsystem 192 - # 193 - # CONFIG_ISDN is not set 194 - 195 - # 196 - # SCSI device support 197 - # 198 - CONFIG_SCSI=y 199 - CONFIG_SCSI_PROC_FS=y 200 - 201 - # 202 - # SCSI support type (disk, tape, CD-ROM) 203 - # 204 - CONFIG_BLK_DEV_SD=y 205 - # CONFIG_CHR_DEV_ST is not set 206 - # CONFIG_CHR_DEV_OSST is not set 207 - CONFIG_BLK_DEV_SR=m 208 - # CONFIG_BLK_DEV_SR_VENDOR is not set 209 - CONFIG_CHR_DEV_SG=m 210 - 211 - # 212 - # Some SCSI devices (e.g. CD jukebox) support multiple LUNs 213 - # 214 - # CONFIG_SCSI_MULTI_LUN is not set 215 - # CONFIG_SCSI_CONSTANTS is not set 216 - # CONFIG_SCSI_LOGGING is not set 217 - 218 - # 219 - # SCSI Transport Attributes 220 - # 221 - CONFIG_SCSI_SPI_ATTRS=m 222 - # CONFIG_SCSI_FC_ATTRS is not set 223 - 224 - # 225 - # SCSI low-level drivers 226 - # 227 - # CONFIG_BLK_DEV_3W_XXXX_RAID is not set 228 - # CONFIG_SCSI_ACARD is not set 229 - # CONFIG_SCSI_AACRAID is not set 230 - # CONFIG_SCSI_AIC7XXX is not set 231 - # CONFIG_SCSI_AIC7XXX_OLD is not set 232 - # CONFIG_SCSI_AIC79XX is not set 233 - # CONFIG_SCSI_DPT_I2O is not set 234 - # CONFIG_SCSI_ADVANSYS is not set 235 - # CONFIG_SCSI_MEGARAID is not set 236 - # CONFIG_SCSI_SATA is not set 237 - # CONFIG_SCSI_BUSLOGIC is not set 238 - # CONFIG_SCSI_DMX3191D is not set 239 - # CONFIG_SCSI_EATA is not set 240 - # CONFIG_SCSI_EATA_PIO is not set 241 - # CONFIG_SCSI_FUTURE_DOMAIN is not set 242 - # CONFIG_SCSI_GDTH is not set 243 - # CONFIG_SCSI_IPS is not set 244 - # CONFIG_SCSI_INIA100 is not set 245 - # CONFIG_SCSI_SYM53C8XX_2 is not set 246 - # CONFIG_SCSI_IPR is not set 247 - # CONFIG_SCSI_QLOGIC_ISP is not set 248 - # CONFIG_SCSI_QLOGIC_FC is not set 249 - # CONFIG_SCSI_QLOGIC_1280 is not set 250 - CONFIG_SCSI_QLOGICPTI=m 251 - CONFIG_SCSI_QLA2XXX=y 252 - # CONFIG_SCSI_QLA21XX is not set 253 - # CONFIG_SCSI_QLA22XX is not set 254 - # CONFIG_SCSI_QLA2300 is not set 255 - # CONFIG_SCSI_QLA2322 is not set 256 - # CONFIG_SCSI_QLA6312 is not set 257 - # CONFIG_SCSI_QLA6322 is not set 258 - # CONFIG_SCSI_DC395x is not set 259 - # CONFIG_SCSI_DC390T is not set 260 - # CONFIG_SCSI_NSP32 is not set 261 - # CONFIG_SCSI_DEBUG is not set 262 - CONFIG_SCSI_SUNESP=y 263 - 264 - # 265 - # Fibre Channel support 266 - # 267 - # CONFIG_FC4 is not set 268 - 269 - # 270 - # Multi-device support (RAID and LVM) 271 - # 272 - # CONFIG_MD is not set 273 - 274 - # 275 - # Networking support 92 + # Networking 276 93 # 277 94 CONFIG_NET=y 278 95 279 96 # 280 97 # Networking options 281 98 # 99 + # CONFIG_NETDEBUG is not set 282 100 CONFIG_PACKET=y 283 101 # CONFIG_PACKET_MMAP is not set 284 - CONFIG_NETLINK_DEV=y 285 102 CONFIG_UNIX=y 103 + CONFIG_XFRM=y 104 + CONFIG_XFRM_USER=m 105 + # CONFIG_XFRM_SUB_POLICY is not set 286 106 CONFIG_NET_KEY=m 287 107 CONFIG_INET=y 288 108 # CONFIG_IP_MULTICAST is not set 289 109 # CONFIG_IP_ADVANCED_ROUTER is not set 110 + CONFIG_IP_FIB_HASH=y 290 111 CONFIG_IP_PNP=y 291 112 CONFIG_IP_PNP_DHCP=y 292 113 # CONFIG_IP_PNP_BOOTP is not set ··· 156 261 CONFIG_INET_AH=y 157 262 CONFIG_INET_ESP=y 158 263 CONFIG_INET_IPCOMP=y 264 + CONFIG_INET_XFRM_TUNNEL=y 265 + CONFIG_INET_TUNNEL=y 266 + CONFIG_INET_XFRM_MODE_TRANSPORT=y 267 + CONFIG_INET_XFRM_MODE_TUNNEL=y 268 + CONFIG_INET_XFRM_MODE_BEET=y 269 + CONFIG_INET_DIAG=y 270 + CONFIG_INET_TCP_DIAG=y 271 + # CONFIG_TCP_CONG_ADVANCED is not set 272 + CONFIG_TCP_CONG_CUBIC=y 273 + CONFIG_DEFAULT_TCP_CONG="cubic" 274 + # CONFIG_TCP_MD5SIG is not set 159 275 CONFIG_IPV6=m 160 276 CONFIG_IPV6_PRIVACY=y 277 + # CONFIG_IPV6_ROUTER_PREF is not set 161 278 CONFIG_INET6_AH=m 162 279 CONFIG_INET6_ESP=m 163 280 CONFIG_INET6_IPCOMP=m 281 + # CONFIG_IPV6_MIP6 is not set 282 + CONFIG_INET6_XFRM_TUNNEL=m 283 + CONFIG_INET6_TUNNEL=m 284 + CONFIG_INET6_XFRM_MODE_TRANSPORT=m 285 + CONFIG_INET6_XFRM_MODE_TUNNEL=m 286 + CONFIG_INET6_XFRM_MODE_BEET=m 287 + # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set 288 + CONFIG_IPV6_SIT=m 164 289 CONFIG_IPV6_TUNNEL=m 290 + # CONFIG_IPV6_MULTIPLE_TABLES is not set 291 + # CONFIG_NETWORK_SECMARK is not set 165 292 # CONFIG_NETFILTER is not set 166 - CONFIG_XFRM=y 167 - CONFIG_XFRM_USER=m 293 + 294 + # 295 + # DCCP Configuration (EXPERIMENTAL) 296 + # 297 + # CONFIG_IP_DCCP is not set 168 298 169 299 # 170 300 # SCTP Configuration (EXPERIMENTAL) ··· 200 280 # CONFIG_SCTP_HMAC_NONE is not set 201 281 # CONFIG_SCTP_HMAC_SHA1 is not set 202 282 CONFIG_SCTP_HMAC_MD5=y 283 + 284 + # 285 + # TIPC Configuration (EXPERIMENTAL) 286 + # 287 + # CONFIG_TIPC is not set 203 288 # CONFIG_ATM is not set 204 289 # CONFIG_BRIDGE is not set 205 290 # CONFIG_VLAN_8021Q is not set ··· 214 289 # CONFIG_ATALK is not set 215 290 # CONFIG_X25 is not set 216 291 # CONFIG_LAPB is not set 217 - # CONFIG_NET_DIVERT is not set 218 292 # CONFIG_ECONET is not set 219 293 # CONFIG_WAN_ROUTER is not set 220 - # CONFIG_NET_HW_FLOWCONTROL is not set 221 294 222 295 # 223 296 # QoS and/or fair queueing ··· 226 303 # Network testing 227 304 # 228 305 CONFIG_NET_PKTGEN=m 229 - # CONFIG_NETPOLL is not set 230 - # CONFIG_NET_POLL_CONTROLLER is not set 231 306 # CONFIG_HAMRADIO is not set 232 307 # CONFIG_IRDA is not set 233 308 # CONFIG_BT is not set 309 + # CONFIG_IEEE80211 is not set 310 + 311 + # 312 + # Device Drivers 313 + # 314 + 315 + # 316 + # Generic Driver Options 317 + # 318 + CONFIG_STANDALONE=y 319 + CONFIG_PREVENT_FIRMWARE_BUILD=y 320 + # CONFIG_FW_LOADER is not set 321 + # CONFIG_DEBUG_DRIVER is not set 322 + # CONFIG_SYS_HYPERVISOR is not set 323 + 324 + # 325 + # Connector - unified userspace <-> kernelspace linker 326 + # 327 + # CONFIG_CONNECTOR is not set 328 + 329 + # 330 + # Memory Technology Devices (MTD) 331 + # 332 + # CONFIG_MTD is not set 333 + 334 + # 335 + # Parallel port support 336 + # 337 + # CONFIG_PARPORT is not set 338 + 339 + # 340 + # Plug and Play support 341 + # 342 + 343 + # 344 + # Block devices 345 + # 346 + # CONFIG_BLK_DEV_FD is not set 347 + # CONFIG_BLK_CPQ_DA is not set 348 + # CONFIG_BLK_CPQ_CISS_DA is not set 349 + # CONFIG_BLK_DEV_DAC960 is not set 350 + # CONFIG_BLK_DEV_UMEM is not set 351 + # CONFIG_BLK_DEV_COW_COMMON is not set 352 + CONFIG_BLK_DEV_LOOP=m 353 + CONFIG_BLK_DEV_CRYPTOLOOP=m 354 + # CONFIG_BLK_DEV_NBD is not set 355 + # CONFIG_BLK_DEV_SX8 is not set 356 + CONFIG_BLK_DEV_RAM=y 357 + CONFIG_BLK_DEV_RAM_COUNT=16 358 + CONFIG_BLK_DEV_RAM_SIZE=4096 359 + CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 360 + CONFIG_BLK_DEV_INITRD=y 361 + # CONFIG_CDROM_PKTCDVD is not set 362 + # CONFIG_ATA_OVER_ETH is not set 363 + 364 + # 365 + # Misc devices 366 + # 367 + # CONFIG_SGI_IOC4 is not set 368 + # CONFIG_TIFM_CORE is not set 369 + 370 + # 371 + # ATA/ATAPI/MFM/RLL support 372 + # 373 + # CONFIG_IDE is not set 374 + 375 + # 376 + # SCSI device support 377 + # 378 + # CONFIG_RAID_ATTRS is not set 379 + CONFIG_SCSI=y 380 + # CONFIG_SCSI_TGT is not set 381 + # CONFIG_SCSI_NETLINK is not set 382 + CONFIG_SCSI_PROC_FS=y 383 + 384 + # 385 + # SCSI support type (disk, tape, CD-ROM) 386 + # 387 + CONFIG_BLK_DEV_SD=y 388 + # CONFIG_CHR_DEV_ST is not set 389 + # CONFIG_CHR_DEV_OSST is not set 390 + CONFIG_BLK_DEV_SR=m 391 + # CONFIG_BLK_DEV_SR_VENDOR is not set 392 + CONFIG_CHR_DEV_SG=m 393 + # CONFIG_CHR_DEV_SCH is not set 394 + 395 + # 396 + # Some SCSI devices (e.g. CD jukebox) support multiple LUNs 397 + # 398 + # CONFIG_SCSI_MULTI_LUN is not set 399 + # CONFIG_SCSI_CONSTANTS is not set 400 + # CONFIG_SCSI_LOGGING is not set 401 + # CONFIG_SCSI_SCAN_ASYNC is not set 402 + 403 + # 404 + # SCSI Transports 405 + # 406 + CONFIG_SCSI_SPI_ATTRS=m 407 + # CONFIG_SCSI_FC_ATTRS is not set 408 + # CONFIG_SCSI_ISCSI_ATTRS is not set 409 + # CONFIG_SCSI_SAS_ATTRS is not set 410 + # CONFIG_SCSI_SAS_LIBSAS is not set 411 + 412 + # 413 + # SCSI low-level drivers 414 + # 415 + # CONFIG_ISCSI_TCP is not set 416 + # CONFIG_BLK_DEV_3W_XXXX_RAID is not set 417 + # CONFIG_SCSI_3W_9XXX is not set 418 + # CONFIG_SCSI_ACARD is not set 419 + # CONFIG_SCSI_AACRAID is not set 420 + # CONFIG_SCSI_AIC7XXX is not set 421 + # CONFIG_SCSI_AIC7XXX_OLD is not set 422 + # CONFIG_SCSI_AIC79XX is not set 423 + # CONFIG_SCSI_AIC94XX is not set 424 + # CONFIG_SCSI_DPT_I2O is not set 425 + # CONFIG_SCSI_ARCMSR is not set 426 + # CONFIG_MEGARAID_NEWGEN is not set 427 + # CONFIG_MEGARAID_LEGACY is not set 428 + # CONFIG_MEGARAID_SAS is not set 429 + # CONFIG_SCSI_HPTIOP is not set 430 + # CONFIG_SCSI_DMX3191D is not set 431 + # CONFIG_SCSI_FUTURE_DOMAIN is not set 432 + # CONFIG_SCSI_IPS is not set 433 + # CONFIG_SCSI_INITIO is not set 434 + # CONFIG_SCSI_INIA100 is not set 435 + # CONFIG_SCSI_STEX is not set 436 + # CONFIG_SCSI_SYM53C8XX_2 is not set 437 + # CONFIG_SCSI_QLOGIC_1280 is not set 438 + CONFIG_SCSI_QLOGICPTI=m 439 + # CONFIG_SCSI_QLA_FC is not set 440 + # CONFIG_SCSI_QLA_ISCSI is not set 441 + # CONFIG_SCSI_LPFC is not set 442 + # CONFIG_SCSI_DC395x is not set 443 + # CONFIG_SCSI_DC390T is not set 444 + # CONFIG_SCSI_NSP32 is not set 445 + # CONFIG_SCSI_DEBUG is not set 446 + CONFIG_SCSI_SUNESP=y 447 + # CONFIG_SCSI_SRP is not set 448 + 449 + # 450 + # Serial ATA (prod) and Parallel ATA (experimental) drivers 451 + # 452 + # CONFIG_ATA is not set 453 + 454 + # 455 + # Multi-device support (RAID and LVM) 456 + # 457 + # CONFIG_MD is not set 458 + 459 + # 460 + # Fusion MPT device support 461 + # 462 + # CONFIG_FUSION is not set 463 + # CONFIG_FUSION_SPI is not set 464 + # CONFIG_FUSION_FC is not set 465 + # CONFIG_FUSION_SAS is not set 466 + 467 + # 468 + # IEEE 1394 (FireWire) support 469 + # 470 + # CONFIG_IEEE1394 is not set 471 + 472 + # 473 + # I2O device support 474 + # 475 + # CONFIG_I2O is not set 476 + 477 + # 478 + # Network device support 479 + # 234 480 CONFIG_NETDEVICES=y 235 481 CONFIG_DUMMY=m 236 482 # CONFIG_BONDING is not set 237 483 # CONFIG_EQUALIZER is not set 238 484 CONFIG_TUN=m 239 - # CONFIG_ETHERTAP is not set 240 485 241 486 # 242 487 # ARCnet devices 243 488 # 244 489 # CONFIG_ARCNET is not set 490 + 491 + # 492 + # PHY device support 493 + # 494 + # CONFIG_PHYLIB is not set 245 495 246 496 # 247 497 # Ethernet (10 or 100Mbit) ··· 426 330 CONFIG_SUNBMAC=m 427 331 CONFIG_SUNQE=m 428 332 # CONFIG_SUNGEM is not set 333 + # CONFIG_CASSINI is not set 429 334 # CONFIG_NET_VENDOR_3COM is not set 430 335 431 336 # ··· 447 350 # CONFIG_HAMACHI is not set 448 351 # CONFIG_YELLOWFIN is not set 449 352 # CONFIG_R8169 is not set 353 + # CONFIG_SIS190 is not set 354 + # CONFIG_SKGE is not set 355 + # CONFIG_SKY2 is not set 450 356 # CONFIG_SK98LIN is not set 451 357 # CONFIG_TIGON3 is not set 358 + # CONFIG_BNX2 is not set 359 + # CONFIG_QLA3XXX is not set 452 360 453 361 # 454 362 # Ethernet (10000 Mbit) 455 363 # 364 + # CONFIG_CHELSIO_T1 is not set 456 365 # CONFIG_IXGB is not set 457 366 # CONFIG_S2IO is not set 367 + # CONFIG_MYRI10GE is not set 368 + # CONFIG_NETXEN_NIC is not set 458 369 459 370 # 460 371 # Token Ring devices ··· 485 380 # CONFIG_NET_FC is not set 486 381 # CONFIG_SHAPER is not set 487 382 # CONFIG_NETCONSOLE is not set 383 + # CONFIG_NETPOLL is not set 384 + # CONFIG_NET_POLL_CONTROLLER is not set 488 385 489 386 # 490 - # Unix98 PTY support 387 + # ISDN subsystem 491 388 # 492 - CONFIG_UNIX98_PTYS=y 493 - CONFIG_UNIX98_PTY_COUNT=256 389 + # CONFIG_ISDN is not set 390 + 391 + # 392 + # Telephony Support 393 + # 394 + # CONFIG_PHONE is not set 494 395 495 396 # 496 397 # Input device support 497 398 # 498 399 CONFIG_INPUT=y 400 + # CONFIG_INPUT_FF_MEMLESS is not set 499 401 500 402 # 501 403 # Userland interfaces ··· 517 405 CONFIG_INPUT_EVBUG=m 518 406 519 407 # 520 - # Input I/O drivers 521 - # 522 - # CONFIG_GAMEPORT is not set 523 - CONFIG_SOUND_GAMEPORT=y 524 - CONFIG_SERIO=m 525 - # CONFIG_SERIO_I8042 is not set 526 - CONFIG_SERIO_SERPORT=m 527 - # CONFIG_SERIO_CT82C710 is not set 528 - # CONFIG_SERIO_PCIPS2 is not set 529 - 530 - # 531 408 # Input Device Drivers 532 409 # 533 410 CONFIG_INPUT_KEYBOARD=y ··· 525 424 # CONFIG_KEYBOARD_LKKBD is not set 526 425 # CONFIG_KEYBOARD_XTKBD is not set 527 426 # CONFIG_KEYBOARD_NEWTON is not set 427 + # CONFIG_KEYBOARD_STOWAWAY is not set 528 428 CONFIG_INPUT_MOUSE=y 529 429 CONFIG_MOUSE_PS2=m 530 430 CONFIG_MOUSE_SERIAL=m ··· 535 433 # CONFIG_INPUT_MISC is not set 536 434 537 435 # 436 + # Hardware I/O ports 437 + # 438 + CONFIG_SERIO=m 439 + # CONFIG_SERIO_I8042 is not set 440 + CONFIG_SERIO_SERPORT=m 441 + # CONFIG_SERIO_PCIPS2 is not set 442 + CONFIG_SERIO_LIBPS2=m 443 + # CONFIG_SERIO_RAW is not set 444 + # CONFIG_GAMEPORT is not set 445 + 446 + # 447 + # Character devices 448 + # 449 + CONFIG_VT=y 450 + CONFIG_VT_CONSOLE=y 451 + CONFIG_HW_CONSOLE=y 452 + # CONFIG_VT_HW_CONSOLE_BINDING is not set 453 + # CONFIG_SERIAL_NONSTANDARD is not set 454 + 455 + # 456 + # Serial drivers 457 + # 458 + 459 + # 460 + # Non-8250 serial port support 461 + # 462 + CONFIG_SERIAL_SUNCORE=y 463 + CONFIG_SERIAL_SUNZILOG=y 464 + CONFIG_SERIAL_SUNZILOG_CONSOLE=y 465 + CONFIG_SERIAL_SUNSU=y 466 + CONFIG_SERIAL_SUNSU_CONSOLE=y 467 + # CONFIG_SERIAL_SUNSAB is not set 468 + CONFIG_SERIAL_CORE=y 469 + CONFIG_SERIAL_CORE_CONSOLE=y 470 + # CONFIG_SERIAL_JSM is not set 471 + CONFIG_UNIX98_PTYS=y 472 + CONFIG_LEGACY_PTYS=y 473 + CONFIG_LEGACY_PTY_COUNT=256 474 + 475 + # 476 + # IPMI 477 + # 478 + # CONFIG_IPMI_HANDLER is not set 479 + 480 + # 481 + # Watchdog Cards 482 + # 483 + # CONFIG_WATCHDOG is not set 484 + CONFIG_HW_RANDOM=m 485 + CONFIG_RTC=m 486 + # CONFIG_DTLK is not set 487 + # CONFIG_R3964 is not set 488 + # CONFIG_APPLICOM is not set 489 + # CONFIG_DRM is not set 490 + # CONFIG_RAW_DRIVER is not set 491 + 492 + # 493 + # TPM devices 494 + # 495 + # CONFIG_TCG_TPM is not set 496 + 497 + # 498 + # I2C support 499 + # 500 + # CONFIG_I2C is not set 501 + 502 + # 503 + # SPI support 504 + # 505 + # CONFIG_SPI is not set 506 + # CONFIG_SPI_MASTER is not set 507 + 508 + # 509 + # Dallas's 1-wire bus 510 + # 511 + # CONFIG_W1 is not set 512 + 513 + # 514 + # Hardware Monitoring support 515 + # 516 + CONFIG_HWMON=y 517 + # CONFIG_HWMON_VID is not set 518 + # CONFIG_SENSORS_ABITUGURU is not set 519 + # CONFIG_SENSORS_F71805F is not set 520 + # CONFIG_SENSORS_PC87427 is not set 521 + # CONFIG_SENSORS_VT1211 is not set 522 + # CONFIG_HWMON_DEBUG_CHIP is not set 523 + 524 + # 525 + # Multimedia devices 526 + # 527 + # CONFIG_VIDEO_DEV is not set 528 + 529 + # 530 + # Digital Video Broadcasting Devices 531 + # 532 + # CONFIG_DVB is not set 533 + 534 + # 535 + # Graphics support 536 + # 537 + CONFIG_FIRMWARE_EDID=y 538 + # CONFIG_FB is not set 539 + 540 + # 541 + # Console display driver support 542 + # 543 + # CONFIG_PROM_CONSOLE is not set 544 + CONFIG_DUMMY_CONSOLE=y 545 + # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 546 + 547 + # 548 + # Sound 549 + # 550 + # CONFIG_SOUND is not set 551 + 552 + # 553 + # HID Devices 554 + # 555 + CONFIG_HID=y 556 + 557 + # 558 + # USB support 559 + # 560 + CONFIG_USB_ARCH_HAS_HCD=y 561 + CONFIG_USB_ARCH_HAS_OHCI=y 562 + CONFIG_USB_ARCH_HAS_EHCI=y 563 + # CONFIG_USB is not set 564 + 565 + # 566 + # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 567 + # 568 + 569 + # 570 + # USB Gadget Support 571 + # 572 + # CONFIG_USB_GADGET is not set 573 + 574 + # 575 + # MMC/SD Card support 576 + # 577 + # CONFIG_MMC is not set 578 + 579 + # 580 + # LED devices 581 + # 582 + # CONFIG_NEW_LEDS is not set 583 + 584 + # 585 + # LED drivers 586 + # 587 + 588 + # 589 + # LED Triggers 590 + # 591 + 592 + # 593 + # InfiniBand support 594 + # 595 + # CONFIG_INFINIBAND is not set 596 + 597 + # 598 + # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 599 + # 600 + 601 + # 602 + # Real Time Clock 603 + # 604 + # CONFIG_RTC_CLASS is not set 605 + 606 + # 607 + # DMA Engine support 608 + # 609 + # CONFIG_DMA_ENGINE is not set 610 + 611 + # 612 + # DMA Clients 613 + # 614 + 615 + # 616 + # DMA Devices 617 + # 618 + 619 + # 620 + # Virtualization 621 + # 622 + 623 + # 624 + # Misc Linux/SPARC drivers 625 + # 626 + CONFIG_SUN_OPENPROMIO=m 627 + CONFIG_SUN_MOSTEK_RTC=m 628 + # CONFIG_SUN_BPP is not set 629 + # CONFIG_SUN_VIDEOPIX is not set 630 + # CONFIG_TADPOLE_TS102_UCTRL is not set 631 + # CONFIG_SUN_JSFLASH is not set 632 + 633 + # 634 + # Unix98 PTY support 635 + # 636 + CONFIG_UNIX98_PTY_COUNT=256 637 + 638 + # 538 639 # File systems 539 640 # 540 641 CONFIG_EXT2_FS=y 541 642 CONFIG_EXT2_FS_XATTR=y 542 643 CONFIG_EXT2_FS_POSIX_ACL=y 543 644 CONFIG_EXT2_FS_SECURITY=y 645 + # CONFIG_EXT2_FS_XIP is not set 544 646 # CONFIG_EXT3_FS is not set 545 - # CONFIG_JBD is not set 647 + # CONFIG_EXT4DEV_FS is not set 546 648 CONFIG_FS_MBCACHE=y 547 649 # CONFIG_REISERFS_FS is not set 548 650 # CONFIG_JFS_FS is not set 549 651 CONFIG_FS_POSIX_ACL=y 550 652 CONFIG_XFS_FS=m 551 - CONFIG_XFS_RT=y 552 653 CONFIG_XFS_QUOTA=y 553 654 CONFIG_XFS_SECURITY=y 554 655 CONFIG_XFS_POSIX_ACL=y 656 + CONFIG_XFS_RT=y 657 + # CONFIG_GFS2_FS is not set 658 + # CONFIG_OCFS2_FS is not set 555 659 # CONFIG_MINIX_FS is not set 556 660 CONFIG_ROMFS_FS=m 661 + CONFIG_INOTIFY=y 662 + CONFIG_INOTIFY_USER=y 557 663 # CONFIG_QUOTA is not set 558 664 CONFIG_QUOTACTL=y 665 + CONFIG_DNOTIFY=y 559 666 CONFIG_AUTOFS_FS=m 560 667 CONFIG_AUTOFS4_FS=m 668 + # CONFIG_FUSE_FS is not set 561 669 562 670 # 563 671 # CD-ROM/DVD Filesystems ··· 780 468 # 781 469 # DOS/FAT/NT Filesystems 782 470 # 783 - # CONFIG_FAT_FS is not set 471 + # CONFIG_MSDOS_FS is not set 472 + # CONFIG_VFAT_FS is not set 784 473 # CONFIG_NTFS_FS is not set 785 474 786 475 # ··· 789 476 # 790 477 CONFIG_PROC_FS=y 791 478 CONFIG_PROC_KCORE=y 479 + CONFIG_PROC_SYSCTL=y 792 480 CONFIG_SYSFS=y 793 - # CONFIG_DEVFS_FS is not set 794 - CONFIG_DEVPTS_FS_XATTR=y 795 - # CONFIG_DEVPTS_FS_SECURITY is not set 796 481 # CONFIG_TMPFS is not set 797 482 # CONFIG_HUGETLB_PAGE is not set 798 483 CONFIG_RAMFS=y 484 + # CONFIG_CONFIGFS_FS is not set 799 485 800 486 # 801 487 # Miscellaneous filesystems ··· 824 512 # CONFIG_NFSD is not set 825 513 CONFIG_ROOT_NFS=y 826 514 CONFIG_LOCKD=y 827 - # CONFIG_EXPORTFS is not set 515 + CONFIG_NFS_COMMON=y 828 516 CONFIG_SUNRPC=y 829 517 CONFIG_SUNRPC_GSS=m 830 518 CONFIG_RPCSEC_GSS_KRB5=m 519 + # CONFIG_RPCSEC_GSS_SPKM3 is not set 831 520 # CONFIG_SMB_FS is not set 832 521 CONFIG_CIFS=m 833 522 # CONFIG_CIFS_STATS is not set 523 + # CONFIG_CIFS_WEAK_PW_HASH is not set 524 + # CONFIG_CIFS_XATTR is not set 525 + # CONFIG_CIFS_DEBUG2 is not set 526 + # CONFIG_CIFS_EXPERIMENTAL is not set 834 527 # CONFIG_NCP_FS is not set 835 528 # CONFIG_CODA_FS is not set 836 529 CONFIG_AFS_FS=m 837 530 CONFIG_RXRPC=m 531 + # CONFIG_9P_FS is not set 838 532 839 533 # 840 534 # Partition Types ··· 877 559 # CONFIG_NLS_ISO8859_8 is not set 878 560 # CONFIG_NLS_CODEPAGE_1250 is not set 879 561 # CONFIG_NLS_CODEPAGE_1251 is not set 562 + # CONFIG_NLS_ASCII is not set 880 563 # CONFIG_NLS_ISO8859_1 is not set 881 564 # CONFIG_NLS_ISO8859_2 is not set 882 565 # CONFIG_NLS_ISO8859_3 is not set ··· 894 575 # CONFIG_NLS_UTF8 is not set 895 576 896 577 # 897 - # Sound 578 + # Distributed Lock Manager 898 579 # 899 - # CONFIG_SOUND is not set 580 + # CONFIG_DLM is not set 900 581 901 582 # 902 - # USB support 583 + # Instrumentation Support 903 584 # 904 - # CONFIG_USB is not set 905 - 906 - # 907 - # USB Gadget Support 908 - # 909 - # CONFIG_USB_GADGET is not set 910 - 911 - # 912 - # Watchdog Cards 913 - # 914 - # CONFIG_WATCHDOG is not set 585 + # CONFIG_PROFILING is not set 915 586 916 587 # 917 588 # Kernel hacking 918 589 # 919 - CONFIG_DEBUG_KERNEL=y 920 - # CONFIG_DEBUG_STACK_USAGE is not set 921 - # CONFIG_DEBUG_SLAB is not set 590 + # CONFIG_PRINTK_TIME is not set 591 + CONFIG_ENABLE_MUST_CHECK=y 922 592 CONFIG_MAGIC_SYSRQ=y 593 + # CONFIG_UNUSED_SYMBOLS is not set 594 + # CONFIG_DEBUG_FS is not set 595 + # CONFIG_HEADERS_CHECK is not set 596 + CONFIG_DEBUG_KERNEL=y 597 + CONFIG_LOG_BUF_SHIFT=14 598 + CONFIG_DETECT_SOFTLOCKUP=y 599 + # CONFIG_SCHEDSTATS is not set 600 + # CONFIG_DEBUG_SLAB is not set 601 + # CONFIG_DEBUG_RT_MUTEXES is not set 602 + # CONFIG_RT_MUTEX_TESTER is not set 923 603 # CONFIG_DEBUG_SPINLOCK is not set 924 - # CONFIG_DEBUG_HIGHMEM is not set 604 + # CONFIG_DEBUG_MUTEXES is not set 605 + # CONFIG_DEBUG_RWSEMS is not set 925 606 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set 926 - # CONFIG_DEBUG_BUGVERBOSE is not set 607 + # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 608 + # CONFIG_DEBUG_KOBJECT is not set 609 + # CONFIG_DEBUG_HIGHMEM is not set 610 + CONFIG_DEBUG_BUGVERBOSE=y 611 + # CONFIG_DEBUG_INFO is not set 612 + # CONFIG_DEBUG_VM is not set 613 + # CONFIG_DEBUG_LIST is not set 614 + CONFIG_FORCED_INLINING=y 615 + # CONFIG_RCU_TORTURE_TEST is not set 616 + # CONFIG_DEBUG_STACK_USAGE is not set 927 617 928 618 # 929 619 # Security options 930 620 # 621 + # CONFIG_KEYS is not set 931 622 # CONFIG_SECURITY is not set 932 623 933 624 # 934 625 # Cryptographic options 935 626 # 936 627 CONFIG_CRYPTO=y 628 + CONFIG_CRYPTO_ALGAPI=y 629 + CONFIG_CRYPTO_BLKCIPHER=y 630 + CONFIG_CRYPTO_HASH=y 631 + CONFIG_CRYPTO_MANAGER=y 937 632 CONFIG_CRYPTO_HMAC=y 633 + # CONFIG_CRYPTO_XCBC is not set 938 634 CONFIG_CRYPTO_NULL=m 939 635 CONFIG_CRYPTO_MD4=y 940 636 CONFIG_CRYPTO_MD5=y 941 637 CONFIG_CRYPTO_SHA1=y 942 638 CONFIG_CRYPTO_SHA256=m 943 639 CONFIG_CRYPTO_SHA512=m 640 + # CONFIG_CRYPTO_WP512 is not set 641 + # CONFIG_CRYPTO_TGR192 is not set 642 + # CONFIG_CRYPTO_GF128MUL is not set 643 + CONFIG_CRYPTO_ECB=m 644 + CONFIG_CRYPTO_CBC=y 645 + # CONFIG_CRYPTO_LRW is not set 944 646 CONFIG_CRYPTO_DES=y 945 647 CONFIG_CRYPTO_BLOWFISH=m 946 648 CONFIG_CRYPTO_TWOFISH=m 649 + CONFIG_CRYPTO_TWOFISH_COMMON=m 947 650 CONFIG_CRYPTO_SERPENT=m 948 651 CONFIG_CRYPTO_AES=m 949 652 CONFIG_CRYPTO_CAST5=m 950 653 CONFIG_CRYPTO_CAST6=m 654 + # CONFIG_CRYPTO_TEA is not set 951 655 CONFIG_CRYPTO_ARC4=m 656 + # CONFIG_CRYPTO_KHAZAD is not set 657 + # CONFIG_CRYPTO_ANUBIS is not set 952 658 CONFIG_CRYPTO_DEFLATE=y 953 659 CONFIG_CRYPTO_MICHAEL_MIC=m 954 660 CONFIG_CRYPTO_CRC32C=m 955 661 # CONFIG_CRYPTO_TEST is not set 956 662 957 663 # 664 + # Hardware crypto devices 665 + # 666 + 667 + # 958 668 # Library routines 959 669 # 670 + CONFIG_BITREVERSE=y 671 + # CONFIG_CRC_CCITT is not set 672 + # CONFIG_CRC16 is not set 960 673 CONFIG_CRC32=y 961 674 CONFIG_LIBCRC32C=m 962 675 CONFIG_ZLIB_INFLATE=y 963 676 CONFIG_ZLIB_DEFLATE=y 677 + CONFIG_PLIST=y 678 + CONFIG_IOMAP_COPY=y
-8
arch/sparc/kernel/sparc_ksyms.c
··· 83 83 /* Private functions with odd calling conventions. */ 84 84 extern void ___atomic24_add(void); 85 85 extern void ___atomic24_sub(void); 86 - extern void ___set_bit(void); 87 - extern void ___clear_bit(void); 88 - extern void ___change_bit(void); 89 86 extern void ___rw_read_enter(void); 90 87 extern void ___rw_read_try(void); 91 88 extern void ___rw_read_exit(void); ··· 121 124 /* Atomic operations. */ 122 125 EXPORT_SYMBOL(___atomic24_add); 123 126 EXPORT_SYMBOL(___atomic24_sub); 124 - 125 - /* Bit operations. */ 126 - EXPORT_SYMBOL(___set_bit); 127 - EXPORT_SYMBOL(___clear_bit); 128 - EXPORT_SYMBOL(___change_bit); 129 127 130 128 /* Per-CPU information table */ 131 129 EXPORT_PER_CPU_SYMBOL(__cpu_data);
+1 -4
arch/sparc/kernel/time.c
··· 78 78 extern char __copy_user_begin[], __copy_user_end[]; 79 79 extern char __atomic_begin[], __atomic_end[]; 80 80 extern char __bzero_begin[], __bzero_end[]; 81 - extern char __bitops_begin[], __bitops_end[]; 82 81 83 82 unsigned long pc = regs->pc; 84 83 ··· 87 88 (pc >= (unsigned long) __atomic_begin && 88 89 pc < (unsigned long) __atomic_end) || 89 90 (pc >= (unsigned long) __bzero_begin && 90 - pc < (unsigned long) __bzero_end) || 91 - (pc >= (unsigned long) __bitops_begin && 92 - pc < (unsigned long) __bitops_end)) 91 + pc < (unsigned long) __bzero_end)) 93 92 pc = regs->u_regs[UREG_RETPC]; 94 93 return pc; 95 94 }
+2 -2
arch/sparc/lib/Makefile
··· 7 7 lib-y := mul.o rem.o sdiv.o udiv.o umul.o urem.o ashrdi3.o memcpy.o memset.o \ 8 8 strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o \ 9 9 strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \ 10 - copy_user.o locks.o atomic.o atomic32.o bitops.o \ 10 + copy_user.o locks.o atomic.o \ 11 11 lshrdi3.o ashldi3.o rwsem.o muldi3.o bitext.o 12 12 13 - obj-y += iomap.o 13 + obj-y += iomap.o atomic32.o
+39
arch/sparc/lib/atomic32.c
··· 76 76 spin_unlock_irqrestore(ATOMIC_HASH(v), flags); 77 77 } 78 78 EXPORT_SYMBOL(atomic_set); 79 + 80 + unsigned long ___set_bit(unsigned long *addr, unsigned long mask) 81 + { 82 + unsigned long old, flags; 83 + 84 + spin_lock_irqsave(ATOMIC_HASH(addr), flags); 85 + old = *addr; 86 + *addr = old | mask; 87 + spin_unlock_irqrestore(ATOMIC_HASH(addr), flags); 88 + 89 + return old & mask; 90 + } 91 + EXPORT_SYMBOL(___set_bit); 92 + 93 + unsigned long ___clear_bit(unsigned long *addr, unsigned long mask) 94 + { 95 + unsigned long old, flags; 96 + 97 + spin_lock_irqsave(ATOMIC_HASH(addr), flags); 98 + old = *addr; 99 + *addr = old & ~mask; 100 + spin_unlock_irqrestore(ATOMIC_HASH(addr), flags); 101 + 102 + return old & mask; 103 + } 104 + EXPORT_SYMBOL(___clear_bit); 105 + 106 + unsigned long ___change_bit(unsigned long *addr, unsigned long mask) 107 + { 108 + unsigned long old, flags; 109 + 110 + spin_lock_irqsave(ATOMIC_HASH(addr), flags); 111 + old = *addr; 112 + *addr = old ^ mask; 113 + spin_unlock_irqrestore(ATOMIC_HASH(addr), flags); 114 + 115 + return old & mask; 116 + } 117 + EXPORT_SYMBOL(___change_bit);
-109
arch/sparc/lib/bitops.S
··· 1 - /* bitops.S: Low level assembler bit operations. 2 - * 3 - * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 4 - */ 5 - 6 - #include <asm/ptrace.h> 7 - #include <asm/psr.h> 8 - 9 - .text 10 - .align 4 11 - 12 - .globl __bitops_begin 13 - __bitops_begin: 14 - 15 - /* Take bits in %g2 and set them in word at %g1, 16 - * return whether bits were set in original value 17 - * in %g2. %g4 holds value to restore into %o7 18 - * in delay slot of jmpl return, %g3 + %g5 + %g7 can be 19 - * used as temporaries and thus is considered clobbered 20 - * by all callers. 21 - */ 22 - .globl ___set_bit 23 - ___set_bit: 24 - rd %psr, %g3 25 - nop; nop; nop; 26 - or %g3, PSR_PIL, %g5 27 - wr %g5, 0x0, %psr 28 - nop; nop; nop 29 - #ifdef CONFIG_SMP 30 - set bitops_spinlock, %g5 31 - 2: ldstub [%g5], %g7 ! Spin on the byte lock for SMP. 32 - orcc %g7, 0x0, %g0 ! Did we get it? 33 - bne 2b ! Nope... 34 - #endif 35 - ld [%g1], %g7 36 - or %g7, %g2, %g5 37 - and %g7, %g2, %g2 38 - #ifdef CONFIG_SMP 39 - st %g5, [%g1] 40 - set bitops_spinlock, %g5 41 - stb %g0, [%g5] 42 - #else 43 - st %g5, [%g1] 44 - #endif 45 - wr %g3, 0x0, %psr 46 - nop; nop; nop 47 - jmpl %o7, %g0 48 - mov %g4, %o7 49 - 50 - /* Same as above, but clears the bits from %g2 instead. */ 51 - .globl ___clear_bit 52 - ___clear_bit: 53 - rd %psr, %g3 54 - nop; nop; nop 55 - or %g3, PSR_PIL, %g5 56 - wr %g5, 0x0, %psr 57 - nop; nop; nop 58 - #ifdef CONFIG_SMP 59 - set bitops_spinlock, %g5 60 - 2: ldstub [%g5], %g7 ! Spin on the byte lock for SMP. 61 - orcc %g7, 0x0, %g0 ! Did we get it? 62 - bne 2b ! Nope... 63 - #endif 64 - ld [%g1], %g7 65 - andn %g7, %g2, %g5 66 - and %g7, %g2, %g2 67 - #ifdef CONFIG_SMP 68 - st %g5, [%g1] 69 - set bitops_spinlock, %g5 70 - stb %g0, [%g5] 71 - #else 72 - st %g5, [%g1] 73 - #endif 74 - wr %g3, 0x0, %psr 75 - nop; nop; nop 76 - jmpl %o7, %g0 77 - mov %g4, %o7 78 - 79 - /* Same thing again, but this time toggles the bits from %g2. */ 80 - .globl ___change_bit 81 - ___change_bit: 82 - rd %psr, %g3 83 - nop; nop; nop 84 - or %g3, PSR_PIL, %g5 85 - wr %g5, 0x0, %psr 86 - nop; nop; nop 87 - #ifdef CONFIG_SMP 88 - set bitops_spinlock, %g5 89 - 2: ldstub [%g5], %g7 ! Spin on the byte lock for SMP. 90 - orcc %g7, 0x0, %g0 ! Did we get it? 91 - bne 2b ! Nope... 92 - #endif 93 - ld [%g1], %g7 94 - xor %g7, %g2, %g5 95 - and %g7, %g2, %g2 96 - #ifdef CONFIG_SMP 97 - st %g5, [%g1] 98 - set bitops_spinlock, %g5 99 - stb %g0, [%g5] 100 - #else 101 - st %g5, [%g1] 102 - #endif 103 - wr %g3, 0x0, %psr 104 - nop; nop; nop 105 - jmpl %o7, %g0 106 - mov %g4, %o7 107 - 108 - .globl __bitops_end 109 - __bitops_end:
+1 -6
arch/sparc64/kernel/head.S
··· 78 78 79 79 /* PROM cif handler code address is in %o4. */ 80 80 sparc64_boot: 81 - 1: rd %pc, %g7 82 - set 1b, %g1 83 - cmp %g1, %g7 84 - be,pn %xcc, sparc64_boot_after_remap 85 - mov %o4, %l7 81 + mov %o4, %l7 86 82 87 83 /* We need to remap the kernel. Use position independant 88 84 * code to remap us to KERNBASE. ··· 291 295 292 296 add %sp, (192 + 128), %sp 293 297 294 - sparc64_boot_after_remap: 295 298 sethi %hi(prom_root_compatible), %g1 296 299 or %g1, %lo(prom_root_compatible), %g1 297 300 sethi %hi(prom_sun4v_name), %g7
+4 -20
arch/sparc64/kernel/irq.c
··· 372 372 } 373 373 } 374 374 375 - static struct hw_interrupt_type sun4u_irq = { 375 + static struct irq_chip sun4u_irq = { 376 376 .typename = "sun4u", 377 377 .enable = sun4u_irq_enable, 378 378 .disable = sun4u_irq_disable, 379 379 .end = sun4u_irq_end, 380 380 }; 381 381 382 - static struct hw_interrupt_type sun4u_irq_ack = { 382 + static struct irq_chip sun4u_irq_ack = { 383 383 .typename = "sun4u+ack", 384 384 .enable = sun4u_irq_enable, 385 385 .disable = sun4u_irq_disable, ··· 387 387 .end = sun4u_irq_end, 388 388 }; 389 389 390 - static struct hw_interrupt_type sun4v_irq = { 390 + static struct irq_chip sun4v_irq = { 391 391 .typename = "sun4v", 392 392 .enable = sun4v_irq_enable, 393 393 .disable = sun4v_irq_disable, 394 394 .end = sun4v_irq_end, 395 395 }; 396 396 397 - static struct hw_interrupt_type sun4v_irq_ack = { 397 + static struct irq_chip sun4v_irq_ack = { 398 398 .typename = "sun4v+ack", 399 399 .enable = sun4v_irq_enable, 400 400 .disable = sun4v_irq_disable, ··· 491 491 492 492 out: 493 493 return bucket->virt_irq; 494 - } 495 - 496 - void hw_resend_irq(struct hw_interrupt_type *handler, unsigned int virt_irq) 497 - { 498 - struct ino_bucket *bucket = virt_irq_to_bucket(virt_irq); 499 - unsigned long pstate; 500 - unsigned int *ent; 501 - 502 - __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate)); 503 - __asm__ __volatile__("wrpr %0, %1, %%pstate" 504 - : : "r" (pstate), "i" (PSTATE_IE)); 505 - ent = irq_work(smp_processor_id()); 506 - bucket->irq_chain = *ent; 507 - *ent = __irq(bucket); 508 - set_softint(1 << PIL_DEVICE_IRQ); 509 - __asm__ __volatile__("wrpr %0, 0x0, %%pstate" : : "r" (pstate)); 510 494 } 511 495 512 496 void ack_bad_irq(unsigned int virt_irq)
+2 -5
arch/sparc64/kernel/smp.c
··· 1447 1447 char *ptr; 1448 1448 1449 1449 /* Copy section for each CPU (we discard the original) */ 1450 - goal = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES); 1451 - #ifdef CONFIG_MODULES 1452 - if (goal < PERCPU_ENOUGH_ROOM) 1453 - goal = PERCPU_ENOUGH_ROOM; 1454 - #endif 1450 + goal = PERCPU_ENOUGH_ROOM; 1451 + 1455 1452 __per_cpu_shift = 0; 1456 1453 for (size = 1UL; size < goal; size <<= 1UL) 1457 1454 __per_cpu_shift++;
-2
arch/x86_64/Makefile
··· 45 45 # actually it makes the kernel smaller too. 46 46 cflags-y += -fno-reorder-blocks 47 47 cflags-y += -Wno-sign-compare 48 - ifneq ($(CONFIG_UNWIND_INFO),y) 49 48 cflags-y += -fno-asynchronous-unwind-tables 50 - endif 51 49 ifneq ($(CONFIG_DEBUG_INFO),y) 52 50 # -fweb shrinks the kernel a bit, but the difference is very small 53 51 # it also messes up debugging, so don't use it for now.
-2
arch/x86_64/defconfig
··· 1523 1523 # CONFIG_DEBUG_VM is not set 1524 1524 # CONFIG_DEBUG_LIST is not set 1525 1525 # CONFIG_FRAME_POINTER is not set 1526 - CONFIG_UNWIND_INFO=y 1527 - CONFIG_STACK_UNWIND=y 1528 1526 # CONFIG_FORCED_INLINING is not set 1529 1527 # CONFIG_HEADERS_CHECK is not set 1530 1528 # CONFIG_RCU_TORTURE_TEST is not set
-33
arch/x86_64/kernel/entry.S
··· 1155 1155 ret 1156 1156 CFI_ENDPROC 1157 1157 ENDPROC(call_softirq) 1158 - 1159 - #ifdef CONFIG_STACK_UNWIND 1160 - ENTRY(arch_unwind_init_running) 1161 - CFI_STARTPROC 1162 - movq %r15, R15(%rdi) 1163 - movq %r14, R14(%rdi) 1164 - xchgq %rsi, %rdx 1165 - movq %r13, R13(%rdi) 1166 - movq %r12, R12(%rdi) 1167 - xorl %eax, %eax 1168 - movq %rbp, RBP(%rdi) 1169 - movq %rbx, RBX(%rdi) 1170 - movq (%rsp), %rcx 1171 - movq %rax, R11(%rdi) 1172 - movq %rax, R10(%rdi) 1173 - movq %rax, R9(%rdi) 1174 - movq %rax, R8(%rdi) 1175 - movq %rax, RAX(%rdi) 1176 - movq %rax, RCX(%rdi) 1177 - movq %rax, RDX(%rdi) 1178 - movq %rax, RSI(%rdi) 1179 - movq %rax, RDI(%rdi) 1180 - movq %rax, ORIG_RAX(%rdi) 1181 - movq %rcx, RIP(%rdi) 1182 - leaq 8(%rsp), %rcx 1183 - movq $__KERNEL_CS, CS(%rdi) 1184 - movq %rax, EFLAGS(%rdi) 1185 - movq %rcx, RSP(%rdi) 1186 - movq $__KERNEL_DS, SS(%rdi) 1187 - jmpq *%rdx 1188 - CFI_ENDPROC 1189 - ENDPROC(arch_unwind_init_running) 1190 - #endif
-84
arch/x86_64/kernel/traps.c
··· 110 110 } 111 111 112 112 int kstack_depth_to_print = 12; 113 - #ifdef CONFIG_STACK_UNWIND 114 - static int call_trace = 1; 115 - #else 116 - #define call_trace (-1) 117 - #endif 118 113 119 114 #ifdef CONFIG_KALLSYMS 120 115 void printk_address(unsigned long address) ··· 212 217 return NULL; 213 218 } 214 219 215 - struct ops_and_data { 216 - struct stacktrace_ops *ops; 217 - void *data; 218 - }; 219 - 220 - static int dump_trace_unwind(struct unwind_frame_info *info, void *context) 221 - { 222 - struct ops_and_data *oad = (struct ops_and_data *)context; 223 - int n = 0; 224 - unsigned long sp = UNW_SP(info); 225 - 226 - if (arch_unw_user_mode(info)) 227 - return -1; 228 - while (unwind(info) == 0 && UNW_PC(info)) { 229 - n++; 230 - oad->ops->address(oad->data, UNW_PC(info)); 231 - if (arch_unw_user_mode(info)) 232 - break; 233 - if ((sp & ~(PAGE_SIZE - 1)) == (UNW_SP(info) & ~(PAGE_SIZE - 1)) 234 - && sp > UNW_SP(info)) 235 - break; 236 - sp = UNW_SP(info); 237 - } 238 - return n; 239 - } 240 - 241 220 #define MSG(txt) ops->warning(data, txt) 242 221 243 222 /* ··· 239 270 if (!tsk) 240 271 tsk = current; 241 272 242 - if (call_trace >= 0) { 243 - int unw_ret = 0; 244 - struct unwind_frame_info info; 245 - struct ops_and_data oad = { .ops = ops, .data = data }; 246 - 247 - if (regs) { 248 - if (unwind_init_frame_info(&info, tsk, regs) == 0) 249 - unw_ret = dump_trace_unwind(&info, &oad); 250 - } else if (tsk == current) 251 - unw_ret = unwind_init_running(&info, dump_trace_unwind, 252 - &oad); 253 - else { 254 - if (unwind_init_blocked(&info, tsk) == 0) 255 - unw_ret = dump_trace_unwind(&info, &oad); 256 - } 257 - if (unw_ret > 0) { 258 - if (call_trace == 1 && !arch_unw_user_mode(&info)) { 259 - ops->warning_symbol(data, 260 - "DWARF2 unwinder stuck at %s", 261 - UNW_PC(&info)); 262 - if ((long)UNW_SP(&info) < 0) { 263 - MSG("Leftover inexact backtrace:"); 264 - stack = (unsigned long *)UNW_SP(&info); 265 - if (!stack) 266 - goto out; 267 - } else 268 - MSG("Full inexact backtrace again:"); 269 - } else if (call_trace >= 1) 270 - goto out; 271 - else 272 - MSG("Full inexact backtrace again:"); 273 - } else 274 - MSG("Inexact backtrace:"); 275 - } 276 273 if (!stack) { 277 274 unsigned long dummy; 278 275 stack = &dummy; ··· 322 387 tinfo = current_thread_info(); 323 388 HANDLE_STACK (valid_stack_ptr(tinfo, stack)); 324 389 #undef HANDLE_STACK 325 - out: 326 390 put_cpu(); 327 391 } 328 392 EXPORT_SYMBOL(dump_trace); ··· 1122 1188 return 0; 1123 1189 } 1124 1190 early_param("kstack", kstack_setup); 1125 - 1126 - #ifdef CONFIG_STACK_UNWIND 1127 - static int __init call_trace_setup(char *s) 1128 - { 1129 - if (!s) 1130 - return -EINVAL; 1131 - if (strcmp(s, "old") == 0) 1132 - call_trace = -1; 1133 - else if (strcmp(s, "both") == 0) 1134 - call_trace = 0; 1135 - else if (strcmp(s, "newfallback") == 0) 1136 - call_trace = 1; 1137 - else if (strcmp(s, "new") == 0) 1138 - call_trace = 2; 1139 - return 0; 1140 - } 1141 - early_param("call_trace", call_trace_setup); 1142 - #endif
-2
arch/x86_64/kernel/vmlinux.lds.S
··· 221 221 /* Sections to be discarded */ 222 222 /DISCARD/ : { 223 223 *(.exitcall.exit) 224 - #ifndef CONFIG_UNWIND_INFO 225 224 *(.eh_frame) 226 - #endif 227 225 } 228 226 229 227 STABS_DEBUG
+3 -3
drivers/ata/Kconfig
··· 40 40 tristate "Intel PIIX/ICH SATA support" 41 41 depends on PCI 42 42 help 43 - This option enables support for ICH5/6/7/8 Serial ATA. 44 - If PATA support was enabled previously, this enables 45 - support for select Intel PIIX/ICH PATA host controllers. 43 + This option enables support for ICH5/6/7/8 Serial ATA 44 + and support for PATA on the Intel PIIX3/PIIX4/ICH series 45 + PATA host controllers. 46 46 47 47 If unsure, say N. 48 48
-2
drivers/ata/ahci.c
··· 645 645 u32 cap_save, impl_save, tmp; 646 646 647 647 cap_save = readl(mmio + HOST_CAP); 648 - cap_save &= ( (1<<28) | (1<<17) ); 649 - cap_save |= (1 << 27); 650 648 impl_save = readl(mmio + HOST_PORTS_IMPL); 651 649 652 650 /* global controller reset */
+17 -5
drivers/ata/ata_piix.c
··· 226 226 { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 227 227 /* 2801GBM/GHM (ICH7M, identical to ICH6M) */ 228 228 { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6m_sata_ahci }, 229 - /* Enterprise Southbridge 2 (where's the datasheet?) */ 229 + /* Enterprise Southbridge 2 (631xESB/632xESB) */ 230 230 { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 231 - /* SATA Controller 1 IDE (ICH8, no datasheet yet) */ 231 + /* SATA Controller 1 IDE (ICH8) */ 232 232 { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 233 - /* SATA Controller 2 IDE (ICH8, ditto) */ 233 + /* SATA Controller 2 IDE (ICH8) */ 234 234 { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 235 - /* Mobile SATA Controller IDE (ICH8M, ditto) */ 235 + /* Mobile SATA Controller IDE (ICH8M) */ 236 236 { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 237 + /* SATA Controller IDE (ICH9) */ 238 + { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 239 + /* SATA Controller IDE (ICH9) */ 240 + { 0x8086, 0x2921, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 241 + /* SATA Controller IDE (ICH9) */ 242 + { 0x8086, 0x2926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 243 + /* SATA Controller IDE (ICH9M) */ 244 + { 0x8086, 0x2928, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 245 + /* SATA Controller IDE (ICH9M) */ 246 + { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 247 + /* SATA Controller IDE (ICH9M) */ 248 + { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, 237 249 238 250 { } /* terminate list */ 239 251 }; ··· 342 330 343 331 .port_start = ata_port_start, 344 332 .port_stop = ata_port_stop, 345 - .host_stop = ata_host_stop, 333 + .host_stop = piix_host_stop, 346 334 }; 347 335 348 336 static const struct ata_port_operations piix_sata_ops = {
+10 -4
drivers/ata/libata-core.c
··· 1332 1332 } 1333 1333 1334 1334 /** 1335 - * ata_exec_internal_sg - execute libata internal command 1335 + * ata_exec_internal - execute libata internal command 1336 1336 * @dev: Device to which the command is sent 1337 1337 * @tf: Taskfile registers for the command and the result 1338 1338 * @cdb: CDB for packet command ··· 1353 1353 struct ata_taskfile *tf, const u8 *cdb, 1354 1354 int dma_dir, void *buf, unsigned int buflen) 1355 1355 { 1356 - struct scatterlist sg; 1356 + struct scatterlist *psg = NULL, sg; 1357 + unsigned int n_elem = 0; 1357 1358 1358 - sg_init_one(&sg, buf, buflen); 1359 + if (dma_dir != DMA_NONE) { 1360 + WARN_ON(!buf); 1361 + sg_init_one(&sg, buf, buflen); 1362 + psg = &sg; 1363 + n_elem++; 1364 + } 1359 1365 1360 - return ata_exec_internal_sg(dev, tf, cdb, dma_dir, &sg, 1); 1366 + return ata_exec_internal_sg(dev, tf, cdb, dma_dir, psg, n_elem); 1361 1367 } 1362 1368 1363 1369 /**
+2 -2
drivers/ata/libata-scsi.c
··· 1539 1539 struct scatterlist *sg; 1540 1540 1541 1541 sg = (struct scatterlist *) cmd->request_buffer; 1542 - buf = kmap_atomic(sg->page, KM_USER0) + sg->offset; 1542 + buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset; 1543 1543 buflen = sg->length; 1544 1544 } else { 1545 1545 buf = cmd->request_buffer; ··· 1567 1567 struct scatterlist *sg; 1568 1568 1569 1569 sg = (struct scatterlist *) cmd->request_buffer; 1570 - kunmap_atomic(buf - sg->offset, KM_USER0); 1570 + kunmap_atomic(buf - sg->offset, KM_IRQ0); 1571 1571 } 1572 1572 } 1573 1573
+3 -1
drivers/ata/pata_legacy.c
··· 698 698 goto fail_io; 699 699 700 700 pdev = platform_device_register_simple(DRV_NAME, nr_legacy_host, NULL, 0); 701 - if (pdev == NULL) 701 + if (IS_ERR(pdev)) { 702 + ret = PTR_ERR(pdev); 702 703 goto fail_dev; 704 + } 703 705 704 706 if (ht6560a & mask) { 705 707 ops = &ht6560a_port_ops;
+2 -2
drivers/ata/pata_qdi.c
··· 247 247 */ 248 248 249 249 pdev = platform_device_register_simple(DRV_NAME, nr_qdi_host, NULL, 0); 250 - if (pdev == NULL) 251 - return -ENOMEM; 250 + if (IS_ERR(pdev)) 251 + return PTR_ERR(pdev); 252 252 253 253 memset(&ae, 0, sizeof(struct ata_probe_ent)); 254 254 INIT_LIST_HEAD(&ae.node);
-2
drivers/ata/pata_rz1000.c
··· 105 105 .exec_command = ata_exec_command, 106 106 .dev_select = ata_std_dev_select, 107 107 108 - .error_handler = rz1000_error_handler, 109 - 110 108 .bmdma_setup = ata_bmdma_setup, 111 109 .bmdma_start = ata_bmdma_start, 112 110 .bmdma_stop = ata_bmdma_stop,
+7 -2
drivers/ata/pata_via.c
··· 161 161 return -ENOENT; 162 162 } 163 163 164 - if ((config->flags & VIA_UDMA) >= VIA_UDMA_66) 164 + if ((config->flags & VIA_UDMA) >= VIA_UDMA_100) 165 165 ap->cbl = via_cable_detect(ap); 166 - else 166 + /* The UDMA66 series has no cable detect so do drive side detect */ 167 + else if ((config->flags & VIA_UDMA) < VIA_UDMA_66) 167 168 ap->cbl = ATA_CBL_PATA40; 169 + else 170 + ap->cbl = ATA_CBL_PATA_UNK; 171 + 172 + 168 173 return ata_std_prereset(ap); 169 174 } 170 175
+2 -2
drivers/ata/pata_winbond.c
··· 206 206 */ 207 207 208 208 pdev = platform_device_register_simple(DRV_NAME, nr_winbond_host, NULL, 0); 209 - if (pdev == NULL) 210 - return -ENOMEM; 209 + if (IS_ERR(pdev)) 210 + return PTR_ERR(pdev); 211 211 212 212 memset(&ae, 0, sizeof(struct ata_probe_ent)); 213 213 INIT_LIST_HEAD(&ae.node);
+34 -7
drivers/ata/sata_svw.c
··· 56 56 #define DRV_VERSION "2.0" 57 57 58 58 enum { 59 + K2_FLAG_NO_ATAPI_DMA = (1 << 29), 60 + 59 61 /* Taskfile registers offsets */ 60 62 K2_SATA_TF_CMD_OFFSET = 0x00, 61 63 K2_SATA_TF_DATA_OFFSET = 0x00, ··· 85 83 86 84 /* Port stride */ 87 85 K2_SATA_PORT_OFFSET = 0x100, 86 + 87 + board_svw4 = 0, 88 + board_svw8 = 1, 89 + }; 90 + 91 + static const struct k2_board_info { 92 + unsigned int n_ports; 93 + unsigned long port_flags; 94 + } k2_board_info[] = { 95 + /* board_svw4 */ 96 + { 4, K2_FLAG_NO_ATAPI_DMA }, 97 + 98 + /* board_svw8 */ 99 + { 8, K2_FLAG_NO_ATAPI_DMA }, 88 100 }; 89 101 90 102 static u8 k2_stat_check_status(struct ata_port *ap); 91 103 104 + 105 + static int k2_sata_check_atapi_dma(struct ata_queued_cmd *qc) 106 + { 107 + if (qc->ap->flags & K2_FLAG_NO_ATAPI_DMA) 108 + return -1; /* ATAPI DMA not supported */ 109 + 110 + return 0; 111 + } 92 112 93 113 static u32 k2_sata_scr_read (struct ata_port *ap, unsigned int sc_reg) 94 114 { ··· 337 313 .check_status = k2_stat_check_status, 338 314 .exec_command = ata_exec_command, 339 315 .dev_select = ata_std_dev_select, 316 + .check_atapi_dma = k2_sata_check_atapi_dma, 340 317 .bmdma_setup = k2_bmdma_setup_mmio, 341 318 .bmdma_start = k2_bmdma_start_mmio, 342 319 .bmdma_stop = ata_bmdma_stop, ··· 384 359 struct ata_probe_ent *probe_ent = NULL; 385 360 unsigned long base; 386 361 void __iomem *mmio_base; 362 + const struct k2_board_info *board_info = 363 + &k2_board_info[ent->driver_data]; 387 364 int pci_dev_busy = 0; 388 365 int rc; 389 366 int i; ··· 451 424 452 425 probe_ent->sht = &k2_sata_sht; 453 426 probe_ent->port_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | 454 - ATA_FLAG_MMIO; 427 + ATA_FLAG_MMIO | board_info->port_flags; 455 428 probe_ent->port_ops = &k2_sata_ops; 456 429 probe_ent->n_ports = 4; 457 430 probe_ent->irq = pdev->irq; ··· 468 441 /* different controllers have different number of ports - currently 4 or 8 */ 469 442 /* All ports are on the same function. Multi-function device is no 470 443 * longer available. This should not be seen in any system. */ 471 - for (i = 0; i < ent->driver_data; i++) 444 + for (i = 0; i < board_info->n_ports; i++) 472 445 k2_sata_setup_port(&probe_ent->port[i], base + i * K2_SATA_PORT_OFFSET); 473 446 474 447 pci_set_master(pdev); ··· 496 469 * controller 497 470 * */ 498 471 static const struct pci_device_id k2_sata_pci_tbl[] = { 499 - { PCI_VDEVICE(SERVERWORKS, 0x0240), 4 }, 500 - { PCI_VDEVICE(SERVERWORKS, 0x0241), 4 }, 501 - { PCI_VDEVICE(SERVERWORKS, 0x0242), 8 }, 502 - { PCI_VDEVICE(SERVERWORKS, 0x024a), 4 }, 503 - { PCI_VDEVICE(SERVERWORKS, 0x024b), 4 }, 472 + { PCI_VDEVICE(SERVERWORKS, 0x0240), board_svw4 }, 473 + { PCI_VDEVICE(SERVERWORKS, 0x0241), board_svw4 }, 474 + { PCI_VDEVICE(SERVERWORKS, 0x0242), board_svw8 }, 475 + { PCI_VDEVICE(SERVERWORKS, 0x024a), board_svw4 }, 476 + { PCI_VDEVICE(SERVERWORKS, 0x024b), board_svw4 }, 504 477 505 478 { } 506 479 };
+2 -3
drivers/connector/cn_queue.c
··· 34 34 void cn_queue_wrapper(struct work_struct *work) 35 35 { 36 36 struct cn_callback_entry *cbq = 37 - container_of(work, struct cn_callback_entry, work.work); 37 + container_of(work, struct cn_callback_entry, work); 38 38 struct cn_callback_data *d = &cbq->data; 39 39 40 40 d->callback(d->callback_priv); ··· 59 59 memcpy(&cbq->id.id, id, sizeof(struct cb_id)); 60 60 cbq->data.callback = callback; 61 61 62 - INIT_DELAYED_WORK(&cbq->work, &cn_queue_wrapper); 62 + INIT_WORK(&cbq->work, &cn_queue_wrapper); 63 63 return cbq; 64 64 } 65 65 66 66 static void cn_queue_free_callback(struct cn_callback_entry *cbq) 67 67 { 68 - cancel_delayed_work(&cbq->work); 69 68 flush_workqueue(cbq->pdev->cn_queue); 70 69 71 70 kfree(cbq);
+7 -10
drivers/connector/connector.c
··· 135 135 spin_lock_bh(&dev->cbdev->queue_lock); 136 136 list_for_each_entry(__cbq, &dev->cbdev->queue_list, callback_entry) { 137 137 if (cn_cb_equal(&__cbq->id.id, &msg->id)) { 138 - if (likely(!test_bit(WORK_STRUCT_PENDING, 139 - &__cbq->work.work.management) && 138 + if (likely(!work_pending(&__cbq->work) && 140 139 __cbq->data.ddata == NULL)) { 141 140 __cbq->data.callback_priv = msg; 142 141 143 142 __cbq->data.ddata = data; 144 143 __cbq->data.destruct_data = destruct_data; 145 144 146 - if (queue_delayed_work( 147 - dev->cbdev->cn_queue, 148 - &__cbq->work, 0)) 145 + if (queue_work(dev->cbdev->cn_queue, 146 + &__cbq->work)) 149 147 err = 0; 150 148 } else { 151 149 struct cn_callback_data *d; ··· 157 159 d->destruct_data = destruct_data; 158 160 d->free = __cbq; 159 161 160 - INIT_DELAYED_WORK(&__cbq->work, 161 - &cn_queue_wrapper); 162 + INIT_WORK(&__cbq->work, 163 + &cn_queue_wrapper); 162 164 163 - if (queue_delayed_work( 164 - dev->cbdev->cn_queue, 165 - &__cbq->work, 0)) 165 + if (queue_work(dev->cbdev->cn_queue, 166 + &__cbq->work)) 166 167 err = 0; 167 168 else { 168 169 kfree(__cbq);
+1 -1
drivers/cpufreq/cpufreq.c
··· 959 959 960 960 961 961 /** 962 - * cpufreq_quick_get - get the CPU frequency (in kHz) frpm policy->cur 962 + * cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur 963 963 * @cpu: CPU number 964 964 * 965 965 * This is the last known freq, without actually getting it from the driver.
+44
drivers/hid/hid-input.c
··· 415 415 case 0x000: goto ignore; 416 416 case 0x034: map_key_clear(KEY_SLEEP); break; 417 417 case 0x036: map_key_clear(BTN_MISC); break; 418 + case 0x040: map_key_clear(KEY_MENU); break; 418 419 case 0x045: map_key_clear(KEY_RADIO); break; 420 + 421 + case 0x088: map_key_clear(KEY_PC); break; 422 + case 0x089: map_key_clear(KEY_TV); break; 419 423 case 0x08a: map_key_clear(KEY_WWW); break; 424 + case 0x08b: map_key_clear(KEY_DVD); break; 425 + case 0x08c: map_key_clear(KEY_PHONE); break; 420 426 case 0x08d: map_key_clear(KEY_PROGRAM); break; 427 + case 0x08e: map_key_clear(KEY_VIDEOPHONE); break; 428 + case 0x08f: map_key_clear(KEY_GAMES); break; 429 + case 0x090: map_key_clear(KEY_MEMO); break; 430 + case 0x091: map_key_clear(KEY_CD); break; 431 + case 0x092: map_key_clear(KEY_VCR); break; 432 + case 0x093: map_key_clear(KEY_TUNER); break; 433 + case 0x094: map_key_clear(KEY_EXIT); break; 421 434 case 0x095: map_key_clear(KEY_HELP); break; 435 + case 0x096: map_key_clear(KEY_TAPE); break; 436 + case 0x097: map_key_clear(KEY_TV2); break; 437 + case 0x098: map_key_clear(KEY_SAT); break; 438 + 422 439 case 0x09c: map_key_clear(KEY_CHANNELUP); break; 423 440 case 0x09d: map_key_clear(KEY_CHANNELDOWN); break; 441 + case 0x0a0: map_key_clear(KEY_VCR2); break; 442 + 424 443 case 0x0b0: map_key_clear(KEY_PLAY); break; 425 444 case 0x0b1: map_key_clear(KEY_PAUSE); break; 426 445 case 0x0b2: map_key_clear(KEY_RECORD); break; ··· 449 430 case 0x0b6: map_key_clear(KEY_PREVIOUSSONG); break; 450 431 case 0x0b7: map_key_clear(KEY_STOPCD); break; 451 432 case 0x0b8: map_key_clear(KEY_EJECTCD); break; 433 + 452 434 case 0x0cd: map_key_clear(KEY_PLAYPAUSE); break; 453 435 case 0x0e0: map_abs_clear(ABS_VOLUME); break; 454 436 case 0x0e2: map_key_clear(KEY_MUTE); break; ··· 457 437 case 0x0e9: map_key_clear(KEY_VOLUMEUP); break; 458 438 case 0x0ea: map_key_clear(KEY_VOLUMEDOWN); break; 459 439 case 0x183: map_key_clear(KEY_CONFIG); break; 440 + case 0x184: map_key_clear(KEY_WORDPROCESSOR); break; 441 + case 0x185: map_key_clear(KEY_EDITOR); break; 442 + case 0x186: map_key_clear(KEY_SPREADSHEET); break; 443 + case 0x187: map_key_clear(KEY_GRAPHICSEDITOR); break; 444 + case 0x188: map_key_clear(KEY_PRESENTATION); break; 445 + case 0x189: map_key_clear(KEY_DATABASE); break; 460 446 case 0x18a: map_key_clear(KEY_MAIL); break; 447 + case 0x18b: map_key_clear(KEY_NEWS); break; 448 + case 0x18c: map_key_clear(KEY_VOICEMAIL); break; 449 + case 0x18d: map_key_clear(KEY_ADDRESSBOOK); break; 450 + case 0x18e: map_key_clear(KEY_CALENDAR); break; 451 + case 0x191: map_key_clear(KEY_FINANCE); break; 461 452 case 0x192: map_key_clear(KEY_CALC); break; 462 453 case 0x194: map_key_clear(KEY_FILE); break; 454 + case 0x196: map_key_clear(KEY_WWW); break; 455 + case 0x19e: map_key_clear(KEY_COFFEE); break; 456 + case 0x1a6: map_key_clear(KEY_HELP); break; 463 457 case 0x1a7: map_key_clear(KEY_DOCUMENTS); break; 458 + case 0x1bc: map_key_clear(KEY_MESSENGER); break; 459 + case 0x1bd: map_key_clear(KEY_INFO); break; 464 460 case 0x201: map_key_clear(KEY_NEW); break; 461 + case 0x202: map_key_clear(KEY_OPEN); break; 462 + case 0x203: map_key_clear(KEY_CLOSE); break; 463 + case 0x204: map_key_clear(KEY_EXIT); break; 465 464 case 0x207: map_key_clear(KEY_SAVE); break; 466 465 case 0x208: map_key_clear(KEY_PRINT); break; 467 466 case 0x209: map_key_clear(KEY_PROPS); break; ··· 495 456 case 0x226: map_key_clear(KEY_STOP); break; 496 457 case 0x227: map_key_clear(KEY_REFRESH); break; 497 458 case 0x22a: map_key_clear(KEY_BOOKMARKS); break; 459 + case 0x22d: map_key_clear(KEY_ZOOMIN); break; 460 + case 0x22e: map_key_clear(KEY_ZOOMOUT); break; 461 + case 0x22f: map_key_clear(KEY_ZOOMRESET); break; 498 462 case 0x233: map_key_clear(KEY_SCROLLUP); break; 499 463 case 0x234: map_key_clear(KEY_SCROLLDOWN); break; 500 464 case 0x238: map_rel(REL_HWHEEL); break; 465 + case 0x25f: map_key_clear(KEY_CANCEL); break; 501 466 case 0x279: map_key_clear(KEY_REDO); break; 467 + 502 468 case 0x289: map_key_clear(KEY_REPLY); break; 503 469 case 0x28b: map_key_clear(KEY_FORWARDMAIL); break; 504 470 case 0x28c: map_key_clear(KEY_SEND); break;
+97 -16
drivers/infiniband/hw/mthca/mthca_main.c
··· 80 80 module_param(tune_pci, int, 0444); 81 81 MODULE_PARM_DESC(tune_pci, "increase PCI burst from the default set by BIOS if nonzero"); 82 82 83 - struct mutex mthca_device_mutex; 83 + DEFINE_MUTEX(mthca_device_mutex); 84 + 85 + #define MTHCA_DEFAULT_NUM_QP (1 << 16) 86 + #define MTHCA_DEFAULT_RDB_PER_QP (1 << 2) 87 + #define MTHCA_DEFAULT_NUM_CQ (1 << 16) 88 + #define MTHCA_DEFAULT_NUM_MCG (1 << 13) 89 + #define MTHCA_DEFAULT_NUM_MPT (1 << 17) 90 + #define MTHCA_DEFAULT_NUM_MTT (1 << 20) 91 + #define MTHCA_DEFAULT_NUM_UDAV (1 << 15) 92 + #define MTHCA_DEFAULT_NUM_RESERVED_MTTS (1 << 18) 93 + #define MTHCA_DEFAULT_NUM_UARC_SIZE (1 << 18) 94 + 95 + static struct mthca_profile hca_profile = { 96 + .num_qp = MTHCA_DEFAULT_NUM_QP, 97 + .rdb_per_qp = MTHCA_DEFAULT_RDB_PER_QP, 98 + .num_cq = MTHCA_DEFAULT_NUM_CQ, 99 + .num_mcg = MTHCA_DEFAULT_NUM_MCG, 100 + .num_mpt = MTHCA_DEFAULT_NUM_MPT, 101 + .num_mtt = MTHCA_DEFAULT_NUM_MTT, 102 + .num_udav = MTHCA_DEFAULT_NUM_UDAV, /* Tavor only */ 103 + .fmr_reserved_mtts = MTHCA_DEFAULT_NUM_RESERVED_MTTS, /* Tavor only */ 104 + .uarc_size = MTHCA_DEFAULT_NUM_UARC_SIZE, /* Arbel only */ 105 + }; 106 + 107 + module_param_named(num_qp, hca_profile.num_qp, int, 0444); 108 + MODULE_PARM_DESC(num_qp, "maximum number of QPs per HCA"); 109 + 110 + module_param_named(rdb_per_qp, hca_profile.rdb_per_qp, int, 0444); 111 + MODULE_PARM_DESC(rdb_per_qp, "number of RDB buffers per QP"); 112 + 113 + module_param_named(num_cq, hca_profile.num_cq, int, 0444); 114 + MODULE_PARM_DESC(num_cq, "maximum number of CQs per HCA"); 115 + 116 + module_param_named(num_mcg, hca_profile.num_mcg, int, 0444); 117 + MODULE_PARM_DESC(num_mcg, "maximum number of multicast groups per HCA"); 118 + 119 + module_param_named(num_mpt, hca_profile.num_mpt, int, 0444); 120 + MODULE_PARM_DESC(num_mpt, 121 + "maximum number of memory protection table entries per HCA"); 122 + 123 + module_param_named(num_mtt, hca_profile.num_mtt, int, 0444); 124 + MODULE_PARM_DESC(num_mtt, 125 + "maximum number of memory translation table segments per HCA"); 126 + 127 + module_param_named(num_udav, hca_profile.num_udav, int, 0444); 128 + MODULE_PARM_DESC(num_udav, "maximum number of UD address vectors per HCA"); 129 + 130 + module_param_named(fmr_reserved_mtts, hca_profile.fmr_reserved_mtts, int, 0444); 131 + MODULE_PARM_DESC(fmr_reserved_mtts, 132 + "number of memory translation table segments reserved for FMR"); 84 133 85 134 static const char mthca_version[] __devinitdata = 86 135 DRV_NAME ": Mellanox InfiniBand HCA driver v" 87 136 DRV_VERSION " (" DRV_RELDATE ")\n"; 88 - 89 - static struct mthca_profile default_profile = { 90 - .num_qp = 1 << 16, 91 - .rdb_per_qp = 4, 92 - .num_cq = 1 << 16, 93 - .num_mcg = 1 << 13, 94 - .num_mpt = 1 << 17, 95 - .num_mtt = 1 << 20, 96 - .num_udav = 1 << 15, /* Tavor only */ 97 - .fmr_reserved_mtts = 1 << 18, /* Tavor only */ 98 - .uarc_size = 1 << 18, /* Arbel only */ 99 - }; 100 137 101 138 static int mthca_tune_pci(struct mthca_dev *mdev) 102 139 { ··· 340 303 goto err_disable; 341 304 } 342 305 343 - profile = default_profile; 306 + profile = hca_profile; 344 307 profile.num_uar = dev_lim.uar_size / PAGE_SIZE; 345 308 profile.uarc_size = 0; 346 309 if (mdev->mthca_flags & MTHCA_FLAG_SRQ) ··· 658 621 goto err_stop_fw; 659 622 } 660 623 661 - profile = default_profile; 624 + profile = hca_profile; 662 625 profile.num_uar = dev_lim.uar_size / PAGE_SIZE; 663 626 profile.num_udav = 0; 664 627 if (mdev->mthca_flags & MTHCA_FLAG_SRQ) ··· 1315 1278 .remove = __devexit_p(mthca_remove_one) 1316 1279 }; 1317 1280 1281 + static void __init __mthca_check_profile_val(const char *name, int *pval, 1282 + int pval_default) 1283 + { 1284 + /* value must be positive and power of 2 */ 1285 + int old_pval = *pval; 1286 + 1287 + if (old_pval <= 0) 1288 + *pval = pval_default; 1289 + else 1290 + *pval = roundup_pow_of_two(old_pval); 1291 + 1292 + if (old_pval != *pval) { 1293 + printk(KERN_WARNING PFX "Invalid value %d for %s in module parameter.\n", 1294 + old_pval, name); 1295 + printk(KERN_WARNING PFX "Corrected %s to %d.\n", name, *pval); 1296 + } 1297 + } 1298 + 1299 + #define mthca_check_profile_val(name, default) \ 1300 + __mthca_check_profile_val(#name, &hca_profile.name, default) 1301 + 1302 + static void __init mthca_validate_profile(void) 1303 + { 1304 + mthca_check_profile_val(num_qp, MTHCA_DEFAULT_NUM_QP); 1305 + mthca_check_profile_val(rdb_per_qp, MTHCA_DEFAULT_RDB_PER_QP); 1306 + mthca_check_profile_val(num_cq, MTHCA_DEFAULT_NUM_CQ); 1307 + mthca_check_profile_val(num_mcg, MTHCA_DEFAULT_NUM_MCG); 1308 + mthca_check_profile_val(num_mpt, MTHCA_DEFAULT_NUM_MPT); 1309 + mthca_check_profile_val(num_mtt, MTHCA_DEFAULT_NUM_MTT); 1310 + mthca_check_profile_val(num_udav, MTHCA_DEFAULT_NUM_UDAV); 1311 + mthca_check_profile_val(fmr_reserved_mtts, MTHCA_DEFAULT_NUM_RESERVED_MTTS); 1312 + 1313 + if (hca_profile.fmr_reserved_mtts >= hca_profile.num_mtt) { 1314 + printk(KERN_WARNING PFX "Invalid fmr_reserved_mtts module parameter %d.\n", 1315 + hca_profile.fmr_reserved_mtts); 1316 + printk(KERN_WARNING PFX "(Must be smaller than num_mtt %d)\n", 1317 + hca_profile.num_mtt); 1318 + hca_profile.fmr_reserved_mtts = hca_profile.num_mtt / 2; 1319 + printk(KERN_WARNING PFX "Corrected fmr_reserved_mtts to %d.\n", 1320 + hca_profile.fmr_reserved_mtts); 1321 + } 1322 + } 1323 + 1318 1324 static int __init mthca_init(void) 1319 1325 { 1320 1326 int ret; 1321 1327 1322 - mutex_init(&mthca_device_mutex); 1328 + mthca_validate_profile(); 1329 + 1323 1330 ret = mthca_catas_init(); 1324 1331 if (ret) 1325 1332 return ret;
+1 -1
drivers/infiniband/ulp/srp/ib_srp.c
··· 1898 1898 */ 1899 1899 srp_dev->fmr_page_shift = max(9, ffs(dev_attr->page_size_cap) - 1); 1900 1900 srp_dev->fmr_page_size = 1 << srp_dev->fmr_page_shift; 1901 - srp_dev->fmr_page_mask = ~((unsigned long) srp_dev->fmr_page_size - 1); 1901 + srp_dev->fmr_page_mask = ~((u64) srp_dev->fmr_page_size - 1); 1902 1902 1903 1903 INIT_LIST_HEAD(&srp_dev->dev_list); 1904 1904
+1 -1
drivers/infiniband/ulp/srp/ib_srp.h
··· 87 87 struct ib_fmr_pool *fmr_pool; 88 88 int fmr_page_shift; 89 89 int fmr_page_size; 90 - unsigned long fmr_page_mask; 90 + u64 fmr_page_mask; 91 91 }; 92 92 93 93 struct srp_host {
+1 -1
drivers/input/keyboard/amikbd.c
··· 187 187 188 188 static int __init amikbd_init(void) 189 189 { 190 - int i, j; 190 + int i, j, err; 191 191 192 192 if (!AMIGAHW_PRESENT(AMI_KEYBOARD)) 193 193 return -ENODEV;
+1 -1
drivers/input/keyboard/sunkbd.c
··· 225 225 static void sunkbd_enable(struct sunkbd *sunkbd, int enable) 226 226 { 227 227 serio_pause_rx(sunkbd->serio); 228 - sunkbd->enabled = 1; 228 + sunkbd->enabled = enable; 229 229 serio_continue_rx(sunkbd->serio); 230 230 } 231 231
+15 -8
drivers/net/bnx2.c
··· 57 57 58 58 #define DRV_MODULE_NAME "bnx2" 59 59 #define PFX DRV_MODULE_NAME ": " 60 - #define DRV_MODULE_VERSION "1.5.1" 61 - #define DRV_MODULE_RELDATE "November 15, 2006" 60 + #define DRV_MODULE_VERSION "1.5.2" 61 + #define DRV_MODULE_RELDATE "December 13, 2006" 62 62 63 63 #define RUN_AT(x) (jiffies + (x)) 64 64 ··· 217 217 u32 diff; 218 218 219 219 smp_mb(); 220 - diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons); 221 - if (diff > MAX_TX_DESC_CNT) 222 - diff = (diff & MAX_TX_DESC_CNT) - 1; 220 + 221 + /* The ring uses 256 indices for 255 entries, one of them 222 + * needs to be skipped. 223 + */ 224 + diff = bp->tx_prod - bp->tx_cons; 225 + if (unlikely(diff >= TX_DESC_CNT)) { 226 + diff &= 0xffff; 227 + if (diff == TX_DESC_CNT) 228 + diff = MAX_TX_DESC_CNT; 229 + } 223 230 return (bp->tx_ring_size - diff); 224 231 } 225 232 ··· 3096 3089 3097 3090 if ((align_start = (offset32 & 3))) { 3098 3091 offset32 &= ~3; 3099 - len32 += align_start; 3092 + len32 += (4 - align_start); 3100 3093 if ((rc = bnx2_nvram_read(bp, offset32, start, 4))) 3101 3094 return rc; 3102 3095 } ··· 3114 3107 3115 3108 if (align_start || align_end) { 3116 3109 buf = kmalloc(len32, GFP_KERNEL); 3117 - if (buf == 0) 3110 + if (buf == NULL) 3118 3111 return -ENOMEM; 3119 3112 if (align_start) { 3120 3113 memcpy(buf, start, 4); ··· 4005 3998 if (!skb) 4006 3999 return -ENOMEM; 4007 4000 packet = skb_put(skb, pkt_size); 4008 - memcpy(packet, bp->mac_addr, 6); 4001 + memcpy(packet, bp->dev->dev_addr, 6); 4009 4002 memset(packet + 6, 0x0, 8); 4010 4003 for (i = 14; i < pkt_size; i++) 4011 4004 packet[i] = (unsigned char) (i & 0xff);
+27 -15
drivers/net/tg3.c
··· 68 68 69 69 #define DRV_MODULE_NAME "tg3" 70 70 #define PFX DRV_MODULE_NAME ": " 71 - #define DRV_MODULE_VERSION "3.70" 72 - #define DRV_MODULE_RELDATE "December 1, 2006" 71 + #define DRV_MODULE_VERSION "3.71" 72 + #define DRV_MODULE_RELDATE "December 15, 2006" 73 73 74 74 #define TG3_DEF_MAC_MODE 0 75 75 #define TG3_DEF_RX_MODE 0 ··· 959 959 u32 phy_status; 960 960 int err; 961 961 962 + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 963 + u32 val; 964 + 965 + val = tr32(GRC_MISC_CFG); 966 + tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 967 + udelay(40); 968 + } 962 969 err = tg3_readphy(tp, MII_BMSR, &phy_status); 963 970 err |= tg3_readphy(tp, MII_BMSR, &phy_status); 964 971 if (err != 0) ··· 1177 1170 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) 1178 1171 return; 1179 1172 1180 - if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) { 1173 + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 1174 + u32 val; 1175 + 1176 + tg3_bmcr_reset(tp); 1177 + val = tr32(GRC_MISC_CFG); 1178 + tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 1179 + udelay(40); 1180 + return; 1181 + } else { 1181 1182 tg3_writephy(tp, MII_TG3_EXT_CTRL, 1182 1183 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 1183 1184 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2); ··· 4441 4426 */ 4442 4427 static int tg3_alloc_consistent(struct tg3 *tp) 4443 4428 { 4444 - tp->rx_std_buffers = kmalloc((sizeof(struct ring_info) * 4429 + tp->rx_std_buffers = kzalloc((sizeof(struct ring_info) * 4445 4430 (TG3_RX_RING_SIZE + 4446 4431 TG3_RX_JUMBO_RING_SIZE)) + 4447 4432 (sizeof(struct tx_ring_info) * ··· 4449 4434 GFP_KERNEL); 4450 4435 if (!tp->rx_std_buffers) 4451 4436 return -ENOMEM; 4452 - 4453 - memset(tp->rx_std_buffers, 0, 4454 - (sizeof(struct ring_info) * 4455 - (TG3_RX_RING_SIZE + 4456 - TG3_RX_JUMBO_RING_SIZE)) + 4457 - (sizeof(struct tx_ring_info) * 4458 - TG3_TX_RING_SIZE)); 4459 4437 4460 4438 tp->rx_jumbo_buffers = &tp->rx_std_buffers[TG3_RX_RING_SIZE]; 4461 4439 tp->tx_buffers = (struct tx_ring_info *) ··· 6996 6988 struct tg3 *tp = netdev_priv(dev); 6997 6989 int err; 6998 6990 6991 + netif_carrier_off(tp->dev); 6992 + 6999 6993 tg3_full_lock(tp, 0); 7000 6994 7001 6995 err = tg3_set_power_state(tp, PCI_D0); ··· 7990 7980 tp->link_config.speed = cmd->speed; 7991 7981 tp->link_config.duplex = cmd->duplex; 7992 7982 } 7983 + 7984 + tp->link_config.orig_speed = tp->link_config.speed; 7985 + tp->link_config.orig_duplex = tp->link_config.duplex; 7986 + tp->link_config.orig_autoneg = tp->link_config.autoneg; 7993 7987 7994 7988 if (netif_running(dev)) 7995 7989 tg3_setup_phy(tp, 1); ··· 11937 11923 */ 11938 11924 pci_save_state(tp->pdev); 11939 11925 11926 + pci_set_drvdata(pdev, dev); 11927 + 11940 11928 err = register_netdev(dev); 11941 11929 if (err) { 11942 11930 printk(KERN_ERR PFX "Cannot register net device, " 11943 11931 "aborting.\n"); 11944 11932 goto err_out_iounmap; 11945 11933 } 11946 - 11947 - pci_set_drvdata(pdev, dev); 11948 11934 11949 11935 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (%s) %s Ethernet ", 11950 11936 dev->name, ··· 11975 11961 dev->name, tp->dma_rwctrl, 11976 11962 (pdev->dma_mask == DMA_32BIT_MASK) ? 32 : 11977 11963 (((u64) pdev->dma_mask == DMA_40BIT_MASK) ? 40 : 64)); 11978 - 11979 - netif_carrier_off(tp->dev); 11980 11964 11981 11965 return 0; 11982 11966
+1
drivers/net/tg3.h
··· 1350 1350 #define GRC_MISC_CFG_BOARD_ID_5788 0x00010000 1351 1351 #define GRC_MISC_CFG_BOARD_ID_5788M 0x00018000 1352 1352 #define GRC_MISC_CFG_BOARD_ID_AC91002A1 0x00018000 1353 + #define GRC_MISC_CFG_EPHY_IDDQ 0x00200000 1353 1354 #define GRC_MISC_CFG_KEEP_GPHY_POWER 0x04000000 1354 1355 #define GRC_LOCAL_CTRL 0x00006808 1355 1356 #define GRC_LCLCTRL_INT_ACTIVE 0x00000001
+2
drivers/s390/char/sclp_cpi.c
··· 49 49 .send_mask = EvTyp_CtlProgIdent_Mask 50 50 }; 51 51 52 + MODULE_LICENSE("GPL"); 53 + 52 54 MODULE_AUTHOR( 53 55 "Martin Peschke, IBM Deutschland Entwicklung GmbH " 54 56 "<mpeschke@de.ibm.com>");
+23 -2
drivers/s390/cio/cio.c
··· 871 871 return -EBUSY; 872 872 } 873 873 874 + static int pgm_check_occured; 875 + 876 + static void cio_reset_pgm_check_handler(void) 877 + { 878 + pgm_check_occured = 1; 879 + } 880 + 881 + static int stsch_reset(struct subchannel_id schid, volatile struct schib *addr) 882 + { 883 + int rc; 884 + 885 + pgm_check_occured = 0; 886 + s390_reset_pgm_handler = cio_reset_pgm_check_handler; 887 + rc = stsch(schid, addr); 888 + s390_reset_pgm_handler = NULL; 889 + if (pgm_check_occured) 890 + return -EIO; 891 + else 892 + return rc; 893 + } 894 + 874 895 static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data) 875 896 { 876 897 struct schib schib; 877 898 878 - if (stsch_err(schid, &schib)) 899 + if (stsch_reset(schid, &schib)) 879 900 return -ENXIO; 880 901 if (!schib.pmcw.ena) 881 902 return 0; ··· 993 972 struct schib schib; 994 973 struct sch_match_id *match_id = data; 995 974 996 - if (stsch_err(schid, &schib)) 975 + if (stsch_reset(schid, &schib)) 997 976 return -ENXIO; 998 977 if (schib.pmcw.dnv && 999 978 (schib.pmcw.dev == match_id->devid.devno) &&
+2 -1
drivers/s390/cio/css.c
··· 139 139 sch->dev.release = &css_subchannel_release; 140 140 sch->dev.groups = subch_attr_groups; 141 141 142 + css_get_ssd_info(sch); 143 + 142 144 /* make it known to the system */ 143 145 ret = css_sch_device_register(sch); 144 146 if (ret) { ··· 148 146 __func__, sch->dev.bus_id); 149 147 return ret; 150 148 } 151 - css_get_ssd_info(sch); 152 149 return ret; 153 150 } 154 151
+8 -5
drivers/s390/cio/qdio.c
··· 979 979 980 980 if (q->is_iqdio_q) { 981 981 /* 982 - * for asynchronous queues, we better check, if the fill 983 - * level is too high. for synchronous queues, the fill 984 - * level will never be that high. 982 + * for asynchronous queues, we better check, if the sent 983 + * buffer is already switched from PRIMED to EMPTY. 985 984 */ 986 - if (atomic_read(&q->number_of_buffers_used)> 987 - IQDIO_FILL_LEVEL_TO_POLL) 985 + if ((q->queue_type == QDIO_IQDIO_QFMT_ASYNCH) && 986 + !qdio_is_outbound_q_done(q)) 988 987 qdio_mark_q(q); 989 988 990 989 } else if (!q->hydra_gives_outbound_pcis) ··· 1824 1825 q->sbal[j]=*(outbound_sbals_array++); 1825 1826 1826 1827 q->queue_type=q_format; 1828 + if ((q->queue_type == QDIO_IQDIO_QFMT) && 1829 + (no_output_qs > 1) && 1830 + (i == no_output_qs-1)) 1831 + q->queue_type = QDIO_IQDIO_QFMT_ASYNCH; 1827 1832 q->int_parm=int_parm; 1828 1833 q->is_input_q=0; 1829 1834 q->schid = irq_ptr->schid;
+12 -2
drivers/s390/crypto/ap_bus.c
··· 1129 1129 mutex_unlock(&ap_poll_thread_mutex); 1130 1130 } 1131 1131 1132 - static void ap_reset(void) 1132 + static void ap_reset_domain(void) 1133 + { 1134 + int i; 1135 + 1136 + for (i = 0; i < AP_DEVICES; i++) 1137 + ap_reset_queue(AP_MKQID(i, ap_domain_index)); 1138 + } 1139 + 1140 + static void ap_reset_all(void) 1133 1141 { 1134 1142 int i, j; 1135 1143 ··· 1147 1139 } 1148 1140 1149 1141 static struct reset_call ap_reset_call = { 1150 - .fn = ap_reset, 1142 + .fn = ap_reset_all, 1151 1143 }; 1152 1144 1153 1145 /** ··· 1237 1229 int i; 1238 1230 struct device *dev; 1239 1231 1232 + ap_reset_domain(); 1240 1233 ap_poll_thread_stop(); 1241 1234 del_timer_sync(&ap_config_timer); 1242 1235 del_timer_sync(&ap_poll_timer); 1243 1236 destroy_workqueue(ap_work_queue); 1237 + tasklet_kill(&ap_tasklet); 1244 1238 s390_root_dev_unregister(ap_root_device); 1245 1239 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL, 1246 1240 __ap_match_all)))
+3 -3
drivers/scsi/sun3_NCR5380.c
··· 266 266 (struct NCR5380_hostdata *)(in)->hostdata 267 267 #define HOSTDATA(in) ((struct NCR5380_hostdata *)(in)->hostdata) 268 268 269 - #define NEXT(cmd) ((struct scsi_cmnd *)((cmd)->host_scribble)) 269 + #define NEXT(cmd) (*(struct scsi_cmnd **)&((cmd)->host_scribble)) 270 270 #define NEXTADDR(cmd) ((struct scsi_cmnd **)&((cmd)->host_scribble)) 271 271 272 272 #define HOSTNO instance->host_no ··· 650 650 #include <linux/interrupt.h> 651 651 652 652 static volatile int main_running = 0; 653 - static DECLARE_WORK(NCR5380_tqueue, (void (*)(void*))NCR5380_main, NULL); 653 + static DECLARE_WORK(NCR5380_tqueue, NCR5380_main); 654 654 655 655 static __inline__ void queue_main(void) 656 656 { ··· 1031 1031 * reenable them. This prevents reentrancy and kernel stack overflow. 1032 1032 */ 1033 1033 1034 - static void NCR5380_main (void *bl) 1034 + static void NCR5380_main (struct work_struct *bl) 1035 1035 { 1036 1036 struct scsi_cmnd *tmp, *prev; 1037 1037 struct Scsi_Host *instance = first_instance;
+2 -1
drivers/usb/input/Kconfig
··· 7 7 config USB_HID 8 8 tristate "USB Human Interface Device (full HID) support" 9 9 default y 10 - depends on USB && HID 10 + depends on USB 11 + select HID 11 12 ---help--- 12 13 Say Y here if you want full HID support to connect USB keyboards, 13 14 mice, joysticks, graphic tablets, or any other HID based devices
-22
include/asm-generic/vmlinux.lds.h
··· 119 119 *(__ksymtab_strings) \ 120 120 } \ 121 121 \ 122 - EH_FRAME \ 123 - \ 124 122 /* Built-in module parameters. */ \ 125 123 __param : AT(ADDR(__param) - LOAD_OFFSET) { \ 126 124 VMLINUX_SYMBOL(__start___param) = .; \ ··· 157 159 VMLINUX_SYMBOL(__kprobes_text_start) = .; \ 158 160 *(.kprobes.text) \ 159 161 VMLINUX_SYMBOL(__kprobes_text_end) = .; 160 - 161 - #ifdef CONFIG_STACK_UNWIND 162 - #define EH_FRAME \ 163 - /* Unwind data binary search table */ \ 164 - . = ALIGN(8); \ 165 - .eh_frame_hdr : AT(ADDR(.eh_frame_hdr) - LOAD_OFFSET) { \ 166 - VMLINUX_SYMBOL(__start_unwind_hdr) = .; \ 167 - *(.eh_frame_hdr) \ 168 - VMLINUX_SYMBOL(__end_unwind_hdr) = .; \ 169 - } \ 170 - /* Unwind data */ \ 171 - . = ALIGN(8); \ 172 - .eh_frame : AT(ADDR(.eh_frame) - LOAD_OFFSET) { \ 173 - VMLINUX_SYMBOL(__start_unwind) = .; \ 174 - *(.eh_frame) \ 175 - VMLINUX_SYMBOL(__end_unwind) = .; \ 176 - } 177 - #else 178 - #define EH_FRAME 179 - #endif 180 162 181 163 /* DWARF debug sections. 182 164 Symbols in the DWARF debugging sections are relative to
-91
include/asm-i386/unwind.h
··· 1 1 #ifndef _ASM_I386_UNWIND_H 2 2 #define _ASM_I386_UNWIND_H 3 3 4 - /* 5 - * Copyright (C) 2002-2006 Novell, Inc. 6 - * Jan Beulich <jbeulich@novell.com> 7 - * This code is released under version 2 of the GNU GPL. 8 - */ 9 - 10 - #ifdef CONFIG_STACK_UNWIND 11 - 12 - #include <linux/sched.h> 13 - #include <asm/fixmap.h> 14 - #include <asm/ptrace.h> 15 - #include <asm/uaccess.h> 16 - 17 - struct unwind_frame_info 18 - { 19 - struct pt_regs regs; 20 - struct task_struct *task; 21 - unsigned call_frame:1; 22 - }; 23 - 24 - #define UNW_PC(frame) (frame)->regs.eip 25 - #define UNW_SP(frame) (frame)->regs.esp 26 - #ifdef CONFIG_FRAME_POINTER 27 - #define UNW_FP(frame) (frame)->regs.ebp 28 - #define FRAME_RETADDR_OFFSET 4 29 - #define FRAME_LINK_OFFSET 0 30 - #define STACK_BOTTOM(tsk) STACK_LIMIT((tsk)->thread.esp0) 31 - #define STACK_TOP(tsk) ((tsk)->thread.esp0) 32 - #else 33 - #define UNW_FP(frame) ((void)(frame), 0) 34 - #endif 35 - #define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1)) 36 - 37 - #define UNW_REGISTER_INFO \ 38 - PTREGS_INFO(eax), \ 39 - PTREGS_INFO(ecx), \ 40 - PTREGS_INFO(edx), \ 41 - PTREGS_INFO(ebx), \ 42 - PTREGS_INFO(esp), \ 43 - PTREGS_INFO(ebp), \ 44 - PTREGS_INFO(esi), \ 45 - PTREGS_INFO(edi), \ 46 - PTREGS_INFO(eip) 47 - 48 - #define UNW_DEFAULT_RA(raItem, dataAlign) \ 49 - ((raItem).where == Memory && \ 50 - !((raItem).value * (dataAlign) + 4)) 51 - 52 - static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, 53 - /*const*/ struct pt_regs *regs) 54 - { 55 - if (user_mode_vm(regs)) 56 - info->regs = *regs; 57 - else { 58 - memcpy(&info->regs, regs, offsetof(struct pt_regs, esp)); 59 - info->regs.esp = (unsigned long)&regs->esp; 60 - info->regs.xss = __KERNEL_DS; 61 - } 62 - } 63 - 64 - static inline void arch_unw_init_blocked(struct unwind_frame_info *info) 65 - { 66 - memset(&info->regs, 0, sizeof(info->regs)); 67 - info->regs.eip = info->task->thread.eip; 68 - info->regs.xcs = __KERNEL_CS; 69 - __get_user(info->regs.ebp, (long *)info->task->thread.esp); 70 - info->regs.esp = info->task->thread.esp; 71 - info->regs.xss = __KERNEL_DS; 72 - info->regs.xds = __USER_DS; 73 - info->regs.xes = __USER_DS; 74 - info->regs.xgs = __KERNEL_PDA; 75 - } 76 - 77 - extern asmlinkage int arch_unwind_init_running(struct unwind_frame_info *, 78 - asmlinkage int (*callback)(struct unwind_frame_info *, 79 - void *arg), 80 - void *arg); 81 - 82 - static inline int arch_unw_user_mode(/*const*/ struct unwind_frame_info *info) 83 - { 84 - return user_mode_vm(&info->regs) 85 - || info->regs.eip < PAGE_OFFSET 86 - || (info->regs.eip >= __fix_to_virt(FIX_VDSO) 87 - && info->regs.eip < __fix_to_virt(FIX_VDSO) + PAGE_SIZE) 88 - || info->regs.esp < PAGE_OFFSET; 89 - } 90 - 91 - #else 92 - 93 4 #define UNW_PC(frame) ((void)(frame), 0) 94 5 #define UNW_SP(frame) ((void)(frame), 0) 95 6 #define UNW_FP(frame) ((void)(frame), 0) ··· 9 98 { 10 99 return 0; 11 100 } 12 - 13 - #endif 14 101 15 102 #endif /* _ASM_I386_UNWIND_H */
+1
include/asm-s390/qdio.h
··· 34 34 #define QDIO_QETH_QFMT 0 35 35 #define QDIO_ZFCP_QFMT 1 36 36 #define QDIO_IQDIO_QFMT 2 37 + #define QDIO_IQDIO_QFMT_ASYNCH 3 37 38 38 39 struct qdio_buffer_element{ 39 40 unsigned int flags;
+1
include/asm-s390/reset.h
··· 19 19 extern void unregister_reset_call(struct reset_call *reset); 20 20 extern void s390_reset_system(void); 21 21 extern void (*s390_reset_mcck_handler)(void); 22 + extern void (*s390_reset_pgm_handler)(void); 22 23 23 24 #endif /* _ASM_S390_RESET_H */
+16 -84
include/asm-sparc/bitops.h
··· 14 14 15 15 #ifdef __KERNEL__ 16 16 17 + extern unsigned long ___set_bit(unsigned long *addr, unsigned long mask); 18 + extern unsigned long ___clear_bit(unsigned long *addr, unsigned long mask); 19 + extern unsigned long ___change_bit(unsigned long *addr, unsigned long mask); 20 + 17 21 /* 18 22 * Set bit 'nr' in 32-bit quantity at address 'addr' where bit '0' 19 23 * is in the highest of the four bytes and bit '31' is the high bit ··· 26 22 */ 27 23 static inline int test_and_set_bit(unsigned long nr, volatile unsigned long *addr) 28 24 { 29 - register unsigned long mask asm("g2"); 30 - register unsigned long *ADDR asm("g1"); 31 - register int tmp1 asm("g3"); 32 - register int tmp2 asm("g4"); 33 - register int tmp3 asm("g5"); 34 - register int tmp4 asm("g7"); 25 + unsigned long *ADDR, mask; 35 26 36 27 ADDR = ((unsigned long *) addr) + (nr >> 5); 37 28 mask = 1 << (nr & 31); 38 29 39 - __asm__ __volatile__( 40 - "mov %%o7, %%g4\n\t" 41 - "call ___set_bit\n\t" 42 - " add %%o7, 8, %%o7\n" 43 - : "=&r" (mask), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3), "=r" (tmp4) 44 - : "0" (mask), "r" (ADDR) 45 - : "memory", "cc"); 46 - 47 - return mask != 0; 30 + return ___set_bit(ADDR, mask) != 0; 48 31 } 49 32 50 33 static inline void set_bit(unsigned long nr, volatile unsigned long *addr) 51 34 { 52 - register unsigned long mask asm("g2"); 53 - register unsigned long *ADDR asm("g1"); 54 - register int tmp1 asm("g3"); 55 - register int tmp2 asm("g4"); 56 - register int tmp3 asm("g5"); 57 - register int tmp4 asm("g7"); 35 + unsigned long *ADDR, mask; 58 36 59 37 ADDR = ((unsigned long *) addr) + (nr >> 5); 60 38 mask = 1 << (nr & 31); 61 39 62 - __asm__ __volatile__( 63 - "mov %%o7, %%g4\n\t" 64 - "call ___set_bit\n\t" 65 - " add %%o7, 8, %%o7\n" 66 - : "=&r" (mask), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3), "=r" (tmp4) 67 - : "0" (mask), "r" (ADDR) 68 - : "memory", "cc"); 40 + (void) ___set_bit(ADDR, mask); 69 41 } 70 42 71 43 static inline int test_and_clear_bit(unsigned long nr, volatile unsigned long *addr) 72 44 { 73 - register unsigned long mask asm("g2"); 74 - register unsigned long *ADDR asm("g1"); 75 - register int tmp1 asm("g3"); 76 - register int tmp2 asm("g4"); 77 - register int tmp3 asm("g5"); 78 - register int tmp4 asm("g7"); 45 + unsigned long *ADDR, mask; 79 46 80 47 ADDR = ((unsigned long *) addr) + (nr >> 5); 81 48 mask = 1 << (nr & 31); 82 49 83 - __asm__ __volatile__( 84 - "mov %%o7, %%g4\n\t" 85 - "call ___clear_bit\n\t" 86 - " add %%o7, 8, %%o7\n" 87 - : "=&r" (mask), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3), "=r" (tmp4) 88 - : "0" (mask), "r" (ADDR) 89 - : "memory", "cc"); 90 - 91 - return mask != 0; 50 + return ___clear_bit(ADDR, mask) != 0; 92 51 } 93 52 94 53 static inline void clear_bit(unsigned long nr, volatile unsigned long *addr) 95 54 { 96 - register unsigned long mask asm("g2"); 97 - register unsigned long *ADDR asm("g1"); 98 - register int tmp1 asm("g3"); 99 - register int tmp2 asm("g4"); 100 - register int tmp3 asm("g5"); 101 - register int tmp4 asm("g7"); 55 + unsigned long *ADDR, mask; 102 56 103 57 ADDR = ((unsigned long *) addr) + (nr >> 5); 104 58 mask = 1 << (nr & 31); 105 59 106 - __asm__ __volatile__( 107 - "mov %%o7, %%g4\n\t" 108 - "call ___clear_bit\n\t" 109 - " add %%o7, 8, %%o7\n" 110 - : "=&r" (mask), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3), "=r" (tmp4) 111 - : "0" (mask), "r" (ADDR) 112 - : "memory", "cc"); 60 + (void) ___clear_bit(ADDR, mask); 113 61 } 114 62 115 63 static inline int test_and_change_bit(unsigned long nr, volatile unsigned long *addr) 116 64 { 117 - register unsigned long mask asm("g2"); 118 - register unsigned long *ADDR asm("g1"); 119 - register int tmp1 asm("g3"); 120 - register int tmp2 asm("g4"); 121 - register int tmp3 asm("g5"); 122 - register int tmp4 asm("g7"); 65 + unsigned long *ADDR, mask; 123 66 124 67 ADDR = ((unsigned long *) addr) + (nr >> 5); 125 68 mask = 1 << (nr & 31); 126 69 127 - __asm__ __volatile__( 128 - "mov %%o7, %%g4\n\t" 129 - "call ___change_bit\n\t" 130 - " add %%o7, 8, %%o7\n" 131 - : "=&r" (mask), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3), "=r" (tmp4) 132 - : "0" (mask), "r" (ADDR) 133 - : "memory", "cc"); 134 - 135 - return mask != 0; 70 + return ___change_bit(ADDR, mask) != 0; 136 71 } 137 72 138 73 static inline void change_bit(unsigned long nr, volatile unsigned long *addr) 139 74 { 140 - register unsigned long mask asm("g2"); 141 - register unsigned long *ADDR asm("g1"); 142 - register int tmp1 asm("g3"); 143 - register int tmp2 asm("g4"); 144 - register int tmp3 asm("g5"); 145 - register int tmp4 asm("g7"); 75 + unsigned long *ADDR, mask; 146 76 147 77 ADDR = ((unsigned long *) addr) + (nr >> 5); 148 78 mask = 1 << (nr & 31); 149 79 150 - __asm__ __volatile__( 151 - "mov %%o7, %%g4\n\t" 152 - "call ___change_bit\n\t" 153 - " add %%o7, 8, %%o7\n" 154 - : "=&r" (mask), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3), "=r" (tmp4) 155 - : "0" (mask), "r" (ADDR) 156 - : "memory", "cc"); 80 + (void) ___change_bit(ADDR, mask); 157 81 } 158 82 159 83 #include <asm-generic/bitops/non-atomic.h>
-2
include/asm-sparc64/hw_irq.h
··· 1 1 #ifndef __ASM_SPARC64_HW_IRQ_H 2 2 #define __ASM_SPARC64_HW_IRQ_H 3 3 4 - extern void hw_resend_irq(struct hw_interrupt_type *handler, unsigned int virt_irq); 5 - 6 4 #endif
+10
include/asm-sparc64/percpu.h
··· 5 5 6 6 #ifdef CONFIG_SMP 7 7 8 + #ifdef CONFIG_MODULES 9 + # define PERCPU_MODULE_RESERVE 8192 10 + #else 11 + # define PERCPU_MODULE_RESERVE 0 12 + #endif 13 + 14 + #define PERCPU_ENOUGH_ROOM \ 15 + (ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \ 16 + PERCPU_MODULE_RESERVE) 17 + 8 18 extern void setup_per_cpu_areas(void); 9 19 10 20 extern unsigned long __per_cpu_base;
-96
include/asm-x86_64/unwind.h
··· 1 1 #ifndef _ASM_X86_64_UNWIND_H 2 2 #define _ASM_X86_64_UNWIND_H 3 3 4 - /* 5 - * Copyright (C) 2002-2006 Novell, Inc. 6 - * Jan Beulich <jbeulich@novell.com> 7 - * This code is released under version 2 of the GNU GPL. 8 - */ 9 - 10 - #ifdef CONFIG_STACK_UNWIND 11 - 12 - #include <linux/sched.h> 13 - #include <asm/ptrace.h> 14 - #include <asm/uaccess.h> 15 - #include <asm/vsyscall.h> 16 - 17 - struct unwind_frame_info 18 - { 19 - struct pt_regs regs; 20 - struct task_struct *task; 21 - unsigned call_frame:1; 22 - }; 23 - 24 - #define UNW_PC(frame) (frame)->regs.rip 25 - #define UNW_SP(frame) (frame)->regs.rsp 26 - #ifdef CONFIG_FRAME_POINTER 27 - #define UNW_FP(frame) (frame)->regs.rbp 28 - #define FRAME_RETADDR_OFFSET 8 29 - #define FRAME_LINK_OFFSET 0 30 - #define STACK_BOTTOM(tsk) (((tsk)->thread.rsp0 - 1) & ~(THREAD_SIZE - 1)) 31 - #define STACK_TOP(tsk) ((tsk)->thread.rsp0) 32 - #endif 33 - /* Might need to account for the special exception and interrupt handling 34 - stacks here, since normally 35 - EXCEPTION_STACK_ORDER < THREAD_ORDER < IRQSTACK_ORDER, 36 - but the construct is needed only for getting across the stack switch to 37 - the interrupt stack - thus considering the IRQ stack itself is unnecessary, 38 - and the overhead of comparing against all exception handling stacks seems 39 - not desirable. */ 40 - #define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1)) 41 - 42 - #define UNW_REGISTER_INFO \ 43 - PTREGS_INFO(rax), \ 44 - PTREGS_INFO(rdx), \ 45 - PTREGS_INFO(rcx), \ 46 - PTREGS_INFO(rbx), \ 47 - PTREGS_INFO(rsi), \ 48 - PTREGS_INFO(rdi), \ 49 - PTREGS_INFO(rbp), \ 50 - PTREGS_INFO(rsp), \ 51 - PTREGS_INFO(r8), \ 52 - PTREGS_INFO(r9), \ 53 - PTREGS_INFO(r10), \ 54 - PTREGS_INFO(r11), \ 55 - PTREGS_INFO(r12), \ 56 - PTREGS_INFO(r13), \ 57 - PTREGS_INFO(r14), \ 58 - PTREGS_INFO(r15), \ 59 - PTREGS_INFO(rip) 60 - 61 - #define UNW_DEFAULT_RA(raItem, dataAlign) \ 62 - ((raItem).where == Memory && \ 63 - !((raItem).value * (dataAlign) + 8)) 64 - 65 - static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, 66 - /*const*/ struct pt_regs *regs) 67 - { 68 - info->regs = *regs; 69 - } 70 - 71 - static inline void arch_unw_init_blocked(struct unwind_frame_info *info) 72 - { 73 - extern const char thread_return[]; 74 - 75 - memset(&info->regs, 0, sizeof(info->regs)); 76 - info->regs.rip = (unsigned long)thread_return; 77 - info->regs.cs = __KERNEL_CS; 78 - __get_user(info->regs.rbp, (unsigned long *)info->task->thread.rsp); 79 - info->regs.rsp = info->task->thread.rsp; 80 - info->regs.ss = __KERNEL_DS; 81 - } 82 - 83 - extern int arch_unwind_init_running(struct unwind_frame_info *, 84 - int (*callback)(struct unwind_frame_info *, 85 - void *arg), 86 - void *arg); 87 - 88 - static inline int arch_unw_user_mode(const struct unwind_frame_info *info) 89 - { 90 - return user_mode(&info->regs) 91 - || (long)info->regs.rip >= 0 92 - || (info->regs.rip >= VSYSCALL_START && info->regs.rip < VSYSCALL_END) 93 - || (long)info->regs.rsp >= 0; 94 - } 95 - 96 - #else 97 - 98 4 #define UNW_PC(frame) ((void)(frame), 0UL) 99 5 #define UNW_SP(frame) ((void)(frame), 0UL) 100 6 ··· 8 102 { 9 103 return 0; 10 104 } 11 - 12 - #endif 13 105 14 106 #endif /* _ASM_X86_64_UNWIND_H */
+1 -1
include/linux/connector.h
··· 133 133 struct cn_callback_entry { 134 134 struct list_head callback_entry; 135 135 struct cn_callback *cb; 136 - struct delayed_work work; 136 + struct work_struct work; 137 137 struct cn_queue_dev *pdev; 138 138 139 139 struct cn_callback_id id;
+15
include/linux/input.h
··· 491 491 #define KEY_DIGITS 0x19d 492 492 #define KEY_TEEN 0x19e 493 493 #define KEY_TWEN 0x19f 494 + #define KEY_VIDEOPHONE 0x1a0 495 + #define KEY_GAMES 0x1a1 496 + #define KEY_ZOOMIN 0x1a2 497 + #define KEY_ZOOMOUT 0x1a3 498 + #define KEY_ZOOMRESET 0x1a4 499 + #define KEY_WORDPROCESSOR 0x1a5 500 + #define KEY_EDITOR 0x1a6 501 + #define KEY_SPREADSHEET 0x1a7 502 + #define KEY_GRAPHICSEDITOR 0x1a8 503 + #define KEY_PRESENTATION 0x1a9 504 + #define KEY_DATABASE 0x1aa 505 + #define KEY_NEWS 0x1ab 506 + #define KEY_VOICEMAIL 0x1ac 507 + #define KEY_ADDRESSBOOK 0x1ad 508 + #define KEY_MESSENGER 0x1ae 494 509 495 510 #define KEY_DEL_EOL 0x1c0 496 511 #define KEY_DEL_EOS 0x1c1
+2 -61
include/linux/unwind.h
··· 14 14 15 15 struct module; 16 16 17 - #ifdef CONFIG_STACK_UNWIND 18 - 19 - #include <asm/unwind.h> 20 - 21 - #ifndef ARCH_UNWIND_SECTION_NAME 22 - #define ARCH_UNWIND_SECTION_NAME ".eh_frame" 23 - #endif 24 - 25 - /* 26 - * Initialize unwind support. 27 - */ 28 - extern void unwind_init(void); 29 - extern void unwind_setup(void); 30 - 31 - #ifdef CONFIG_MODULES 32 - 33 - extern void *unwind_add_table(struct module *, 34 - const void *table_start, 35 - unsigned long table_size); 36 - 37 - extern void unwind_remove_table(void *handle, int init_only); 38 - 39 - #endif 40 - 41 - extern int unwind_init_frame_info(struct unwind_frame_info *, 42 - struct task_struct *, 43 - /*const*/ struct pt_regs *); 44 - 45 - /* 46 - * Prepare to unwind a blocked task. 47 - */ 48 - extern int unwind_init_blocked(struct unwind_frame_info *, 49 - struct task_struct *); 50 - 51 - /* 52 - * Prepare to unwind the currently running thread. 53 - */ 54 - extern int unwind_init_running(struct unwind_frame_info *, 55 - asmlinkage int (*callback)(struct unwind_frame_info *, 56 - void *arg), 57 - void *arg); 58 - 59 - /* 60 - * Unwind to previous to frame. Returns 0 if successful, negative 61 - * number in case of an error. 62 - */ 63 - extern int unwind(struct unwind_frame_info *); 64 - 65 - /* 66 - * Unwind until the return pointer is in user-land (or until an error 67 - * occurs). Returns 0 if successful, negative number in case of 68 - * error. 69 - */ 70 - extern int unwind_to_user(struct unwind_frame_info *); 71 - 72 - #else 73 - 74 17 struct unwind_frame_info {}; 75 18 76 19 static inline void unwind_init(void) {} ··· 28 85 return NULL; 29 86 } 30 87 31 - #endif 32 - 33 88 static inline void unwind_remove_table(void *handle, int init_only) 34 89 { 35 90 } 91 + 92 + #endif 36 93 37 94 static inline int unwind_init_frame_info(struct unwind_frame_info *info, 38 95 struct task_struct *tsk, ··· 64 121 { 65 122 return -ENOSYS; 66 123 } 67 - 68 - #endif 69 124 70 125 #endif /* _LINUX_UNWIND_H */
+24 -12
include/linux/workqueue.h
··· 8 8 #include <linux/timer.h> 9 9 #include <linux/linkage.h> 10 10 #include <linux/bitops.h> 11 + #include <asm/atomic.h> 11 12 12 13 struct workqueue_struct; 13 14 14 15 struct work_struct; 15 16 typedef void (*work_func_t)(struct work_struct *work); 16 17 18 + /* 19 + * The first word is the work queue pointer and the flags rolled into 20 + * one 21 + */ 22 + #define work_data_bits(work) ((unsigned long *)(&(work)->data)) 23 + 17 24 struct work_struct { 18 - /* the first word is the work queue pointer and the flags rolled into 19 - * one */ 20 - unsigned long management; 25 + atomic_long_t data; 21 26 #define WORK_STRUCT_PENDING 0 /* T if work item pending execution */ 22 27 #define WORK_STRUCT_NOAUTOREL 1 /* F if work item automatically released on exec */ 23 28 #define WORK_STRUCT_FLAG_MASK (3UL) ··· 30 25 struct list_head entry; 31 26 work_func_t func; 32 27 }; 28 + 29 + #define WORK_DATA_INIT(autorelease) \ 30 + ATOMIC_LONG_INIT((autorelease) << WORK_STRUCT_NOAUTOREL) 33 31 34 32 struct delayed_work { 35 33 struct work_struct work; ··· 44 36 }; 45 37 46 38 #define __WORK_INITIALIZER(n, f) { \ 47 - .management = 0, \ 39 + .data = WORK_DATA_INIT(0), \ 48 40 .entry = { &(n).entry, &(n).entry }, \ 49 41 .func = (f), \ 50 42 } 51 43 52 44 #define __WORK_INITIALIZER_NAR(n, f) { \ 53 - .management = (1 << WORK_STRUCT_NOAUTOREL), \ 45 + .data = WORK_DATA_INIT(1), \ 54 46 .entry = { &(n).entry, &(n).entry }, \ 55 47 .func = (f), \ 56 48 } ··· 90 82 91 83 /* 92 84 * initialize all of a work item in one go 85 + * 86 + * NOTE! No point in using "atomic_long_set()": useing a direct 87 + * assignment of the work data initializer allows the compiler 88 + * to generate better code. 93 89 */ 94 90 #define INIT_WORK(_work, _func) \ 95 91 do { \ 96 - (_work)->management = 0; \ 92 + (_work)->data = (atomic_long_t) WORK_DATA_INIT(0); \ 97 93 INIT_LIST_HEAD(&(_work)->entry); \ 98 94 PREPARE_WORK((_work), (_func)); \ 99 95 } while (0) 100 96 101 97 #define INIT_WORK_NAR(_work, _func) \ 102 98 do { \ 103 - (_work)->management = (1 << WORK_STRUCT_NOAUTOREL); \ 99 + (_work)->data = (atomic_long_t) WORK_DATA_INIT(1); \ 104 100 INIT_LIST_HEAD(&(_work)->entry); \ 105 101 PREPARE_WORK((_work), (_func)); \ 106 102 } while (0) ··· 126 114 * @work: The work item in question 127 115 */ 128 116 #define work_pending(work) \ 129 - test_bit(WORK_STRUCT_PENDING, &(work)->management) 117 + test_bit(WORK_STRUCT_PENDING, work_data_bits(work)) 130 118 131 119 /** 132 120 * delayed_work_pending - Find out whether a delayable work item is currently 133 121 * pending 134 122 * @work: The work item in question 135 123 */ 136 - #define delayed_work_pending(work) \ 137 - test_bit(WORK_STRUCT_PENDING, &(work)->work.management) 124 + #define delayed_work_pending(w) \ 125 + work_pending(&(w)->work) 138 126 139 127 /** 140 128 * work_release - Release a work item under execution ··· 155 143 * This should also be used to release a delayed work item. 156 144 */ 157 145 #define work_release(work) \ 158 - clear_bit(WORK_STRUCT_PENDING, &(work)->management) 146 + clear_bit(WORK_STRUCT_PENDING, work_data_bits(work)) 159 147 160 148 161 149 extern struct workqueue_struct *__create_workqueue(const char *name, ··· 200 188 201 189 ret = del_timer_sync(&work->timer); 202 190 if (ret) 203 - clear_bit(WORK_STRUCT_PENDING, &work->work.management); 191 + work_release(&work->work); 204 192 return ret; 205 193 } 206 194
+20 -6
include/net/ax25.h
··· 277 277 extern ax25_cb *ax25_find_cb(ax25_address *, ax25_address *, ax25_digi *, struct net_device *); 278 278 extern void ax25_send_to_raw(ax25_address *, struct sk_buff *, int); 279 279 extern void ax25_destroy_socket(ax25_cb *); 280 - extern ax25_cb *ax25_create_cb(void); 280 + extern ax25_cb * __must_check ax25_create_cb(void); 281 281 extern void ax25_fillin_cb(ax25_cb *, ax25_dev *); 282 282 extern struct sock *ax25_make_new(struct sock *, struct ax25_dev *); 283 283 ··· 333 333 extern void ax25_ds_idletimer_expiry(ax25_cb *); 334 334 335 335 /* ax25_iface.c */ 336 - extern int ax25_protocol_register(unsigned int, int (*)(struct sk_buff *, ax25_cb *)); 336 + 337 + struct ax25_protocol { 338 + struct ax25_protocol *next; 339 + unsigned int pid; 340 + int (*func)(struct sk_buff *, ax25_cb *); 341 + }; 342 + 343 + extern void ax25_register_pid(struct ax25_protocol *ap); 337 344 extern void ax25_protocol_release(unsigned int); 338 - extern int ax25_linkfail_register(void (*)(ax25_cb *, int)); 339 - extern void ax25_linkfail_release(void (*)(ax25_cb *, int)); 340 - extern int ax25_listen_register(ax25_address *, struct net_device *); 345 + 346 + struct ax25_linkfail { 347 + struct hlist_node lf_node; 348 + void (*func)(ax25_cb *, int); 349 + }; 350 + 351 + extern void ax25_linkfail_register(struct ax25_linkfail *lf); 352 + extern void ax25_linkfail_release(struct ax25_linkfail *lf); 353 + extern int __must_check ax25_listen_register(ax25_address *, 354 + struct net_device *); 341 355 extern void ax25_listen_release(ax25_address *, struct net_device *); 342 356 extern int (*ax25_protocol_function(unsigned int))(struct sk_buff *, ax25_cb *); 343 357 extern int ax25_listen_mine(ax25_address *, struct net_device *); ··· 429 415 /* ax25_uid.c */ 430 416 extern int ax25_uid_policy; 431 417 extern ax25_uid_assoc *ax25_findbyuid(uid_t); 432 - extern int ax25_uid_ioctl(int, struct sockaddr_ax25 *); 418 + extern int __must_check ax25_uid_ioctl(int, struct sockaddr_ax25 *); 433 419 extern struct file_operations ax25_uid_fops; 434 420 extern void ax25_uid_free(void); 435 421
+3 -3
include/net/rose.h
··· 188 188 extern void rose_enquiry_response(struct sock *); 189 189 190 190 /* rose_route.c */ 191 - extern struct rose_neigh *rose_loopback_neigh; 191 + extern struct rose_neigh rose_loopback_neigh; 192 192 extern struct file_operations rose_neigh_fops; 193 193 extern struct file_operations rose_nodes_fops; 194 194 extern struct file_operations rose_routes_fops; 195 195 196 - extern int rose_add_loopback_neigh(void); 197 - extern int rose_add_loopback_node(rose_address *); 196 + extern void rose_add_loopback_neigh(void); 197 + extern int __must_check rose_add_loopback_node(rose_address *); 198 198 extern void rose_del_loopback_node(rose_address *); 199 199 extern void rose_rt_device_down(struct net_device *); 200 200 extern void rose_link_device_down(struct net_device *);
+8 -1
include/rdma/ib_verbs.h
··· 1639 1639 { 1640 1640 if (dev->dma_ops) 1641 1641 return dev->dma_ops->alloc_coherent(dev, size, dma_handle, flag); 1642 - return dma_alloc_coherent(dev->dma_device, size, dma_handle, flag); 1642 + else { 1643 + dma_addr_t handle; 1644 + void *ret; 1645 + 1646 + ret = dma_alloc_coherent(dev->dma_device, size, &handle, flag); 1647 + *dma_handle = handle; 1648 + return ret; 1649 + } 1643 1650 } 1644 1651 1645 1652 /**
-1
kernel/Makefile
··· 31 31 obj-$(CONFIG_UID16) += uid16.o 32 32 obj-$(CONFIG_MODULES) += module.o 33 33 obj-$(CONFIG_KALLSYMS) += kallsyms.o 34 - obj-$(CONFIG_STACK_UNWIND) += unwind.o 35 34 obj-$(CONFIG_PM) += power/ 36 35 obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o 37 36 obj-$(CONFIG_KEXEC) += kexec.o
-1305
kernel/unwind.c
··· 1 - /* 2 - * Copyright (C) 2002-2006 Novell, Inc. 3 - * Jan Beulich <jbeulich@novell.com> 4 - * This code is released under version 2 of the GNU GPL. 5 - * 6 - * A simple API for unwinding kernel stacks. This is used for 7 - * debugging and error reporting purposes. The kernel doesn't need 8 - * full-blown stack unwinding with all the bells and whistles, so there 9 - * is not much point in implementing the full Dwarf2 unwind API. 10 - */ 11 - 12 - #include <linux/unwind.h> 13 - #include <linux/module.h> 14 - #include <linux/bootmem.h> 15 - #include <linux/sort.h> 16 - #include <linux/stop_machine.h> 17 - #include <linux/uaccess.h> 18 - #include <asm/sections.h> 19 - #include <asm/uaccess.h> 20 - #include <asm/unaligned.h> 21 - 22 - extern const char __start_unwind[], __end_unwind[]; 23 - extern const u8 __start_unwind_hdr[], __end_unwind_hdr[]; 24 - 25 - #define MAX_STACK_DEPTH 8 26 - 27 - #define EXTRA_INFO(f) { \ 28 - BUILD_BUG_ON_ZERO(offsetof(struct unwind_frame_info, f) \ 29 - % FIELD_SIZEOF(struct unwind_frame_info, f)) \ 30 - + offsetof(struct unwind_frame_info, f) \ 31 - / FIELD_SIZEOF(struct unwind_frame_info, f), \ 32 - FIELD_SIZEOF(struct unwind_frame_info, f) \ 33 - } 34 - #define PTREGS_INFO(f) EXTRA_INFO(regs.f) 35 - 36 - static const struct { 37 - unsigned offs:BITS_PER_LONG / 2; 38 - unsigned width:BITS_PER_LONG / 2; 39 - } reg_info[] = { 40 - UNW_REGISTER_INFO 41 - }; 42 - 43 - #undef PTREGS_INFO 44 - #undef EXTRA_INFO 45 - 46 - #ifndef REG_INVALID 47 - #define REG_INVALID(r) (reg_info[r].width == 0) 48 - #endif 49 - 50 - #define DW_CFA_nop 0x00 51 - #define DW_CFA_set_loc 0x01 52 - #define DW_CFA_advance_loc1 0x02 53 - #define DW_CFA_advance_loc2 0x03 54 - #define DW_CFA_advance_loc4 0x04 55 - #define DW_CFA_offset_extended 0x05 56 - #define DW_CFA_restore_extended 0x06 57 - #define DW_CFA_undefined 0x07 58 - #define DW_CFA_same_value 0x08 59 - #define DW_CFA_register 0x09 60 - #define DW_CFA_remember_state 0x0a 61 - #define DW_CFA_restore_state 0x0b 62 - #define DW_CFA_def_cfa 0x0c 63 - #define DW_CFA_def_cfa_register 0x0d 64 - #define DW_CFA_def_cfa_offset 0x0e 65 - #define DW_CFA_def_cfa_expression 0x0f 66 - #define DW_CFA_expression 0x10 67 - #define DW_CFA_offset_extended_sf 0x11 68 - #define DW_CFA_def_cfa_sf 0x12 69 - #define DW_CFA_def_cfa_offset_sf 0x13 70 - #define DW_CFA_val_offset 0x14 71 - #define DW_CFA_val_offset_sf 0x15 72 - #define DW_CFA_val_expression 0x16 73 - #define DW_CFA_lo_user 0x1c 74 - #define DW_CFA_GNU_window_save 0x2d 75 - #define DW_CFA_GNU_args_size 0x2e 76 - #define DW_CFA_GNU_negative_offset_extended 0x2f 77 - #define DW_CFA_hi_user 0x3f 78 - 79 - #define DW_EH_PE_FORM 0x07 80 - #define DW_EH_PE_native 0x00 81 - #define DW_EH_PE_leb128 0x01 82 - #define DW_EH_PE_data2 0x02 83 - #define DW_EH_PE_data4 0x03 84 - #define DW_EH_PE_data8 0x04 85 - #define DW_EH_PE_signed 0x08 86 - #define DW_EH_PE_ADJUST 0x70 87 - #define DW_EH_PE_abs 0x00 88 - #define DW_EH_PE_pcrel 0x10 89 - #define DW_EH_PE_textrel 0x20 90 - #define DW_EH_PE_datarel 0x30 91 - #define DW_EH_PE_funcrel 0x40 92 - #define DW_EH_PE_aligned 0x50 93 - #define DW_EH_PE_indirect 0x80 94 - #define DW_EH_PE_omit 0xff 95 - 96 - typedef unsigned long uleb128_t; 97 - typedef signed long sleb128_t; 98 - #define sleb128abs __builtin_labs 99 - 100 - static struct unwind_table { 101 - struct { 102 - unsigned long pc; 103 - unsigned long range; 104 - } core, init; 105 - const void *address; 106 - unsigned long size; 107 - const unsigned char *header; 108 - unsigned long hdrsz; 109 - struct unwind_table *link; 110 - const char *name; 111 - } root_table; 112 - 113 - struct unwind_item { 114 - enum item_location { 115 - Nowhere, 116 - Memory, 117 - Register, 118 - Value 119 - } where; 120 - uleb128_t value; 121 - }; 122 - 123 - struct unwind_state { 124 - uleb128_t loc, org; 125 - const u8 *cieStart, *cieEnd; 126 - uleb128_t codeAlign; 127 - sleb128_t dataAlign; 128 - struct cfa { 129 - uleb128_t reg, offs; 130 - } cfa; 131 - struct unwind_item regs[ARRAY_SIZE(reg_info)]; 132 - unsigned stackDepth:8; 133 - unsigned version:8; 134 - const u8 *label; 135 - const u8 *stack[MAX_STACK_DEPTH]; 136 - }; 137 - 138 - static const struct cfa badCFA = { ARRAY_SIZE(reg_info), 1 }; 139 - 140 - static unsigned unwind_debug; 141 - static int __init unwind_debug_setup(char *s) 142 - { 143 - unwind_debug = simple_strtoul(s, NULL, 0); 144 - return 1; 145 - } 146 - __setup("unwind_debug=", unwind_debug_setup); 147 - #define dprintk(lvl, fmt, args...) \ 148 - ((void)(lvl > unwind_debug \ 149 - || printk(KERN_DEBUG "unwind: " fmt "\n", ##args))) 150 - 151 - static struct unwind_table *find_table(unsigned long pc) 152 - { 153 - struct unwind_table *table; 154 - 155 - for (table = &root_table; table; table = table->link) 156 - if ((pc >= table->core.pc 157 - && pc < table->core.pc + table->core.range) 158 - || (pc >= table->init.pc 159 - && pc < table->init.pc + table->init.range)) 160 - break; 161 - 162 - return table; 163 - } 164 - 165 - static unsigned long read_pointer(const u8 **pLoc, 166 - const void *end, 167 - signed ptrType, 168 - unsigned long text_base, 169 - unsigned long data_base); 170 - 171 - static void init_unwind_table(struct unwind_table *table, 172 - const char *name, 173 - const void *core_start, 174 - unsigned long core_size, 175 - const void *init_start, 176 - unsigned long init_size, 177 - const void *table_start, 178 - unsigned long table_size, 179 - const u8 *header_start, 180 - unsigned long header_size) 181 - { 182 - const u8 *ptr = header_start + 4; 183 - const u8 *end = header_start + header_size; 184 - 185 - table->core.pc = (unsigned long)core_start; 186 - table->core.range = core_size; 187 - table->init.pc = (unsigned long)init_start; 188 - table->init.range = init_size; 189 - table->address = table_start; 190 - table->size = table_size; 191 - /* See if the linker provided table looks valid. */ 192 - if (header_size <= 4 193 - || header_start[0] != 1 194 - || (void *)read_pointer(&ptr, end, header_start[1], 0, 0) 195 - != table_start 196 - || !read_pointer(&ptr, end, header_start[2], 0, 0) 197 - || !read_pointer(&ptr, end, header_start[3], 0, 198 - (unsigned long)header_start) 199 - || !read_pointer(&ptr, end, header_start[3], 0, 200 - (unsigned long)header_start)) 201 - header_start = NULL; 202 - table->hdrsz = header_size; 203 - smp_wmb(); 204 - table->header = header_start; 205 - table->link = NULL; 206 - table->name = name; 207 - } 208 - 209 - void __init unwind_init(void) 210 - { 211 - init_unwind_table(&root_table, "kernel", 212 - _text, _end - _text, 213 - NULL, 0, 214 - __start_unwind, __end_unwind - __start_unwind, 215 - __start_unwind_hdr, __end_unwind_hdr - __start_unwind_hdr); 216 - } 217 - 218 - static const u32 bad_cie, not_fde; 219 - static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *); 220 - static signed fde_pointer_type(const u32 *cie); 221 - 222 - struct eh_frame_hdr_table_entry { 223 - unsigned long start, fde; 224 - }; 225 - 226 - static int cmp_eh_frame_hdr_table_entries(const void *p1, const void *p2) 227 - { 228 - const struct eh_frame_hdr_table_entry *e1 = p1; 229 - const struct eh_frame_hdr_table_entry *e2 = p2; 230 - 231 - return (e1->start > e2->start) - (e1->start < e2->start); 232 - } 233 - 234 - static void swap_eh_frame_hdr_table_entries(void *p1, void *p2, int size) 235 - { 236 - struct eh_frame_hdr_table_entry *e1 = p1; 237 - struct eh_frame_hdr_table_entry *e2 = p2; 238 - unsigned long v; 239 - 240 - v = e1->start; 241 - e1->start = e2->start; 242 - e2->start = v; 243 - v = e1->fde; 244 - e1->fde = e2->fde; 245 - e2->fde = v; 246 - } 247 - 248 - static void __init setup_unwind_table(struct unwind_table *table, 249 - void *(*alloc)(unsigned long)) 250 - { 251 - const u8 *ptr; 252 - unsigned long tableSize = table->size, hdrSize; 253 - unsigned n; 254 - const u32 *fde; 255 - struct { 256 - u8 version; 257 - u8 eh_frame_ptr_enc; 258 - u8 fde_count_enc; 259 - u8 table_enc; 260 - unsigned long eh_frame_ptr; 261 - unsigned int fde_count; 262 - struct eh_frame_hdr_table_entry table[]; 263 - } __attribute__((__packed__)) *header; 264 - 265 - if (table->header) 266 - return; 267 - 268 - if (table->hdrsz) 269 - printk(KERN_WARNING ".eh_frame_hdr for '%s' present but unusable\n", 270 - table->name); 271 - 272 - if (tableSize & (sizeof(*fde) - 1)) 273 - return; 274 - 275 - for (fde = table->address, n = 0; 276 - tableSize > sizeof(*fde) && tableSize - sizeof(*fde) >= *fde; 277 - tableSize -= sizeof(*fde) + *fde, fde += 1 + *fde / sizeof(*fde)) { 278 - const u32 *cie = cie_for_fde(fde, table); 279 - signed ptrType; 280 - 281 - if (cie == &not_fde) 282 - continue; 283 - if (cie == NULL 284 - || cie == &bad_cie 285 - || (ptrType = fde_pointer_type(cie)) < 0) 286 - return; 287 - ptr = (const u8 *)(fde + 2); 288 - if (!read_pointer(&ptr, 289 - (const u8 *)(fde + 1) + *fde, 290 - ptrType, 0, 0)) 291 - return; 292 - ++n; 293 - } 294 - 295 - if (tableSize || !n) 296 - return; 297 - 298 - hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int) 299 - + 2 * n * sizeof(unsigned long); 300 - dprintk(2, "Binary lookup table size for %s: %lu bytes", table->name, hdrSize); 301 - header = alloc(hdrSize); 302 - if (!header) 303 - return; 304 - header->version = 1; 305 - header->eh_frame_ptr_enc = DW_EH_PE_abs|DW_EH_PE_native; 306 - header->fde_count_enc = DW_EH_PE_abs|DW_EH_PE_data4; 307 - header->table_enc = DW_EH_PE_abs|DW_EH_PE_native; 308 - put_unaligned((unsigned long)table->address, &header->eh_frame_ptr); 309 - BUILD_BUG_ON(offsetof(typeof(*header), fde_count) 310 - % __alignof(typeof(header->fde_count))); 311 - header->fde_count = n; 312 - 313 - BUILD_BUG_ON(offsetof(typeof(*header), table) 314 - % __alignof(typeof(*header->table))); 315 - for (fde = table->address, tableSize = table->size, n = 0; 316 - tableSize; 317 - tableSize -= sizeof(*fde) + *fde, fde += 1 + *fde / sizeof(*fde)) { 318 - const u32 *cie = fde + 1 - fde[1] / sizeof(*fde); 319 - 320 - if (!fde[1]) 321 - continue; /* this is a CIE */ 322 - ptr = (const u8 *)(fde + 2); 323 - header->table[n].start = read_pointer(&ptr, 324 - (const u8 *)(fde + 1) + *fde, 325 - fde_pointer_type(cie), 0, 0); 326 - header->table[n].fde = (unsigned long)fde; 327 - ++n; 328 - } 329 - WARN_ON(n != header->fde_count); 330 - 331 - sort(header->table, 332 - n, 333 - sizeof(*header->table), 334 - cmp_eh_frame_hdr_table_entries, 335 - swap_eh_frame_hdr_table_entries); 336 - 337 - table->hdrsz = hdrSize; 338 - smp_wmb(); 339 - table->header = (const void *)header; 340 - } 341 - 342 - static void *__init balloc(unsigned long sz) 343 - { 344 - return __alloc_bootmem_nopanic(sz, 345 - sizeof(unsigned int), 346 - __pa(MAX_DMA_ADDRESS)); 347 - } 348 - 349 - void __init unwind_setup(void) 350 - { 351 - setup_unwind_table(&root_table, balloc); 352 - } 353 - 354 - #ifdef CONFIG_MODULES 355 - 356 - static struct unwind_table *last_table; 357 - 358 - /* Must be called with module_mutex held. */ 359 - void *unwind_add_table(struct module *module, 360 - const void *table_start, 361 - unsigned long table_size) 362 - { 363 - struct unwind_table *table; 364 - 365 - if (table_size <= 0) 366 - return NULL; 367 - 368 - table = kmalloc(sizeof(*table), GFP_KERNEL); 369 - if (!table) 370 - return NULL; 371 - 372 - init_unwind_table(table, module->name, 373 - module->module_core, module->core_size, 374 - module->module_init, module->init_size, 375 - table_start, table_size, 376 - NULL, 0); 377 - 378 - if (last_table) 379 - last_table->link = table; 380 - else 381 - root_table.link = table; 382 - last_table = table; 383 - 384 - return table; 385 - } 386 - 387 - struct unlink_table_info 388 - { 389 - struct unwind_table *table; 390 - int init_only; 391 - }; 392 - 393 - static int unlink_table(void *arg) 394 - { 395 - struct unlink_table_info *info = arg; 396 - struct unwind_table *table = info->table, *prev; 397 - 398 - for (prev = &root_table; prev->link && prev->link != table; prev = prev->link) 399 - ; 400 - 401 - if (prev->link) { 402 - if (info->init_only) { 403 - table->init.pc = 0; 404 - table->init.range = 0; 405 - info->table = NULL; 406 - } else { 407 - prev->link = table->link; 408 - if (!prev->link) 409 - last_table = prev; 410 - } 411 - } else 412 - info->table = NULL; 413 - 414 - return 0; 415 - } 416 - 417 - /* Must be called with module_mutex held. */ 418 - void unwind_remove_table(void *handle, int init_only) 419 - { 420 - struct unwind_table *table = handle; 421 - struct unlink_table_info info; 422 - 423 - if (!table || table == &root_table) 424 - return; 425 - 426 - if (init_only && table == last_table) { 427 - table->init.pc = 0; 428 - table->init.range = 0; 429 - return; 430 - } 431 - 432 - info.table = table; 433 - info.init_only = init_only; 434 - stop_machine_run(unlink_table, &info, NR_CPUS); 435 - 436 - if (info.table) 437 - kfree(table); 438 - } 439 - 440 - #endif /* CONFIG_MODULES */ 441 - 442 - static uleb128_t get_uleb128(const u8 **pcur, const u8 *end) 443 - { 444 - const u8 *cur = *pcur; 445 - uleb128_t value; 446 - unsigned shift; 447 - 448 - for (shift = 0, value = 0; cur < end; shift += 7) { 449 - if (shift + 7 > 8 * sizeof(value) 450 - && (*cur & 0x7fU) >= (1U << (8 * sizeof(value) - shift))) { 451 - cur = end + 1; 452 - break; 453 - } 454 - value |= (uleb128_t)(*cur & 0x7f) << shift; 455 - if (!(*cur++ & 0x80)) 456 - break; 457 - } 458 - *pcur = cur; 459 - 460 - return value; 461 - } 462 - 463 - static sleb128_t get_sleb128(const u8 **pcur, const u8 *end) 464 - { 465 - const u8 *cur = *pcur; 466 - sleb128_t value; 467 - unsigned shift; 468 - 469 - for (shift = 0, value = 0; cur < end; shift += 7) { 470 - if (shift + 7 > 8 * sizeof(value) 471 - && (*cur & 0x7fU) >= (1U << (8 * sizeof(value) - shift))) { 472 - cur = end + 1; 473 - break; 474 - } 475 - value |= (sleb128_t)(*cur & 0x7f) << shift; 476 - if (!(*cur & 0x80)) { 477 - value |= -(*cur++ & 0x40) << shift; 478 - break; 479 - } 480 - } 481 - *pcur = cur; 482 - 483 - return value; 484 - } 485 - 486 - static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *table) 487 - { 488 - const u32 *cie; 489 - 490 - if (!*fde || (*fde & (sizeof(*fde) - 1))) 491 - return &bad_cie; 492 - if (!fde[1]) 493 - return &not_fde; /* this is a CIE */ 494 - if ((fde[1] & (sizeof(*fde) - 1)) 495 - || fde[1] > (unsigned long)(fde + 1) - (unsigned long)table->address) 496 - return NULL; /* this is not a valid FDE */ 497 - cie = fde + 1 - fde[1] / sizeof(*fde); 498 - if (*cie <= sizeof(*cie) + 4 499 - || *cie >= fde[1] - sizeof(*fde) 500 - || (*cie & (sizeof(*cie) - 1)) 501 - || cie[1]) 502 - return NULL; /* this is not a (valid) CIE */ 503 - return cie; 504 - } 505 - 506 - static unsigned long read_pointer(const u8 **pLoc, 507 - const void *end, 508 - signed ptrType, 509 - unsigned long text_base, 510 - unsigned long data_base) 511 - { 512 - unsigned long value = 0; 513 - union { 514 - const u8 *p8; 515 - const u16 *p16u; 516 - const s16 *p16s; 517 - const u32 *p32u; 518 - const s32 *p32s; 519 - const unsigned long *pul; 520 - } ptr; 521 - 522 - if (ptrType < 0 || ptrType == DW_EH_PE_omit) { 523 - dprintk(1, "Invalid pointer encoding %02X (%p,%p).", ptrType, *pLoc, end); 524 - return 0; 525 - } 526 - ptr.p8 = *pLoc; 527 - switch(ptrType & DW_EH_PE_FORM) { 528 - case DW_EH_PE_data2: 529 - if (end < (const void *)(ptr.p16u + 1)) { 530 - dprintk(1, "Data16 overrun (%p,%p).", ptr.p8, end); 531 - return 0; 532 - } 533 - if(ptrType & DW_EH_PE_signed) 534 - value = get_unaligned(ptr.p16s++); 535 - else 536 - value = get_unaligned(ptr.p16u++); 537 - break; 538 - case DW_EH_PE_data4: 539 - #ifdef CONFIG_64BIT 540 - if (end < (const void *)(ptr.p32u + 1)) { 541 - dprintk(1, "Data32 overrun (%p,%p).", ptr.p8, end); 542 - return 0; 543 - } 544 - if(ptrType & DW_EH_PE_signed) 545 - value = get_unaligned(ptr.p32s++); 546 - else 547 - value = get_unaligned(ptr.p32u++); 548 - break; 549 - case DW_EH_PE_data8: 550 - BUILD_BUG_ON(sizeof(u64) != sizeof(value)); 551 - #else 552 - BUILD_BUG_ON(sizeof(u32) != sizeof(value)); 553 - #endif 554 - case DW_EH_PE_native: 555 - if (end < (const void *)(ptr.pul + 1)) { 556 - dprintk(1, "DataUL overrun (%p,%p).", ptr.p8, end); 557 - return 0; 558 - } 559 - value = get_unaligned(ptr.pul++); 560 - break; 561 - case DW_EH_PE_leb128: 562 - BUILD_BUG_ON(sizeof(uleb128_t) > sizeof(value)); 563 - value = ptrType & DW_EH_PE_signed 564 - ? get_sleb128(&ptr.p8, end) 565 - : get_uleb128(&ptr.p8, end); 566 - if ((const void *)ptr.p8 > end) { 567 - dprintk(1, "DataLEB overrun (%p,%p).", ptr.p8, end); 568 - return 0; 569 - } 570 - break; 571 - default: 572 - dprintk(2, "Cannot decode pointer type %02X (%p,%p).", 573 - ptrType, ptr.p8, end); 574 - return 0; 575 - } 576 - switch(ptrType & DW_EH_PE_ADJUST) { 577 - case DW_EH_PE_abs: 578 - break; 579 - case DW_EH_PE_pcrel: 580 - value += (unsigned long)*pLoc; 581 - break; 582 - case DW_EH_PE_textrel: 583 - if (likely(text_base)) { 584 - value += text_base; 585 - break; 586 - } 587 - dprintk(2, "Text-relative encoding %02X (%p,%p), but zero text base.", 588 - ptrType, *pLoc, end); 589 - return 0; 590 - case DW_EH_PE_datarel: 591 - if (likely(data_base)) { 592 - value += data_base; 593 - break; 594 - } 595 - dprintk(2, "Data-relative encoding %02X (%p,%p), but zero data base.", 596 - ptrType, *pLoc, end); 597 - return 0; 598 - default: 599 - dprintk(2, "Cannot adjust pointer type %02X (%p,%p).", 600 - ptrType, *pLoc, end); 601 - return 0; 602 - } 603 - if ((ptrType & DW_EH_PE_indirect) 604 - && probe_kernel_address((unsigned long *)value, value)) { 605 - dprintk(1, "Cannot read indirect value %lx (%p,%p).", 606 - value, *pLoc, end); 607 - return 0; 608 - } 609 - *pLoc = ptr.p8; 610 - 611 - return value; 612 - } 613 - 614 - static signed fde_pointer_type(const u32 *cie) 615 - { 616 - const u8 *ptr = (const u8 *)(cie + 2); 617 - unsigned version = *ptr; 618 - 619 - if (version != 1) 620 - return -1; /* unsupported */ 621 - if (*++ptr) { 622 - const char *aug; 623 - const u8 *end = (const u8 *)(cie + 1) + *cie; 624 - uleb128_t len; 625 - 626 - /* check if augmentation size is first (and thus present) */ 627 - if (*ptr != 'z') 628 - return -1; 629 - /* check if augmentation string is nul-terminated */ 630 - if ((ptr = memchr(aug = (const void *)ptr, 0, end - ptr)) == NULL) 631 - return -1; 632 - ++ptr; /* skip terminator */ 633 - get_uleb128(&ptr, end); /* skip code alignment */ 634 - get_sleb128(&ptr, end); /* skip data alignment */ 635 - /* skip return address column */ 636 - version <= 1 ? (void)++ptr : (void)get_uleb128(&ptr, end); 637 - len = get_uleb128(&ptr, end); /* augmentation length */ 638 - if (ptr + len < ptr || ptr + len > end) 639 - return -1; 640 - end = ptr + len; 641 - while (*++aug) { 642 - if (ptr >= end) 643 - return -1; 644 - switch(*aug) { 645 - case 'L': 646 - ++ptr; 647 - break; 648 - case 'P': { 649 - signed ptrType = *ptr++; 650 - 651 - if (!read_pointer(&ptr, end, ptrType, 0, 0) 652 - || ptr > end) 653 - return -1; 654 - } 655 - break; 656 - case 'R': 657 - return *ptr; 658 - default: 659 - return -1; 660 - } 661 - } 662 - } 663 - return DW_EH_PE_native|DW_EH_PE_abs; 664 - } 665 - 666 - static int advance_loc(unsigned long delta, struct unwind_state *state) 667 - { 668 - state->loc += delta * state->codeAlign; 669 - 670 - return delta > 0; 671 - } 672 - 673 - static void set_rule(uleb128_t reg, 674 - enum item_location where, 675 - uleb128_t value, 676 - struct unwind_state *state) 677 - { 678 - if (reg < ARRAY_SIZE(state->regs)) { 679 - state->regs[reg].where = where; 680 - state->regs[reg].value = value; 681 - } 682 - } 683 - 684 - static int processCFI(const u8 *start, 685 - const u8 *end, 686 - unsigned long targetLoc, 687 - signed ptrType, 688 - struct unwind_state *state) 689 - { 690 - union { 691 - const u8 *p8; 692 - const u16 *p16; 693 - const u32 *p32; 694 - } ptr; 695 - int result = 1; 696 - 697 - if (start != state->cieStart) { 698 - state->loc = state->org; 699 - result = processCFI(state->cieStart, state->cieEnd, 0, ptrType, state); 700 - if (targetLoc == 0 && state->label == NULL) 701 - return result; 702 - } 703 - for (ptr.p8 = start; result && ptr.p8 < end; ) { 704 - switch(*ptr.p8 >> 6) { 705 - uleb128_t value; 706 - 707 - case 0: 708 - switch(*ptr.p8++) { 709 - case DW_CFA_nop: 710 - break; 711 - case DW_CFA_set_loc: 712 - state->loc = read_pointer(&ptr.p8, end, ptrType, 0, 0); 713 - if (state->loc == 0) 714 - result = 0; 715 - break; 716 - case DW_CFA_advance_loc1: 717 - result = ptr.p8 < end && advance_loc(*ptr.p8++, state); 718 - break; 719 - case DW_CFA_advance_loc2: 720 - result = ptr.p8 <= end + 2 721 - && advance_loc(*ptr.p16++, state); 722 - break; 723 - case DW_CFA_advance_loc4: 724 - result = ptr.p8 <= end + 4 725 - && advance_loc(*ptr.p32++, state); 726 - break; 727 - case DW_CFA_offset_extended: 728 - value = get_uleb128(&ptr.p8, end); 729 - set_rule(value, Memory, get_uleb128(&ptr.p8, end), state); 730 - break; 731 - case DW_CFA_val_offset: 732 - value = get_uleb128(&ptr.p8, end); 733 - set_rule(value, Value, get_uleb128(&ptr.p8, end), state); 734 - break; 735 - case DW_CFA_offset_extended_sf: 736 - value = get_uleb128(&ptr.p8, end); 737 - set_rule(value, Memory, get_sleb128(&ptr.p8, end), state); 738 - break; 739 - case DW_CFA_val_offset_sf: 740 - value = get_uleb128(&ptr.p8, end); 741 - set_rule(value, Value, get_sleb128(&ptr.p8, end), state); 742 - break; 743 - case DW_CFA_restore_extended: 744 - case DW_CFA_undefined: 745 - case DW_CFA_same_value: 746 - set_rule(get_uleb128(&ptr.p8, end), Nowhere, 0, state); 747 - break; 748 - case DW_CFA_register: 749 - value = get_uleb128(&ptr.p8, end); 750 - set_rule(value, 751 - Register, 752 - get_uleb128(&ptr.p8, end), state); 753 - break; 754 - case DW_CFA_remember_state: 755 - if (ptr.p8 == state->label) { 756 - state->label = NULL; 757 - return 1; 758 - } 759 - if (state->stackDepth >= MAX_STACK_DEPTH) { 760 - dprintk(1, "State stack overflow (%p,%p).", ptr.p8, end); 761 - return 0; 762 - } 763 - state->stack[state->stackDepth++] = ptr.p8; 764 - break; 765 - case DW_CFA_restore_state: 766 - if (state->stackDepth) { 767 - const uleb128_t loc = state->loc; 768 - const u8 *label = state->label; 769 - 770 - state->label = state->stack[state->stackDepth - 1]; 771 - memcpy(&state->cfa, &badCFA, sizeof(state->cfa)); 772 - memset(state->regs, 0, sizeof(state->regs)); 773 - state->stackDepth = 0; 774 - result = processCFI(start, end, 0, ptrType, state); 775 - state->loc = loc; 776 - state->label = label; 777 - } else { 778 - dprintk(1, "State stack underflow (%p,%p).", ptr.p8, end); 779 - return 0; 780 - } 781 - break; 782 - case DW_CFA_def_cfa: 783 - state->cfa.reg = get_uleb128(&ptr.p8, end); 784 - /*nobreak*/ 785 - case DW_CFA_def_cfa_offset: 786 - state->cfa.offs = get_uleb128(&ptr.p8, end); 787 - break; 788 - case DW_CFA_def_cfa_sf: 789 - state->cfa.reg = get_uleb128(&ptr.p8, end); 790 - /*nobreak*/ 791 - case DW_CFA_def_cfa_offset_sf: 792 - state->cfa.offs = get_sleb128(&ptr.p8, end) 793 - * state->dataAlign; 794 - break; 795 - case DW_CFA_def_cfa_register: 796 - state->cfa.reg = get_uleb128(&ptr.p8, end); 797 - break; 798 - /*todo case DW_CFA_def_cfa_expression: */ 799 - /*todo case DW_CFA_expression: */ 800 - /*todo case DW_CFA_val_expression: */ 801 - case DW_CFA_GNU_args_size: 802 - get_uleb128(&ptr.p8, end); 803 - break; 804 - case DW_CFA_GNU_negative_offset_extended: 805 - value = get_uleb128(&ptr.p8, end); 806 - set_rule(value, 807 - Memory, 808 - (uleb128_t)0 - get_uleb128(&ptr.p8, end), state); 809 - break; 810 - case DW_CFA_GNU_window_save: 811 - default: 812 - dprintk(1, "Unrecognized CFI op %02X (%p,%p).", ptr.p8[-1], ptr.p8 - 1, end); 813 - result = 0; 814 - break; 815 - } 816 - break; 817 - case 1: 818 - result = advance_loc(*ptr.p8++ & 0x3f, state); 819 - break; 820 - case 2: 821 - value = *ptr.p8++ & 0x3f; 822 - set_rule(value, Memory, get_uleb128(&ptr.p8, end), state); 823 - break; 824 - case 3: 825 - set_rule(*ptr.p8++ & 0x3f, Nowhere, 0, state); 826 - break; 827 - } 828 - if (ptr.p8 > end) { 829 - dprintk(1, "Data overrun (%p,%p).", ptr.p8, end); 830 - result = 0; 831 - } 832 - if (result && targetLoc != 0 && targetLoc < state->loc) 833 - return 1; 834 - } 835 - 836 - if (result && ptr.p8 < end) 837 - dprintk(1, "Data underrun (%p,%p).", ptr.p8, end); 838 - 839 - return result 840 - && ptr.p8 == end 841 - && (targetLoc == 0 842 - || (/*todo While in theory this should apply, gcc in practice omits 843 - everything past the function prolog, and hence the location 844 - never reaches the end of the function. 845 - targetLoc < state->loc &&*/ state->label == NULL)); 846 - } 847 - 848 - /* Unwind to previous to frame. Returns 0 if successful, negative 849 - * number in case of an error. */ 850 - int unwind(struct unwind_frame_info *frame) 851 - { 852 - #define FRAME_REG(r, t) (((t *)frame)[reg_info[r].offs]) 853 - const u32 *fde = NULL, *cie = NULL; 854 - const u8 *ptr = NULL, *end = NULL; 855 - unsigned long pc = UNW_PC(frame) - frame->call_frame, sp; 856 - unsigned long startLoc = 0, endLoc = 0, cfa; 857 - unsigned i; 858 - signed ptrType = -1; 859 - uleb128_t retAddrReg = 0; 860 - const struct unwind_table *table; 861 - struct unwind_state state; 862 - 863 - if (UNW_PC(frame) == 0) 864 - return -EINVAL; 865 - if ((table = find_table(pc)) != NULL 866 - && !(table->size & (sizeof(*fde) - 1))) { 867 - const u8 *hdr = table->header; 868 - unsigned long tableSize; 869 - 870 - smp_rmb(); 871 - if (hdr && hdr[0] == 1) { 872 - switch(hdr[3] & DW_EH_PE_FORM) { 873 - case DW_EH_PE_native: tableSize = sizeof(unsigned long); break; 874 - case DW_EH_PE_data2: tableSize = 2; break; 875 - case DW_EH_PE_data4: tableSize = 4; break; 876 - case DW_EH_PE_data8: tableSize = 8; break; 877 - default: tableSize = 0; break; 878 - } 879 - ptr = hdr + 4; 880 - end = hdr + table->hdrsz; 881 - if (tableSize 882 - && read_pointer(&ptr, end, hdr[1], 0, 0) 883 - == (unsigned long)table->address 884 - && (i = read_pointer(&ptr, end, hdr[2], 0, 0)) > 0 885 - && i == (end - ptr) / (2 * tableSize) 886 - && !((end - ptr) % (2 * tableSize))) { 887 - do { 888 - const u8 *cur = ptr + (i / 2) * (2 * tableSize); 889 - 890 - startLoc = read_pointer(&cur, 891 - cur + tableSize, 892 - hdr[3], 0, 893 - (unsigned long)hdr); 894 - if (pc < startLoc) 895 - i /= 2; 896 - else { 897 - ptr = cur - tableSize; 898 - i = (i + 1) / 2; 899 - } 900 - } while (startLoc && i > 1); 901 - if (i == 1 902 - && (startLoc = read_pointer(&ptr, 903 - ptr + tableSize, 904 - hdr[3], 0, 905 - (unsigned long)hdr)) != 0 906 - && pc >= startLoc) 907 - fde = (void *)read_pointer(&ptr, 908 - ptr + tableSize, 909 - hdr[3], 0, 910 - (unsigned long)hdr); 911 - } 912 - } 913 - if(hdr && !fde) 914 - dprintk(3, "Binary lookup for %lx failed.", pc); 915 - 916 - if (fde != NULL) { 917 - cie = cie_for_fde(fde, table); 918 - ptr = (const u8 *)(fde + 2); 919 - if(cie != NULL 920 - && cie != &bad_cie 921 - && cie != &not_fde 922 - && (ptrType = fde_pointer_type(cie)) >= 0 923 - && read_pointer(&ptr, 924 - (const u8 *)(fde + 1) + *fde, 925 - ptrType, 0, 0) == startLoc) { 926 - if (!(ptrType & DW_EH_PE_indirect)) 927 - ptrType &= DW_EH_PE_FORM|DW_EH_PE_signed; 928 - endLoc = startLoc 929 - + read_pointer(&ptr, 930 - (const u8 *)(fde + 1) + *fde, 931 - ptrType, 0, 0); 932 - if(pc >= endLoc) 933 - fde = NULL; 934 - } else 935 - fde = NULL; 936 - if(!fde) 937 - dprintk(1, "Binary lookup result for %lx discarded.", pc); 938 - } 939 - if (fde == NULL) { 940 - for (fde = table->address, tableSize = table->size; 941 - cie = NULL, tableSize > sizeof(*fde) 942 - && tableSize - sizeof(*fde) >= *fde; 943 - tableSize -= sizeof(*fde) + *fde, 944 - fde += 1 + *fde / sizeof(*fde)) { 945 - cie = cie_for_fde(fde, table); 946 - if (cie == &bad_cie) { 947 - cie = NULL; 948 - break; 949 - } 950 - if (cie == NULL 951 - || cie == &not_fde 952 - || (ptrType = fde_pointer_type(cie)) < 0) 953 - continue; 954 - ptr = (const u8 *)(fde + 2); 955 - startLoc = read_pointer(&ptr, 956 - (const u8 *)(fde + 1) + *fde, 957 - ptrType, 0, 0); 958 - if (!startLoc) 959 - continue; 960 - if (!(ptrType & DW_EH_PE_indirect)) 961 - ptrType &= DW_EH_PE_FORM|DW_EH_PE_signed; 962 - endLoc = startLoc 963 - + read_pointer(&ptr, 964 - (const u8 *)(fde + 1) + *fde, 965 - ptrType, 0, 0); 966 - if (pc >= startLoc && pc < endLoc) 967 - break; 968 - } 969 - if(!fde) 970 - dprintk(3, "Linear lookup for %lx failed.", pc); 971 - } 972 - } 973 - if (cie != NULL) { 974 - memset(&state, 0, sizeof(state)); 975 - state.cieEnd = ptr; /* keep here temporarily */ 976 - ptr = (const u8 *)(cie + 2); 977 - end = (const u8 *)(cie + 1) + *cie; 978 - frame->call_frame = 1; 979 - if ((state.version = *ptr) != 1) 980 - cie = NULL; /* unsupported version */ 981 - else if (*++ptr) { 982 - /* check if augmentation size is first (and thus present) */ 983 - if (*ptr == 'z') { 984 - while (++ptr < end && *ptr) { 985 - switch(*ptr) { 986 - /* check for ignorable (or already handled) 987 - * nul-terminated augmentation string */ 988 - case 'L': 989 - case 'P': 990 - case 'R': 991 - continue; 992 - case 'S': 993 - frame->call_frame = 0; 994 - continue; 995 - default: 996 - break; 997 - } 998 - break; 999 - } 1000 - } 1001 - if (ptr >= end || *ptr) 1002 - cie = NULL; 1003 - } 1004 - if(!cie) 1005 - dprintk(1, "CIE unusable (%p,%p).", ptr, end); 1006 - ++ptr; 1007 - } 1008 - if (cie != NULL) { 1009 - /* get code aligment factor */ 1010 - state.codeAlign = get_uleb128(&ptr, end); 1011 - /* get data aligment factor */ 1012 - state.dataAlign = get_sleb128(&ptr, end); 1013 - if (state.codeAlign == 0 || state.dataAlign == 0 || ptr >= end) 1014 - cie = NULL; 1015 - else if (UNW_PC(frame) % state.codeAlign 1016 - || UNW_SP(frame) % sleb128abs(state.dataAlign)) { 1017 - dprintk(1, "Input pointer(s) misaligned (%lx,%lx).", 1018 - UNW_PC(frame), UNW_SP(frame)); 1019 - return -EPERM; 1020 - } else { 1021 - retAddrReg = state.version <= 1 ? *ptr++ : get_uleb128(&ptr, end); 1022 - /* skip augmentation */ 1023 - if (((const char *)(cie + 2))[1] == 'z') { 1024 - uleb128_t augSize = get_uleb128(&ptr, end); 1025 - 1026 - ptr += augSize; 1027 - } 1028 - if (ptr > end 1029 - || retAddrReg >= ARRAY_SIZE(reg_info) 1030 - || REG_INVALID(retAddrReg) 1031 - || reg_info[retAddrReg].width != sizeof(unsigned long)) 1032 - cie = NULL; 1033 - } 1034 - if(!cie) 1035 - dprintk(1, "CIE validation failed (%p,%p).", ptr, end); 1036 - } 1037 - if (cie != NULL) { 1038 - state.cieStart = ptr; 1039 - ptr = state.cieEnd; 1040 - state.cieEnd = end; 1041 - end = (const u8 *)(fde + 1) + *fde; 1042 - /* skip augmentation */ 1043 - if (((const char *)(cie + 2))[1] == 'z') { 1044 - uleb128_t augSize = get_uleb128(&ptr, end); 1045 - 1046 - if ((ptr += augSize) > end) 1047 - fde = NULL; 1048 - } 1049 - if(!fde) 1050 - dprintk(1, "FDE validation failed (%p,%p).", ptr, end); 1051 - } 1052 - if (cie == NULL || fde == NULL) { 1053 - #ifdef CONFIG_FRAME_POINTER 1054 - unsigned long top, bottom; 1055 - 1056 - if ((UNW_SP(frame) | UNW_FP(frame)) % sizeof(unsigned long)) 1057 - return -EPERM; 1058 - top = STACK_TOP(frame->task); 1059 - bottom = STACK_BOTTOM(frame->task); 1060 - # if FRAME_RETADDR_OFFSET < 0 1061 - if (UNW_SP(frame) < top 1062 - && UNW_FP(frame) <= UNW_SP(frame) 1063 - && bottom < UNW_FP(frame) 1064 - # else 1065 - if (UNW_SP(frame) > top 1066 - && UNW_FP(frame) >= UNW_SP(frame) 1067 - && bottom > UNW_FP(frame) 1068 - # endif 1069 - && !((UNW_SP(frame) | UNW_FP(frame)) 1070 - & (sizeof(unsigned long) - 1))) { 1071 - unsigned long link; 1072 - 1073 - if (!probe_kernel_address( 1074 - (unsigned long *)(UNW_FP(frame) 1075 - + FRAME_LINK_OFFSET), 1076 - link) 1077 - # if FRAME_RETADDR_OFFSET < 0 1078 - && link > bottom && link < UNW_FP(frame) 1079 - # else 1080 - && link > UNW_FP(frame) && link < bottom 1081 - # endif 1082 - && !(link & (sizeof(link) - 1)) 1083 - && !probe_kernel_address( 1084 - (unsigned long *)(UNW_FP(frame) 1085 - + FRAME_RETADDR_OFFSET), UNW_PC(frame))) { 1086 - UNW_SP(frame) = UNW_FP(frame) + FRAME_RETADDR_OFFSET 1087 - # if FRAME_RETADDR_OFFSET < 0 1088 - - 1089 - # else 1090 - + 1091 - # endif 1092 - sizeof(UNW_PC(frame)); 1093 - UNW_FP(frame) = link; 1094 - return 0; 1095 - } 1096 - } 1097 - #endif 1098 - return -ENXIO; 1099 - } 1100 - state.org = startLoc; 1101 - memcpy(&state.cfa, &badCFA, sizeof(state.cfa)); 1102 - /* process instructions */ 1103 - if (!processCFI(ptr, end, pc, ptrType, &state) 1104 - || state.loc > endLoc 1105 - || state.regs[retAddrReg].where == Nowhere 1106 - || state.cfa.reg >= ARRAY_SIZE(reg_info) 1107 - || reg_info[state.cfa.reg].width != sizeof(unsigned long) 1108 - || FRAME_REG(state.cfa.reg, unsigned long) % sizeof(unsigned long) 1109 - || state.cfa.offs % sizeof(unsigned long)) { 1110 - dprintk(1, "Unusable unwind info (%p,%p).", ptr, end); 1111 - return -EIO; 1112 - } 1113 - /* update frame */ 1114 - #ifndef CONFIG_AS_CFI_SIGNAL_FRAME 1115 - if(frame->call_frame 1116 - && !UNW_DEFAULT_RA(state.regs[retAddrReg], state.dataAlign)) 1117 - frame->call_frame = 0; 1118 - #endif 1119 - cfa = FRAME_REG(state.cfa.reg, unsigned long) + state.cfa.offs; 1120 - startLoc = min((unsigned long)UNW_SP(frame), cfa); 1121 - endLoc = max((unsigned long)UNW_SP(frame), cfa); 1122 - if (STACK_LIMIT(startLoc) != STACK_LIMIT(endLoc)) { 1123 - startLoc = min(STACK_LIMIT(cfa), cfa); 1124 - endLoc = max(STACK_LIMIT(cfa), cfa); 1125 - } 1126 - #ifndef CONFIG_64BIT 1127 - # define CASES CASE(8); CASE(16); CASE(32) 1128 - #else 1129 - # define CASES CASE(8); CASE(16); CASE(32); CASE(64) 1130 - #endif 1131 - pc = UNW_PC(frame); 1132 - sp = UNW_SP(frame); 1133 - for (i = 0; i < ARRAY_SIZE(state.regs); ++i) { 1134 - if (REG_INVALID(i)) { 1135 - if (state.regs[i].where == Nowhere) 1136 - continue; 1137 - dprintk(1, "Cannot restore register %u (%d).", 1138 - i, state.regs[i].where); 1139 - return -EIO; 1140 - } 1141 - switch(state.regs[i].where) { 1142 - default: 1143 - break; 1144 - case Register: 1145 - if (state.regs[i].value >= ARRAY_SIZE(reg_info) 1146 - || REG_INVALID(state.regs[i].value) 1147 - || reg_info[i].width > reg_info[state.regs[i].value].width) { 1148 - dprintk(1, "Cannot restore register %u from register %lu.", 1149 - i, state.regs[i].value); 1150 - return -EIO; 1151 - } 1152 - switch(reg_info[state.regs[i].value].width) { 1153 - #define CASE(n) \ 1154 - case sizeof(u##n): \ 1155 - state.regs[i].value = FRAME_REG(state.regs[i].value, \ 1156 - const u##n); \ 1157 - break 1158 - CASES; 1159 - #undef CASE 1160 - default: 1161 - dprintk(1, "Unsupported register size %u (%lu).", 1162 - reg_info[state.regs[i].value].width, 1163 - state.regs[i].value); 1164 - return -EIO; 1165 - } 1166 - break; 1167 - } 1168 - } 1169 - for (i = 0; i < ARRAY_SIZE(state.regs); ++i) { 1170 - if (REG_INVALID(i)) 1171 - continue; 1172 - switch(state.regs[i].where) { 1173 - case Nowhere: 1174 - if (reg_info[i].width != sizeof(UNW_SP(frame)) 1175 - || &FRAME_REG(i, __typeof__(UNW_SP(frame))) 1176 - != &UNW_SP(frame)) 1177 - continue; 1178 - UNW_SP(frame) = cfa; 1179 - break; 1180 - case Register: 1181 - switch(reg_info[i].width) { 1182 - #define CASE(n) case sizeof(u##n): \ 1183 - FRAME_REG(i, u##n) = state.regs[i].value; \ 1184 - break 1185 - CASES; 1186 - #undef CASE 1187 - default: 1188 - dprintk(1, "Unsupported register size %u (%u).", 1189 - reg_info[i].width, i); 1190 - return -EIO; 1191 - } 1192 - break; 1193 - case Value: 1194 - if (reg_info[i].width != sizeof(unsigned long)) { 1195 - dprintk(1, "Unsupported value size %u (%u).", 1196 - reg_info[i].width, i); 1197 - return -EIO; 1198 - } 1199 - FRAME_REG(i, unsigned long) = cfa + state.regs[i].value 1200 - * state.dataAlign; 1201 - break; 1202 - case Memory: { 1203 - unsigned long addr = cfa + state.regs[i].value 1204 - * state.dataAlign; 1205 - 1206 - if ((state.regs[i].value * state.dataAlign) 1207 - % sizeof(unsigned long) 1208 - || addr < startLoc 1209 - || addr + sizeof(unsigned long) < addr 1210 - || addr + sizeof(unsigned long) > endLoc) { 1211 - dprintk(1, "Bad memory location %lx (%lx).", 1212 - addr, state.regs[i].value); 1213 - return -EIO; 1214 - } 1215 - switch(reg_info[i].width) { 1216 - #define CASE(n) case sizeof(u##n): \ 1217 - probe_kernel_address((u##n *)addr, FRAME_REG(i, u##n)); \ 1218 - break 1219 - CASES; 1220 - #undef CASE 1221 - default: 1222 - dprintk(1, "Unsupported memory size %u (%u).", 1223 - reg_info[i].width, i); 1224 - return -EIO; 1225 - } 1226 - } 1227 - break; 1228 - } 1229 - } 1230 - 1231 - if (UNW_PC(frame) % state.codeAlign 1232 - || UNW_SP(frame) % sleb128abs(state.dataAlign)) { 1233 - dprintk(1, "Output pointer(s) misaligned (%lx,%lx).", 1234 - UNW_PC(frame), UNW_SP(frame)); 1235 - return -EIO; 1236 - } 1237 - if (pc == UNW_PC(frame) && sp == UNW_SP(frame)) { 1238 - dprintk(1, "No progress (%lx,%lx).", pc, sp); 1239 - return -EIO; 1240 - } 1241 - 1242 - return 0; 1243 - #undef CASES 1244 - #undef FRAME_REG 1245 - } 1246 - EXPORT_SYMBOL(unwind); 1247 - 1248 - int unwind_init_frame_info(struct unwind_frame_info *info, 1249 - struct task_struct *tsk, 1250 - /*const*/ struct pt_regs *regs) 1251 - { 1252 - info->task = tsk; 1253 - info->call_frame = 0; 1254 - arch_unw_init_frame_info(info, regs); 1255 - 1256 - return 0; 1257 - } 1258 - EXPORT_SYMBOL(unwind_init_frame_info); 1259 - 1260 - /* 1261 - * Prepare to unwind a blocked task. 1262 - */ 1263 - int unwind_init_blocked(struct unwind_frame_info *info, 1264 - struct task_struct *tsk) 1265 - { 1266 - info->task = tsk; 1267 - info->call_frame = 0; 1268 - arch_unw_init_blocked(info); 1269 - 1270 - return 0; 1271 - } 1272 - EXPORT_SYMBOL(unwind_init_blocked); 1273 - 1274 - /* 1275 - * Prepare to unwind the currently running thread. 1276 - */ 1277 - int unwind_init_running(struct unwind_frame_info *info, 1278 - asmlinkage int (*callback)(struct unwind_frame_info *, 1279 - void *arg), 1280 - void *arg) 1281 - { 1282 - info->task = current; 1283 - info->call_frame = 0; 1284 - 1285 - return arch_unwind_init_running(info, callback, arg); 1286 - } 1287 - EXPORT_SYMBOL(unwind_init_running); 1288 - 1289 - /* 1290 - * Unwind until the return pointer is in user-land (or until an error 1291 - * occurs). Returns 0 if successful, negative number in case of 1292 - * error. 1293 - */ 1294 - int unwind_to_user(struct unwind_frame_info *info) 1295 - { 1296 - while (!arch_unw_user_mode(info)) { 1297 - int err = unwind(info); 1298 - 1299 - if (err < 0) 1300 - return err; 1301 - } 1302 - 1303 - return 0; 1304 - } 1305 - EXPORT_SYMBOL(unwind_to_user);
+8 -8
kernel/workqueue.c
··· 96 96 BUG_ON(!work_pending(work)); 97 97 98 98 new = (unsigned long) wq | (1UL << WORK_STRUCT_PENDING); 99 - new |= work->management & WORK_STRUCT_FLAG_MASK; 100 - work->management = new; 99 + new |= WORK_STRUCT_FLAG_MASK & *work_data_bits(work); 100 + atomic_long_set(&work->data, new); 101 101 } 102 102 103 103 static inline void *get_wq_data(struct work_struct *work) 104 104 { 105 - return (void *) (work->management & WORK_STRUCT_WQ_DATA_MASK); 105 + return (void *) (atomic_long_read(&work->data) & WORK_STRUCT_WQ_DATA_MASK); 106 106 } 107 107 108 108 static int __run_work(struct cpu_workqueue_struct *cwq, struct work_struct *work) ··· 133 133 list_del_init(&work->entry); 134 134 spin_unlock_irqrestore(&cwq->lock, flags); 135 135 136 - if (!test_bit(WORK_STRUCT_NOAUTOREL, &work->management)) 136 + if (!test_bit(WORK_STRUCT_NOAUTOREL, work_data_bits(work))) 137 137 work_release(work); 138 138 f(work); 139 139 ··· 206 206 { 207 207 int ret = 0, cpu = get_cpu(); 208 208 209 - if (!test_and_set_bit(WORK_STRUCT_PENDING, &work->management)) { 209 + if (!test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) { 210 210 if (unlikely(is_single_threaded(wq))) 211 211 cpu = singlethread_cpu; 212 212 BUG_ON(!list_empty(&work->entry)); ··· 248 248 if (delay == 0) 249 249 return queue_work(wq, work); 250 250 251 - if (!test_and_set_bit(WORK_STRUCT_PENDING, &work->management)) { 251 + if (!test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) { 252 252 BUG_ON(timer_pending(timer)); 253 253 BUG_ON(!list_empty(&work->entry)); 254 254 ··· 280 280 struct timer_list *timer = &dwork->timer; 281 281 struct work_struct *work = &dwork->work; 282 282 283 - if (!test_and_set_bit(WORK_STRUCT_PENDING, &work->management)) { 283 + if (!test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) { 284 284 BUG_ON(timer_pending(timer)); 285 285 BUG_ON(!list_empty(&work->entry)); 286 286 ··· 321 321 spin_unlock_irqrestore(&cwq->lock, flags); 322 322 323 323 BUG_ON(get_wq_data(work) != cwq); 324 - if (!test_bit(WORK_STRUCT_NOAUTOREL, &work->management)) 324 + if (!test_bit(WORK_STRUCT_NOAUTOREL, work_data_bits(work))) 325 325 work_release(work); 326 326 f(work); 327 327
-18
lib/Kconfig.debug
··· 354 354 some architectures or if you use external debuggers. 355 355 If you don't debug the kernel, you can say N. 356 356 357 - config UNWIND_INFO 358 - bool "Compile the kernel with frame unwind information" 359 - depends on !IA64 && !PARISC && !ARM 360 - depends on !MODULES || !(MIPS || PPC || SUPERH || V850) 361 - help 362 - If you say Y here the resulting kernel image will be slightly larger 363 - but not slower, and it will give very useful debugging information. 364 - If you don't debug the kernel, you can say N, but we may not be able 365 - to solve problems without frame unwind information or frame pointers. 366 - 367 - config STACK_UNWIND 368 - bool "Stack unwind support" 369 - depends on UNWIND_INFO 370 - depends on X86 371 - help 372 - This enables more precise stack traces, omitting all unrelated 373 - occurrences of pointers into kernel code from the dump. 374 - 375 357 config FORCED_INLINING 376 358 bool "Force gcc to inline functions marked 'inline'" 377 359 depends on DEBUG_KERNEL
+1 -31
lib/fault-inject.c
··· 55 55 56 56 #define MAX_STACK_TRACE_DEPTH 32 57 57 58 - #ifdef CONFIG_STACK_UNWIND 59 - 60 - static asmlinkage int fail_stacktrace_callback(struct unwind_frame_info *info, 61 - void *arg) 62 - { 63 - int depth; 64 - struct fault_attr *attr = arg; 65 - bool found = (attr->require_start == 0 && attr->require_end == ULONG_MAX); 66 - 67 - for (depth = 0; depth < attr->stacktrace_depth 68 - && unwind(info) == 0 && UNW_PC(info); depth++) { 69 - if (arch_unw_user_mode(info)) 70 - break; 71 - if (attr->reject_start <= UNW_PC(info) && 72 - UNW_PC(info) < attr->reject_end) 73 - return false; 74 - if (attr->require_start <= UNW_PC(info) && 75 - UNW_PC(info) < attr->require_end) 76 - found = true; 77 - } 78 - return found; 79 - } 80 - 81 - static bool fail_stacktrace(struct fault_attr *attr) 82 - { 83 - struct unwind_frame_info info; 84 - 85 - return unwind_init_running(&info, fail_stacktrace_callback, attr); 86 - } 87 - 88 - #elif defined(CONFIG_STACKTRACE) 58 + #if defined(CONFIG_STACKTRACE) 89 59 90 60 static bool fail_stacktrace(struct fault_attr *attr) 91 61 {
+75 -102
mm/mincore.c
··· 1 1 /* 2 2 * linux/mm/mincore.c 3 3 * 4 - * Copyright (C) 1994-1999 Linus Torvalds 4 + * Copyright (C) 1994-2006 Linus Torvalds 5 5 */ 6 6 7 7 /* ··· 38 38 return present; 39 39 } 40 40 41 - static long mincore_vma(struct vm_area_struct * vma, 42 - unsigned long start, unsigned long end, unsigned char __user * vec) 41 + /* 42 + * Do a chunk of "sys_mincore()". We've already checked 43 + * all the arguments, we hold the mmap semaphore: we should 44 + * just return the amount of info we're asked for. 45 + */ 46 + static long do_mincore(unsigned long addr, unsigned char *vec, unsigned long pages) 43 47 { 44 - long error, i, remaining; 45 - unsigned char * tmp; 48 + unsigned long i, nr, pgoff; 49 + struct vm_area_struct *vma = find_vma(current->mm, addr); 46 50 47 - error = -ENOMEM; 51 + /* 52 + * find_vma() didn't find anything above us, or we're 53 + * in an unmapped hole in the address space: ENOMEM. 54 + */ 55 + if (!vma || addr < vma->vm_start) 56 + return -ENOMEM; 57 + 58 + /* 59 + * Ok, got it. But check whether it's a segment we support 60 + * mincore() on. Right now, we don't do any anonymous mappings. 61 + * 62 + * FIXME: This is just stupid. And returning ENOMEM is 63 + * stupid too. We should just look at the page tables. But 64 + * this is what we've traditionally done, so we'll just 65 + * continue doing it. 66 + */ 48 67 if (!vma->vm_file) 49 - return error; 68 + return -ENOMEM; 50 69 51 - start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; 52 - if (end > vma->vm_end) 53 - end = vma->vm_end; 54 - end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; 70 + /* 71 + * Calculate how many pages there are left in the vma, and 72 + * what the pgoff is for our address. 73 + */ 74 + nr = (vma->vm_end - addr) >> PAGE_SHIFT; 75 + if (nr > pages) 76 + nr = pages; 55 77 56 - error = -EAGAIN; 57 - tmp = (unsigned char *) __get_free_page(GFP_KERNEL); 58 - if (!tmp) 59 - return error; 78 + pgoff = (addr - vma->vm_start) >> PAGE_SHIFT; 79 + pgoff += vma->vm_pgoff; 60 80 61 - /* (end - start) is # of pages, and also # of bytes in "vec */ 62 - remaining = (end - start), 81 + /* And then we just fill the sucker in.. */ 82 + for (i = 0 ; i < nr; i++, pgoff++) 83 + vec[i] = mincore_page(vma, pgoff); 63 84 64 - error = 0; 65 - for (i = 0; remaining > 0; remaining -= PAGE_SIZE, i++) { 66 - int j = 0; 67 - long thispiece = (remaining < PAGE_SIZE) ? 68 - remaining : PAGE_SIZE; 69 - 70 - while (j < thispiece) 71 - tmp[j++] = mincore_page(vma, start++); 72 - 73 - if (copy_to_user(vec + PAGE_SIZE * i, tmp, thispiece)) { 74 - error = -EFAULT; 75 - break; 76 - } 77 - } 78 - 79 - free_page((unsigned long) tmp); 80 - return error; 85 + return nr; 81 86 } 82 87 83 88 /* ··· 112 107 asmlinkage long sys_mincore(unsigned long start, size_t len, 113 108 unsigned char __user * vec) 114 109 { 115 - int index = 0; 116 - unsigned long end, limit; 117 - struct vm_area_struct * vma; 118 - size_t max; 119 - int unmapped_error = 0; 120 - long error; 110 + long retval; 111 + unsigned long pages; 112 + unsigned char *tmp; 121 113 122 - /* check the arguments */ 114 + /* Check the start address: needs to be page-aligned.. */ 123 115 if (start & ~PAGE_CACHE_MASK) 124 - goto einval; 116 + return -EINVAL; 125 117 126 - limit = TASK_SIZE; 127 - if (start >= limit) 128 - goto enomem; 118 + /* ..and we need to be passed a valid user-space range */ 119 + if (!access_ok(VERIFY_READ, (void __user *) start, len)) 120 + return -ENOMEM; 129 121 130 - if (!len) 131 - return 0; 122 + /* This also avoids any overflows on PAGE_CACHE_ALIGN */ 123 + pages = len >> PAGE_SHIFT; 124 + pages += (len & ~PAGE_MASK) != 0; 132 125 133 - max = limit - start; 134 - len = PAGE_CACHE_ALIGN(len); 135 - if (len > max || !len) 136 - goto enomem; 126 + if (!access_ok(VERIFY_WRITE, vec, pages)) 127 + return -EFAULT; 137 128 138 - end = start + len; 129 + tmp = (void *) __get_free_page(GFP_USER); 130 + if (!tmp) 131 + return -EAGAIN; 139 132 140 - /* check the output buffer whilst holding the lock */ 141 - error = -EFAULT; 142 - down_read(&current->mm->mmap_sem); 133 + retval = 0; 134 + while (pages) { 135 + /* 136 + * Do at most PAGE_SIZE entries per iteration, due to 137 + * the temporary buffer size. 138 + */ 139 + down_read(&current->mm->mmap_sem); 140 + retval = do_mincore(start, tmp, min(pages, PAGE_SIZE)); 141 + up_read(&current->mm->mmap_sem); 143 142 144 - if (!access_ok(VERIFY_WRITE, vec, len >> PAGE_SHIFT)) 145 - goto out; 146 - 147 - /* 148 - * If the interval [start,end) covers some unmapped address 149 - * ranges, just ignore them, but return -ENOMEM at the end. 150 - */ 151 - error = 0; 152 - 153 - vma = find_vma(current->mm, start); 154 - while (vma) { 155 - /* Here start < vma->vm_end. */ 156 - if (start < vma->vm_start) { 157 - unmapped_error = -ENOMEM; 158 - start = vma->vm_start; 143 + if (retval <= 0) 144 + break; 145 + if (copy_to_user(vec, tmp, retval)) { 146 + retval = -EFAULT; 147 + break; 159 148 } 160 - 161 - /* Here vma->vm_start <= start < vma->vm_end. */ 162 - if (end <= vma->vm_end) { 163 - if (start < end) { 164 - error = mincore_vma(vma, start, end, 165 - &vec[index]); 166 - if (error) 167 - goto out; 168 - } 169 - error = unmapped_error; 170 - goto out; 171 - } 172 - 173 - /* Here vma->vm_start <= start < vma->vm_end < end. */ 174 - error = mincore_vma(vma, start, vma->vm_end, &vec[index]); 175 - if (error) 176 - goto out; 177 - index += (vma->vm_end - start) >> PAGE_CACHE_SHIFT; 178 - start = vma->vm_end; 179 - vma = vma->vm_next; 149 + pages -= retval; 150 + vec += retval; 151 + start += retval << PAGE_SHIFT; 152 + retval = 0; 180 153 } 181 - 182 - /* we found a hole in the area queried if we arrive here */ 183 - error = -ENOMEM; 184 - 185 - out: 186 - up_read(&current->mm->mmap_sem); 187 - return error; 188 - 189 - einval: 190 - return -EINVAL; 191 - enomem: 192 - return -ENOMEM; 154 + free_page((unsigned long) tmp); 155 + return retval; 193 156 }
+2 -2
net/ax25/af_ax25.c
··· 1088 1088 /* 1089 1089 * FIXME: nonblock behaviour looks like it may have a bug. 1090 1090 */ 1091 - static int ax25_connect(struct socket *sock, struct sockaddr *uaddr, 1092 - int addr_len, int flags) 1091 + static int __must_check ax25_connect(struct socket *sock, 1092 + struct sockaddr *uaddr, int addr_len, int flags) 1093 1093 { 1094 1094 struct sock *sk = sock->sk; 1095 1095 ax25_cb *ax25 = ax25_sk(sk), *ax25t;
+25 -78
net/ax25/ax25_iface.c
··· 29 29 #include <linux/mm.h> 30 30 #include <linux/interrupt.h> 31 31 32 - static struct protocol_struct { 33 - struct protocol_struct *next; 34 - unsigned int pid; 35 - int (*func)(struct sk_buff *, ax25_cb *); 36 - } *protocol_list = NULL; 32 + static struct ax25_protocol *protocol_list; 37 33 static DEFINE_RWLOCK(protocol_list_lock); 38 34 39 - static struct linkfail_struct { 40 - struct linkfail_struct *next; 41 - void (*func)(ax25_cb *, int); 42 - } *linkfail_list = NULL; 35 + static HLIST_HEAD(ax25_linkfail_list); 43 36 static DEFINE_SPINLOCK(linkfail_lock); 44 37 45 38 static struct listen_struct { ··· 42 49 } *listen_list = NULL; 43 50 static DEFINE_SPINLOCK(listen_lock); 44 51 45 - int ax25_protocol_register(unsigned int pid, 46 - int (*func)(struct sk_buff *, ax25_cb *)) 52 + /* 53 + * Do not register the internal protocols AX25_P_TEXT, AX25_P_SEGMENT, 54 + * AX25_P_IP or AX25_P_ARP ... 55 + */ 56 + void ax25_register_pid(struct ax25_protocol *ap) 47 57 { 48 - struct protocol_struct *protocol; 49 - 50 - if (pid == AX25_P_TEXT || pid == AX25_P_SEGMENT) 51 - return 0; 52 - #ifdef CONFIG_INET 53 - if (pid == AX25_P_IP || pid == AX25_P_ARP) 54 - return 0; 55 - #endif 56 - if ((protocol = kmalloc(sizeof(*protocol), GFP_ATOMIC)) == NULL) 57 - return 0; 58 - 59 - protocol->pid = pid; 60 - protocol->func = func; 61 - 62 58 write_lock_bh(&protocol_list_lock); 63 - protocol->next = protocol_list; 64 - protocol_list = protocol; 59 + ap->next = protocol_list; 60 + protocol_list = ap; 65 61 write_unlock_bh(&protocol_list_lock); 66 - 67 - return 1; 68 62 } 69 63 70 - EXPORT_SYMBOL(ax25_protocol_register); 64 + EXPORT_SYMBOL_GPL(ax25_register_pid); 71 65 72 66 void ax25_protocol_release(unsigned int pid) 73 67 { 74 - struct protocol_struct *s, *protocol; 68 + struct ax25_protocol *s, *protocol; 75 69 76 70 write_lock_bh(&protocol_list_lock); 77 71 protocol = protocol_list; ··· 90 110 91 111 EXPORT_SYMBOL(ax25_protocol_release); 92 112 93 - int ax25_linkfail_register(void (*func)(ax25_cb *, int)) 113 + void ax25_linkfail_register(struct ax25_linkfail *lf) 94 114 { 95 - struct linkfail_struct *linkfail; 96 - 97 - if ((linkfail = kmalloc(sizeof(*linkfail), GFP_ATOMIC)) == NULL) 98 - return 0; 99 - 100 - linkfail->func = func; 101 - 102 115 spin_lock_bh(&linkfail_lock); 103 - linkfail->next = linkfail_list; 104 - linkfail_list = linkfail; 116 + hlist_add_head(&lf->lf_node, &ax25_linkfail_list); 105 117 spin_unlock_bh(&linkfail_lock); 106 - 107 - return 1; 108 118 } 109 119 110 120 EXPORT_SYMBOL(ax25_linkfail_register); 111 121 112 - void ax25_linkfail_release(void (*func)(ax25_cb *, int)) 122 + void ax25_linkfail_release(struct ax25_linkfail *lf) 113 123 { 114 - struct linkfail_struct *s, *linkfail; 115 - 116 124 spin_lock_bh(&linkfail_lock); 117 - linkfail = linkfail_list; 118 - if (linkfail == NULL) { 119 - spin_unlock_bh(&linkfail_lock); 120 - return; 121 - } 122 - 123 - if (linkfail->func == func) { 124 - linkfail_list = linkfail->next; 125 - spin_unlock_bh(&linkfail_lock); 126 - kfree(linkfail); 127 - return; 128 - } 129 - 130 - while (linkfail != NULL && linkfail->next != NULL) { 131 - if (linkfail->next->func == func) { 132 - s = linkfail->next; 133 - linkfail->next = linkfail->next->next; 134 - spin_unlock_bh(&linkfail_lock); 135 - kfree(s); 136 - return; 137 - } 138 - 139 - linkfail = linkfail->next; 140 - } 125 + hlist_del_init(&lf->lf_node); 141 126 spin_unlock_bh(&linkfail_lock); 142 127 } 143 128 ··· 116 171 return 0; 117 172 118 173 if ((listen = kmalloc(sizeof(*listen), GFP_ATOMIC)) == NULL) 119 - return 0; 174 + return -ENOMEM; 120 175 121 176 listen->callsign = *callsign; 122 177 listen->dev = dev; ··· 126 181 listen_list = listen; 127 182 spin_unlock_bh(&listen_lock); 128 183 129 - return 1; 184 + return 0; 130 185 } 131 186 132 187 EXPORT_SYMBOL(ax25_listen_register); ··· 168 223 int (*ax25_protocol_function(unsigned int pid))(struct sk_buff *, ax25_cb *) 169 224 { 170 225 int (*res)(struct sk_buff *, ax25_cb *) = NULL; 171 - struct protocol_struct *protocol; 226 + struct ax25_protocol *protocol; 172 227 173 228 read_lock(&protocol_list_lock); 174 229 for (protocol = protocol_list; protocol != NULL; protocol = protocol->next) ··· 187 242 188 243 spin_lock_bh(&listen_lock); 189 244 for (listen = listen_list; listen != NULL; listen = listen->next) 190 - if (ax25cmp(&listen->callsign, callsign) == 0 && (listen->dev == dev || listen->dev == NULL)) { 245 + if (ax25cmp(&listen->callsign, callsign) == 0 && 246 + (listen->dev == dev || listen->dev == NULL)) { 191 247 spin_unlock_bh(&listen_lock); 192 248 return 1; 193 249 } ··· 199 253 200 254 void ax25_link_failed(ax25_cb *ax25, int reason) 201 255 { 202 - struct linkfail_struct *linkfail; 256 + struct ax25_linkfail *lf; 257 + struct hlist_node *node; 203 258 204 259 spin_lock_bh(&linkfail_lock); 205 - for (linkfail = linkfail_list; linkfail != NULL; linkfail = linkfail->next) 206 - (linkfail->func)(ax25, reason); 260 + hlist_for_each_entry(lf, node, &ax25_linkfail_list, lf_node) 261 + lf->func(ax25, reason); 207 262 spin_unlock_bh(&linkfail_lock); 208 263 } 209 264 210 265 int ax25_protocol_is_registered(unsigned int pid) 211 266 { 212 - struct protocol_struct *protocol; 267 + struct ax25_protocol *protocol; 213 268 int res = 0; 214 269 215 270 read_lock_bh(&protocol_list_lock);
+1 -1
net/ax25/ax25_route.c
··· 71 71 write_unlock(&ax25_route_lock); 72 72 } 73 73 74 - static int ax25_rt_add(struct ax25_routes_struct *route) 74 + static int __must_check ax25_rt_add(struct ax25_routes_struct *route) 75 75 { 76 76 ax25_route *ax25_rt; 77 77 ax25_dev *ax25_dev;
+2 -1
net/ipv4/route.c
··· 1325 1325 /* Check for load limit; set rate_last to the latest sent 1326 1326 * redirect. 1327 1327 */ 1328 - if (time_after(jiffies, 1328 + if (rt->u.dst.rate_tokens == 0 || 1329 + time_after(jiffies, 1329 1330 (rt->u.dst.rate_last + 1330 1331 (ip_rt_redirect_load << rt->u.dst.rate_tokens)))) { 1331 1332 icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, rt->rt_gateway);
+2 -1
net/ipv4/tcp_ipv4.c
··· 928 928 if (tp->md5sig_info->entries4 == 0) { 929 929 kfree(tp->md5sig_info->keys4); 930 930 tp->md5sig_info->keys4 = NULL; 931 + tp->md5sig_info->alloced4 = 0; 931 932 } else if (tp->md5sig_info->entries4 != i) { 932 933 /* Need to do some manipulation */ 933 934 memcpy(&tp->md5sig_info->keys4[i], ··· 1186 1185 return 0; 1187 1186 1188 1187 if (hash_expected && !hash_location) { 1189 - LIMIT_NETDEBUG(KERN_INFO "MD5 Hash NOT expected but found " 1188 + LIMIT_NETDEBUG(KERN_INFO "MD5 Hash expected but NOT found " 1190 1189 "(" NIPQUAD_FMT ", %d)->(" NIPQUAD_FMT ", %d)\n", 1191 1190 NIPQUAD(iph->saddr), ntohs(th->source), 1192 1191 NIPQUAD(iph->daddr), ntohs(th->dest));
+3 -2
net/ipv6/netfilter/Kconfig
··· 7 7 8 8 config NF_CONNTRACK_IPV6 9 9 tristate "IPv6 connection tracking support (EXPERIMENTAL)" 10 - depends on EXPERIMENTAL && NF_CONNTRACK 10 + depends on INET && IPV6 && EXPERIMENTAL && NF_CONNTRACK 11 11 ---help--- 12 12 Connection tracking keeps a record of what packets have passed 13 13 through your machine, in order to figure out how they are related ··· 21 21 22 22 config IP6_NF_QUEUE 23 23 tristate "IP6 Userspace queueing via NETLINK (OBSOLETE)" 24 + depends on INET && IPV6 && NETFILTER && EXPERIMENTAL 24 25 ---help--- 25 26 26 27 This option adds a queue handler to the kernel for IPv6 ··· 42 41 43 42 config IP6_NF_IPTABLES 44 43 tristate "IP6 tables support (required for filtering)" 45 - depends on NETFILTER_XTABLES 44 + depends on INET && IPV6 && EXPERIMENTAL && NETFILTER_XTABLES 46 45 help 47 46 ip6tables is a general, extensible packet identification framework. 48 47 Currently only the packet filtering and packet mangling subsystem
+12 -3
net/netrom/af_netrom.c
··· 1377 1377 1378 1378 static struct net_device **dev_nr; 1379 1379 1380 + static struct ax25_protocol nr_pid = { 1381 + .pid = AX25_P_NETROM, 1382 + .func = nr_route_frame 1383 + }; 1384 + 1385 + static struct ax25_linkfail nr_linkfail_notifier = { 1386 + .func = nr_link_failed, 1387 + }; 1388 + 1380 1389 static int __init nr_proto_init(void) 1381 1390 { 1382 1391 int i; ··· 1433 1424 1434 1425 register_netdevice_notifier(&nr_dev_notifier); 1435 1426 1436 - ax25_protocol_register(AX25_P_NETROM, nr_route_frame); 1437 - ax25_linkfail_register(nr_link_failed); 1427 + ax25_register_pid(&nr_pid); 1428 + ax25_linkfail_register(&nr_linkfail_notifier); 1438 1429 1439 1430 #ifdef CONFIG_SYSCTL 1440 1431 nr_register_sysctl(); ··· 1483 1474 nr_unregister_sysctl(); 1484 1475 #endif 1485 1476 1486 - ax25_linkfail_release(nr_link_failed); 1477 + ax25_linkfail_release(&nr_linkfail_notifier); 1487 1478 ax25_protocol_release(AX25_P_NETROM); 1488 1479 1489 1480 unregister_netdevice_notifier(&nr_dev_notifier);
+18 -6
net/netrom/nr_dev.c
··· 128 128 return -37; 129 129 } 130 130 131 - static int nr_set_mac_address(struct net_device *dev, void *addr) 131 + static int __must_check nr_set_mac_address(struct net_device *dev, void *addr) 132 132 { 133 133 struct sockaddr *sa = addr; 134 + int err; 134 135 135 - if (dev->flags & IFF_UP) 136 + if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) 137 + return 0; 138 + 139 + if (dev->flags & IFF_UP) { 140 + err = ax25_listen_register((ax25_address *)sa->sa_data, NULL); 141 + if (err) 142 + return err; 143 + 136 144 ax25_listen_release((ax25_address *)dev->dev_addr, NULL); 145 + } 137 146 138 147 memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); 139 - 140 - if (dev->flags & IFF_UP) 141 - ax25_listen_register((ax25_address *)dev->dev_addr, NULL); 142 148 143 149 return 0; 144 150 } 145 151 146 152 static int nr_open(struct net_device *dev) 147 153 { 154 + int err; 155 + 156 + err = ax25_listen_register((ax25_address *)dev->dev_addr, NULL); 157 + if (err) 158 + return err; 159 + 148 160 netif_start_queue(dev); 149 - ax25_listen_register((ax25_address *)dev->dev_addr, NULL); 161 + 150 162 return 0; 151 163 } 152 164
+13 -6
net/netrom/nr_route.c
··· 87 87 * Add a new route to a node, and in the process add the node and the 88 88 * neighbour if it is new. 89 89 */ 90 - static int nr_add_node(ax25_address *nr, const char *mnemonic, ax25_address *ax25, 91 - ax25_digi *ax25_digi, struct net_device *dev, int quality, int obs_count) 90 + static int __must_check nr_add_node(ax25_address *nr, const char *mnemonic, 91 + ax25_address *ax25, ax25_digi *ax25_digi, struct net_device *dev, 92 + int quality, int obs_count) 92 93 { 93 94 struct nr_node *nr_node; 94 95 struct nr_neigh *nr_neigh; ··· 407 406 /* 408 407 * Lock a neighbour with a quality. 409 408 */ 410 - static int nr_add_neigh(ax25_address *callsign, ax25_digi *ax25_digi, struct net_device *dev, unsigned int quality) 409 + static int __must_check nr_add_neigh(ax25_address *callsign, 410 + ax25_digi *ax25_digi, struct net_device *dev, unsigned int quality) 411 411 { 412 412 struct nr_neigh *nr_neigh; 413 413 ··· 779 777 nr_src = (ax25_address *)(skb->data + 0); 780 778 nr_dest = (ax25_address *)(skb->data + 7); 781 779 782 - if (ax25 != NULL) 783 - nr_add_node(nr_src, "", &ax25->dest_addr, ax25->digipeat, 784 - ax25->ax25_dev->dev, 0, sysctl_netrom_obsolescence_count_initialiser); 780 + if (ax25 != NULL) { 781 + ret = nr_add_node(nr_src, "", &ax25->dest_addr, ax25->digipeat, 782 + ax25->ax25_dev->dev, 0, 783 + sysctl_netrom_obsolescence_count_initialiser); 784 + if (ret) 785 + return ret; 786 + } 785 787 786 788 if ((dev = nr_dev_get(nr_dest)) != NULL) { /* Its for me */ 787 789 if (ax25 == NULL) /* Its from me */ ··· 850 844 ret = (nr_neigh->ax25 != NULL); 851 845 nr_node_unlock(nr_node); 852 846 nr_node_put(nr_node); 847 + 853 848 return ret; 854 849 } 855 850
+14 -4
net/rose/af_rose.c
··· 1314 1314 if (copy_from_user(&rose_callsign, argp, sizeof(ax25_address))) 1315 1315 return -EFAULT; 1316 1316 if (ax25cmp(&rose_callsign, &null_ax25_address) != 0) 1317 - ax25_listen_register(&rose_callsign, NULL); 1317 + return ax25_listen_register(&rose_callsign, NULL); 1318 + 1318 1319 return 0; 1319 1320 1320 1321 case SIOCRSGL2CALL: ··· 1482 1481 1483 1482 static struct net_device **dev_rose; 1484 1483 1484 + static struct ax25_protocol rose_pid = { 1485 + .pid = AX25_P_ROSE, 1486 + .func = rose_route_frame 1487 + }; 1488 + 1489 + static struct ax25_linkfail rose_linkfail_notifier = { 1490 + .func = rose_link_failed 1491 + }; 1492 + 1485 1493 static int __init rose_proto_init(void) 1486 1494 { 1487 1495 int i; ··· 1540 1530 sock_register(&rose_family_ops); 1541 1531 register_netdevice_notifier(&rose_dev_notifier); 1542 1532 1543 - ax25_protocol_register(AX25_P_ROSE, rose_route_frame); 1544 - ax25_linkfail_register(rose_link_failed); 1533 + ax25_register_pid(&rose_pid); 1534 + ax25_linkfail_register(&rose_linkfail_notifier); 1545 1535 1546 1536 #ifdef CONFIG_SYSCTL 1547 1537 rose_register_sysctl(); ··· 1589 1579 rose_rt_free(); 1590 1580 1591 1581 ax25_protocol_release(AX25_P_ROSE); 1592 - ax25_linkfail_release(rose_link_failed); 1582 + ax25_linkfail_release(&rose_linkfail_notifier); 1593 1583 1594 1584 if (ax25cmp(&rose_callsign, &null_ax25_address) != 0) 1595 1585 ax25_listen_release(&rose_callsign, NULL);
+18 -4
net/rose/rose_dev.c
··· 93 93 static int rose_set_mac_address(struct net_device *dev, void *addr) 94 94 { 95 95 struct sockaddr *sa = addr; 96 + int err; 96 97 97 - rose_del_loopback_node((rose_address *)dev->dev_addr); 98 + if (!memcpy(dev->dev_addr, sa->sa_data, dev->addr_len)) 99 + return 0; 100 + 101 + if (dev->flags & IFF_UP) { 102 + err = rose_add_loopback_node((rose_address *)dev->dev_addr); 103 + if (err) 104 + return err; 105 + 106 + rose_del_loopback_node((rose_address *)dev->dev_addr); 107 + } 98 108 99 109 memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); 100 - 101 - rose_add_loopback_node((rose_address *)dev->dev_addr); 102 110 103 111 return 0; 104 112 } 105 113 106 114 static int rose_open(struct net_device *dev) 107 115 { 116 + int err; 117 + 118 + err = rose_add_loopback_node((rose_address *)dev->dev_addr); 119 + if (err) 120 + return err; 121 + 108 122 netif_start_queue(dev); 109 - rose_add_loopback_node((rose_address *)dev->dev_addr); 123 + 110 124 return 0; 111 125 } 112 126
+3 -2
net/rose/rose_loopback.c
··· 79 79 80 80 skb->h.raw = skb->data; 81 81 82 - if ((sk = rose_find_socket(lci_o, rose_loopback_neigh)) != NULL) { 82 + sk = rose_find_socket(lci_o, &rose_loopback_neigh); 83 + if (sk) { 83 84 if (rose_process_rx_frame(sk, skb) == 0) 84 85 kfree_skb(skb); 85 86 continue; ··· 88 87 89 88 if (frametype == ROSE_CALL_REQUEST) { 90 89 if ((dev = rose_dev_get(dest)) != NULL) { 91 - if (rose_rx_call_request(skb, dev, rose_loopback_neigh, lci_o) == 0) 90 + if (rose_rx_call_request(skb, dev, &rose_loopback_neigh, lci_o) == 0) 92 91 kfree_skb(skb); 93 92 } else { 94 93 kfree_skb(skb);
+22 -25
net/rose/rose_route.c
··· 46 46 static struct rose_route *rose_route_list; 47 47 static DEFINE_SPINLOCK(rose_route_list_lock); 48 48 49 - struct rose_neigh *rose_loopback_neigh; 49 + struct rose_neigh rose_loopback_neigh; 50 50 51 51 /* 52 52 * Add a new route to a node, and in the process add the node and the 53 53 * neighbour if it is new. 54 54 */ 55 - static int rose_add_node(struct rose_route_struct *rose_route, 55 + static int __must_check rose_add_node(struct rose_route_struct *rose_route, 56 56 struct net_device *dev) 57 57 { 58 58 struct rose_node *rose_node, *rose_tmpn, *rose_tmpp; ··· 361 361 /* 362 362 * Add the loopback neighbour. 363 363 */ 364 - int rose_add_loopback_neigh(void) 364 + void rose_add_loopback_neigh(void) 365 365 { 366 - if ((rose_loopback_neigh = kmalloc(sizeof(struct rose_neigh), GFP_ATOMIC)) == NULL) 367 - return -ENOMEM; 366 + struct rose_neigh *sn = &rose_loopback_neigh; 368 367 369 - rose_loopback_neigh->callsign = null_ax25_address; 370 - rose_loopback_neigh->digipeat = NULL; 371 - rose_loopback_neigh->ax25 = NULL; 372 - rose_loopback_neigh->dev = NULL; 373 - rose_loopback_neigh->count = 0; 374 - rose_loopback_neigh->use = 0; 375 - rose_loopback_neigh->dce_mode = 1; 376 - rose_loopback_neigh->loopback = 1; 377 - rose_loopback_neigh->number = rose_neigh_no++; 378 - rose_loopback_neigh->restarted = 1; 368 + sn->callsign = null_ax25_address; 369 + sn->digipeat = NULL; 370 + sn->ax25 = NULL; 371 + sn->dev = NULL; 372 + sn->count = 0; 373 + sn->use = 0; 374 + sn->dce_mode = 1; 375 + sn->loopback = 1; 376 + sn->number = rose_neigh_no++; 377 + sn->restarted = 1; 379 378 380 - skb_queue_head_init(&rose_loopback_neigh->queue); 379 + skb_queue_head_init(&sn->queue); 381 380 382 - init_timer(&rose_loopback_neigh->ftimer); 383 - init_timer(&rose_loopback_neigh->t0timer); 381 + init_timer(&sn->ftimer); 382 + init_timer(&sn->t0timer); 384 383 385 384 spin_lock_bh(&rose_neigh_list_lock); 386 - rose_loopback_neigh->next = rose_neigh_list; 387 - rose_neigh_list = rose_loopback_neigh; 385 + sn->next = rose_neigh_list; 386 + rose_neigh_list = sn; 388 387 spin_unlock_bh(&rose_neigh_list_lock); 389 - 390 - return 0; 391 388 } 392 389 393 390 /* ··· 418 421 rose_node->mask = 10; 419 422 rose_node->count = 1; 420 423 rose_node->loopback = 1; 421 - rose_node->neighbour[0] = rose_loopback_neigh; 424 + rose_node->neighbour[0] = &rose_loopback_neigh; 422 425 423 426 /* Insert at the head of list. Address is always mask=10 */ 424 427 rose_node->next = rose_node_list; 425 428 rose_node_list = rose_node; 426 429 427 - rose_loopback_neigh->count++; 430 + rose_loopback_neigh.count++; 428 431 429 432 out: 430 433 spin_unlock_bh(&rose_node_list_lock); ··· 455 458 456 459 rose_remove_node(rose_node); 457 460 458 - rose_loopback_neigh->count--; 461 + rose_loopback_neigh.count--; 459 462 460 463 out: 461 464 spin_unlock_bh(&rose_node_list_lock);
+7 -7
sound/oss/dmasound/tas3001c.c
··· 50 50 int output_id; 51 51 int speaker_id; 52 52 struct tas_drce_t drce_state; 53 + struct work_struct change; 53 54 }; 54 55 55 56 ··· 668 667 } 669 668 670 669 static void 671 - tas3001c_device_change_handler(void *self) 670 + tas3001c_device_change_handler(struct work_struct *work) 672 671 { 673 - if (self) 674 - tas3001c_update_device_parameters(self); 672 + struct tas3001c_data_t *self; 673 + self = container_of(work, struct tas3001c_data_t, change); 674 + tas3001c_update_device_parameters(self); 675 675 } 676 - 677 - static struct work_struct device_change; 678 676 679 677 static int 680 678 tas3001c_output_device_change( struct tas3001c_data_t *self, ··· 685 685 self->output_id=output_id; 686 686 self->speaker_id=speaker_id; 687 687 688 - schedule_work(&device_change); 688 + schedule_work(&self->change); 689 689 return 0; 690 690 } 691 691 ··· 823 823 tas3001c_write_biquad_shadow(self, i, j, 824 824 &tas3001c_eq_unity); 825 825 826 - INIT_WORK(&device_change, tas3001c_device_change_handler, self); 826 + INIT_WORK(&self->change, tas3001c_device_change_handler); 827 827 return 0; 828 828 } 829 829
+7 -8
sound/oss/dmasound/tas3004.c
··· 48 48 int output_id; 49 49 int speaker_id; 50 50 struct tas_drce_t drce_state; 51 + struct work_struct change; 51 52 }; 52 53 53 54 #define MAKE_TIME(sec,usec) (((sec)<<12) + (50000+(usec/10)*(1<<12))/100000) ··· 915 914 } 916 915 917 916 static void 918 - tas3004_device_change_handler(void *self) 917 + tas3004_device_change_handler(struct work_struct *work) 919 918 { 920 - if (!self) return; 921 - 922 - tas3004_update_device_parameters((struct tas3004_data_t *)self); 919 + struct tas3004_data_t *self; 920 + self = container_of(work, struct tas3004_data_t, change); 921 + tas3004_update_device_parameters(self); 923 922 } 924 - 925 - static struct work_struct device_change; 926 923 927 924 static int 928 925 tas3004_output_device_change( struct tas3004_data_t *self, ··· 932 933 self->output_id=output_id; 933 934 self->speaker_id=speaker_id; 934 935 935 - schedule_work(&device_change); 936 + schedule_work(&self->change); 936 937 937 938 return 0; 938 939 } ··· 1111 1112 tas3004_write_register(self, TAS3004_REG_MCR2, &mcr2, WRITE_SHADOW); 1112 1113 tas3004_write_register(self, TAS3004_REG_DRC, drce_init, WRITE_SHADOW); 1113 1114 1114 - INIT_WORK(&device_change, tas3004_device_change_handler, self); 1115 + INIT_WORK(&self->change, tas3004_device_change_handler); 1115 1116 return 0; 1116 1117 } 1117 1118