···14931493# CONFIG_DEBUG_VM is not set14941494# CONFIG_DEBUG_LIST is not set14951495# CONFIG_FRAME_POINTER is not set14961496-CONFIG_UNWIND_INFO=y14971497-CONFIG_STACK_UNWIND=y14981496# CONFIG_FORCED_INLINING is not set14991497# CONFIG_HEADERS_CHECK is not set15001498# CONFIG_RCU_TORTURE_TEST is not set
+8-25
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
···126126 }127127}128128129129-static void wrport(u16 port, u8 bit_width, u32 value)130130-{131131- if (bit_width <= 8)132132- outb(value, port);133133- else if (bit_width <= 16)134134- outw(value, port);135135- else if (bit_width <= 32)136136- outl(value, port);137137-}138138-139139-static void rdport(u16 port, u8 bit_width, u32 * ret)140140-{141141- *ret = 0;142142- if (bit_width <= 8)143143- *ret = inb(port);144144- else if (bit_width <= 16)145145- *ret = inw(port);146146- else if (bit_width <= 32)147147- *ret = inl(port);148148-}149149-150129struct msr_addr {151130 u32 reg;152131};···156177 rdmsr(cmd->addr.msr.reg, cmd->val, h);157178 break;158179 case SYSTEM_IO_CAPABLE:159159- rdport(cmd->addr.io.port, cmd->addr.io.bit_width, &cmd->val);180180+ acpi_os_read_port((acpi_io_address)cmd->addr.io.port,181181+ &cmd->val,182182+ (u32)cmd->addr.io.bit_width);160183 break;161184 default:162185 break;···174193 wrmsr(cmd->addr.msr.reg, cmd->val, h);175194 break;176195 case SYSTEM_IO_CAPABLE:177177- wrport(cmd->addr.io.port, cmd->addr.io.bit_width, cmd->val);196196+ acpi_os_write_port((acpi_io_address)cmd->addr.io.port,197197+ cmd->val,198198+ (u32)cmd->addr.io.bit_width);178199 break;179200 default:180201 break;···682699 if (result)683700 goto err_freqfree;684701685685- switch (data->cpu_feature) {702702+ switch (perf->control_register.space_id) {686703 case ACPI_ADR_SPACE_SYSTEM_IO:687704 /* Current speed is unknown and not detectable by IO port */688705 policy->cur = acpi_cpufreq_guess_freq(data, policy->cpu);689706 break;690707 case ACPI_ADR_SPACE_FIXED_HARDWARE:691708 acpi_cpufreq_driver.get = get_cur_freq_on_cpu;692692- get_cur_freq_on_cpu(cpu);709709+ policy->cur = get_cur_freq_on_cpu(cpu);693710 break;694711 default:695712 break;
+3-1
arch/i386/kernel/cpu/cpufreq/longhaul.c
···787787 switch (c->x86_model) {788788 case 6 ... 9:789789 return cpufreq_register_driver(&longhaul_driver);790790+ case 10:791791+ printk(KERN_ERR PFX "Use acpi-cpufreq driver for VIA C7\n");790792 default:791791- printk (KERN_INFO PFX "Unknown VIA CPU. Contact davej@codemonkey.org.uk\n");793793+ ;;792794 }793795794796 return -ENODEV;
···9494asmlinkage void machine_check(void);95959696int kstack_depth_to_print = 24;9797-#ifdef CONFIG_STACK_UNWIND9898-static int call_trace = 1;9999-#else100100-#define call_trace (-1)101101-#endif10297ATOMIC_NOTIFIER_HEAD(i386die_chain);1039810499int register_die_notifier(struct notifier_block *nb)···147152 return ebp;148153}149154150150-struct ops_and_data {151151- struct stacktrace_ops *ops;152152- void *data;153153-};154154-155155-static asmlinkage int156156-dump_trace_unwind(struct unwind_frame_info *info, void *data)157157-{158158- struct ops_and_data *oad = (struct ops_and_data *)data;159159- int n = 0;160160- unsigned long sp = UNW_SP(info);161161-162162- if (arch_unw_user_mode(info))163163- return -1;164164- while (unwind(info) == 0 && UNW_PC(info)) {165165- n++;166166- oad->ops->address(oad->data, UNW_PC(info));167167- if (arch_unw_user_mode(info))168168- break;169169- if ((sp & ~(PAGE_SIZE - 1)) == (UNW_SP(info) & ~(PAGE_SIZE - 1))170170- && sp > UNW_SP(info))171171- break;172172- sp = UNW_SP(info);173173- }174174- return n;175175-}176176-177155#define MSG(msg) ops->warning(data, msg)178156179157void dump_trace(struct task_struct *task, struct pt_regs *regs,···158190 if (!task)159191 task = current;160192161161- if (call_trace >= 0) {162162- int unw_ret = 0;163163- struct unwind_frame_info info;164164- struct ops_and_data oad = { .ops = ops, .data = data };165165-166166- if (regs) {167167- if (unwind_init_frame_info(&info, task, regs) == 0)168168- unw_ret = dump_trace_unwind(&info, &oad);169169- } else if (task == current)170170- unw_ret = unwind_init_running(&info, dump_trace_unwind,171171- &oad);172172- else {173173- if (unwind_init_blocked(&info, task) == 0)174174- unw_ret = dump_trace_unwind(&info, &oad);175175- }176176- if (unw_ret > 0) {177177- if (call_trace == 1 && !arch_unw_user_mode(&info)) {178178- ops->warning_symbol(data,179179- "DWARF2 unwinder stuck at %s",180180- UNW_PC(&info));181181- if (UNW_SP(&info) >= PAGE_OFFSET) {182182- MSG("Leftover inexact backtrace:");183183- stack = (void *)UNW_SP(&info);184184- if (!stack)185185- return;186186- ebp = UNW_FP(&info);187187- } else188188- MSG("Full inexact backtrace again:");189189- } else if (call_trace >= 1)190190- return;191191- else192192- MSG("Full inexact backtrace again:");193193- } else194194- MSG("Inexact backtrace:");195195- }196193 if (!stack) {197194 unsigned long dummy;198195 stack = &dummy;···11911258 return 1;11921259}11931260__setup("kstack=", kstack_setup);11941194-11951195-#ifdef CONFIG_STACK_UNWIND11961196-static int __init call_trace_setup(char *s)11971197-{11981198- if (strcmp(s, "old") == 0)11991199- call_trace = -1;12001200- else if (strcmp(s, "both") == 0)12011201- call_trace = 0;12021202- else if (strcmp(s, "newfallback") == 0)12031203- call_trace = 1;12041204- else if (strcmp(s, "new") == 2)12051205- call_trace = 2;12061206- return 1;12071207-}12081208-__setup("call_trace=", call_trace_setup);12091209-#endif
+34-13
arch/s390/defconfig
···11#22# Automatically generated make config: don't edit33-# Linux kernel version: 2.6.19-rc244-# Wed Oct 18 17:11:10 200633+# Linux kernel version: 2.6.20-rc144+# Fri Dec 15 16:52:28 200655#66CONFIG_MMU=y77CONFIG_LOCKDEP_SUPPORT=y88CONFIG_STACKTRACE_SUPPORT=y99CONFIG_RWSEM_XCHGADD_ALGORITHM=y1010+# CONFIG_ARCH_HAS_ILOG2_U32 is not set1111+# CONFIG_ARCH_HAS_ILOG2_U64 is not set1012CONFIG_GENERIC_HWEIGHT=y1111-CONFIG_GENERIC_CALIBRATE_DELAY=y1213CONFIG_GENERIC_TIME=y1314CONFIG_S390=y1415CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"···3837CONFIG_IKCONFIG=y3938CONFIG_IKCONFIG_PROC=y4039# CONFIG_CPUSETS is not set4040+CONFIG_SYSFS_DEPRECATED=y4141# CONFIG_RELAY is not set4242CONFIG_INITRAMFS_SOURCE=""4343# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set4444CONFIG_SYSCTL=y4545# CONFIG_EMBEDDED is not set4646-# CONFIG_SYSCTL_SYSCALL is not set4646+CONFIG_SYSCTL_SYSCALL=y4747CONFIG_KALLSYMS=y4848# CONFIG_KALLSYMS_ALL is not set4949# CONFIG_KALLSYMS_EXTRA_PASS is not set···121119CONFIG_CHECK_STACK=y122120CONFIG_STACK_GUARD=256123121# CONFIG_WARN_STACK is not set122122+CONFIG_ARCH_POPULATES_NODE_MAP=y124123CONFIG_SELECT_MEMORY_MODEL=y125124CONFIG_FLATMEM_MANUAL=y126125# CONFIG_DISCONTIGMEM_MANUAL is not set···131128# CONFIG_SPARSEMEM_STATIC is not set132129CONFIG_SPLIT_PTLOCK_CPUS=4133130CONFIG_RESOURCES_64BIT=y131131+CONFIG_HOLES_IN_ZONE=y134132135133#136134# I/O subsystem configuration···200196# CONFIG_TCP_CONG_ADVANCED is not set201197CONFIG_TCP_CONG_CUBIC=y202198CONFIG_DEFAULT_TCP_CONG="cubic"199199+# CONFIG_TCP_MD5SIG is not set203200CONFIG_IPV6=y204201# CONFIG_IPV6_PRIVACY is not set205202# CONFIG_IPV6_ROUTER_PREF is not set···216211# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set217212CONFIG_IPV6_SIT=y218213# CONFIG_IPV6_TUNNEL is not set219219-# CONFIG_IPV6_SUBTREES is not set220214# CONFIG_IPV6_MULTIPLE_TABLES is not set221215# CONFIG_NETWORK_SECMARK is not set222216# CONFIG_NETFILTER is not set···250246# QoS and/or fair queueing251247#252248CONFIG_NET_SCHED=y249249+CONFIG_NET_SCH_FIFO=y253250CONFIG_NET_SCH_CLK_JIFFIES=y254251# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set255252# CONFIG_NET_SCH_CLK_CPU is not set···282277CONFIG_NET_CLS_FW=m283278CONFIG_NET_CLS_U32=m284279# CONFIG_CLS_U32_PERF is not set280280+CONFIG_CLS_U32_MARK=y285281CONFIG_NET_CLS_RSVP=m286282CONFIG_NET_CLS_RSVP6=m287283# CONFIG_NET_EMATCH is not set···321315#322316# CONFIG_RAID_ATTRS is not set323317CONFIG_SCSI=y318318+# CONFIG_SCSI_TGT is not set324319CONFIG_SCSI_NETLINK=y325320CONFIG_SCSI_PROC_FS=y326321···342335CONFIG_SCSI_MULTI_LUN=y343336CONFIG_SCSI_CONSTANTS=y344337CONFIG_SCSI_LOGGING=y338338+CONFIG_SCSI_SCAN_ASYNC=y345339346340#347341# SCSI Transports···554546# CONFIG_AUTOFS_FS is not set555547# CONFIG_AUTOFS4_FS is not set556548# CONFIG_FUSE_FS is not set549549+CONFIG_GENERIC_ACL=y557550558551#559552# CD-ROM/DVD Filesystems···580571CONFIG_TMPFS_POSIX_ACL=y581572# CONFIG_HUGETLB_PAGE is not set582573CONFIG_RAMFS=y583583-# CONFIG_CONFIGFS_FS is not set574574+CONFIG_CONFIGFS_FS=m584575585576#586577# Miscellaneous filesystems···625616# CONFIG_CODA_FS is not set626617# CONFIG_AFS_FS is not set627618# CONFIG_9P_FS is not set628628-CONFIG_GENERIC_ACL=y629619630620#631621# Partition Types···654646# CONFIG_NLS is not set655647656648#649649+# Distributed Lock Manager650650+#651651+CONFIG_DLM=m652652+CONFIG_DLM_TCP=y653653+# CONFIG_DLM_SCTP is not set654654+# CONFIG_DLM_DEBUG is not set655655+656656+#657657# Instrumentation Support658658#659659···679663CONFIG_ENABLE_MUST_CHECK=y680664CONFIG_MAGIC_SYSRQ=y681665# CONFIG_UNUSED_SYMBOLS is not set666666+CONFIG_DEBUG_FS=y667667+CONFIG_HEADERS_CHECK=y682668CONFIG_DEBUG_KERNEL=y683669CONFIG_LOG_BUF_SHIFT=17684670# CONFIG_SCHEDSTATS is not set···697679# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set698680# CONFIG_DEBUG_KOBJECT is not set699681# CONFIG_DEBUG_INFO is not set700700-CONFIG_DEBUG_FS=y701682# CONFIG_DEBUG_VM is not set702683# CONFIG_DEBUG_LIST is not set703684# CONFIG_FRAME_POINTER is not set704685# CONFIG_UNWIND_INFO is not set705686CONFIG_FORCED_INLINING=y706706-CONFIG_HEADERS_CHECK=y707687# CONFIG_RCU_TORTURE_TEST is not set708688# CONFIG_LKDTM is not set709689···715699# Cryptographic options716700#717701CONFIG_CRYPTO=y718718-CONFIG_CRYPTO_ALGAPI=m719719-CONFIG_CRYPTO_BLKCIPHER=m720720-CONFIG_CRYPTO_MANAGER=m702702+CONFIG_CRYPTO_ALGAPI=y703703+CONFIG_CRYPTO_BLKCIPHER=y704704+CONFIG_CRYPTO_MANAGER=y721705# CONFIG_CRYPTO_HMAC is not set706706+# CONFIG_CRYPTO_XCBC is not set722707# CONFIG_CRYPTO_NULL is not set723708# CONFIG_CRYPTO_MD4 is not set724709# CONFIG_CRYPTO_MD5 is not set···730713# CONFIG_CRYPTO_SHA512 is not set731714# CONFIG_CRYPTO_WP512 is not set732715# CONFIG_CRYPTO_TGR192 is not set716716+# CONFIG_CRYPTO_GF128MUL is not set733717CONFIG_CRYPTO_ECB=m734734-CONFIG_CRYPTO_CBC=m718718+CONFIG_CRYPTO_CBC=y719719+# CONFIG_CRYPTO_LRW is not set735720# CONFIG_CRYPTO_DES is not set736721# CONFIG_CRYPTO_DES_S390 is not set737722# CONFIG_CRYPTO_BLOWFISH is not set···759740#760741# Library routines761742#743743+CONFIG_BITREVERSE=m762744# CONFIG_CRC_CCITT is not set763745# CONFIG_CRC16 is not set764746CONFIG_CRC32=m765747# CONFIG_LIBCRC32C is not set766748CONFIG_PLIST=y749749+CONFIG_IOMAP_COPY=y
+2-2
arch/s390/hypfs/hypfs_diag.c
···379379static void *diag204_alloc_rbuf(void)380380{381381 diag204_buf = (void*)__get_free_pages(GFP_KERNEL,0);382382- if (diag204_buf)382382+ if (!diag204_buf)383383 return ERR_PTR(-ENOMEM);384384 diag204_buf_pages = 1;385385 return diag204_buf;···521521 }522522 rc = diag224_get_name_table();523523 if (rc) {524524- diag224_delete_name_table();524524+ diag204_free_buffer();525525 printk(KERN_ERR "hypfs: could not get name table.\n");526526 }527527 return rc;
+14-45
arch/s390/kernel/ipl.c
···609609static struct subsys_attribute on_panic_attr =610610 __ATTR(on_panic, 0644, on_panic_show, on_panic_store);611611612612-static void print_fcp_block(struct ipl_parameter_block *fcp_block)613613-{614614- printk(KERN_EMERG "wwpn: %016llx\n",615615- (unsigned long long)fcp_block->ipl_info.fcp.wwpn);616616- printk(KERN_EMERG "lun: %016llx\n",617617- (unsigned long long)fcp_block->ipl_info.fcp.lun);618618- printk(KERN_EMERG "bootprog: %lld\n",619619- (unsigned long long)fcp_block->ipl_info.fcp.bootprog);620620- printk(KERN_EMERG "br_lba: %lld\n",621621- (unsigned long long)fcp_block->ipl_info.fcp.br_lba);622622- printk(KERN_EMERG "device: %llx\n",623623- (unsigned long long)fcp_block->ipl_info.fcp.devno);624624- printk(KERN_EMERG "opt: %x\n", fcp_block->ipl_info.fcp.opt);625625-}626626-627612void do_reipl(void)628613{629614 struct ccw_dev_id devid;630615 static char buf[100];631616 char loadparm[LOADPARM_LEN + 1];632632-633633- switch (reipl_type) {634634- case IPL_TYPE_CCW:635635- reipl_get_ascii_loadparm(loadparm);636636- printk(KERN_EMERG "reboot on ccw device: 0.0.%04x\n",637637- reipl_block_ccw->ipl_info.ccw.devno);638638- printk(KERN_EMERG "loadparm = '%s'\n", loadparm);639639- break;640640- case IPL_TYPE_FCP:641641- printk(KERN_EMERG "reboot on fcp device:\n");642642- print_fcp_block(reipl_block_fcp);643643- break;644644- default:645645- break;646646- }647617648618 switch (reipl_method) {649619 case IPL_METHOD_CCW_CIO:···624654 reipl_ccw_dev(&devid);625655 break;626656 case IPL_METHOD_CCW_VM:657657+ reipl_get_ascii_loadparm(loadparm);627658 if (strlen(loadparm) == 0)628659 sprintf(buf, "IPL %X",629660 reipl_block_ccw->ipl_info.ccw.devno);···654683 diag308(DIAG308_IPL, NULL);655684 break;656685 }657657- printk(KERN_EMERG "reboot failed!\n");658686 signal_processor(smp_processor_id(), sigp_stop_and_store_status);659687}660688···661691{662692 struct ccw_dev_id devid;663693 static char buf[100];664664-665665- switch (dump_type) {666666- case IPL_TYPE_CCW:667667- printk(KERN_EMERG "Automatic dump on ccw device: 0.0.%04x\n",668668- dump_block_ccw->ipl_info.ccw.devno);669669- break;670670- case IPL_TYPE_FCP:671671- printk(KERN_EMERG "Automatic dump on fcp device:\n");672672- print_fcp_block(dump_block_fcp);673673- break;674674- default:675675- return;676676- }677694678695 switch (dump_method) {679696 case IPL_METHOD_CCW_CIO:···9941037}99510389961039extern void reset_mcck_handler(void);10401040+extern void reset_pgm_handler(void);10411041+extern __u32 dump_prefix_page;99710429981043void s390_reset_system(void)9991044{10001045 struct _lowcore *lc;1001104610021002- /* Stack for interrupt/machine check handler */10031047 lc = (struct _lowcore *)(unsigned long) store_prefix();10481048+10491049+ /* Stack for interrupt/machine check handler */10041050 lc->panic_stack = S390_lowcore.panic_stack;10511051+10521052+ /* Save prefix page address for dump case */10531053+ dump_prefix_page = (unsigned long) lc;1005105410061055 /* Disable prefixing */10071056 set_prefix(0);···10191056 S390_lowcore.mcck_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK;10201057 S390_lowcore.mcck_new_psw.addr =10211058 PSW_ADDR_AMODE | (unsigned long) &reset_mcck_handler;10591059+10601060+ /* Set new program check handler */10611061+ S390_lowcore.program_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK;10621062+ S390_lowcore.program_new_psw.addr =10631063+ PSW_ADDR_AMODE | (unsigned long) &reset_pgm_handler;10641064+10221065 do_reset_calls();10231066}
···11#22# Automatically generated make config: don't edit33+# Linux kernel version: 2.6.20-rc144+# Sun Dec 17 14:20:47 200635#46CONFIG_MMU=y55-CONFIG_UID16=y67CONFIG_HIGHMEM=y78CONFIG_GENERIC_ISA_DMA=y99+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"810911#1012# Code maturity level options1113#1214CONFIG_EXPERIMENTAL=y1313-CONFIG_CLEAN_COMPILE=y1414-CONFIG_STANDALONE=y1515CONFIG_BROKEN_ON_SMP=y1616+CONFIG_INIT_ENV_ARG_LIMIT=3216171718#1819# General setup1920#2121+CONFIG_LOCALVERSION=""2222+CONFIG_LOCALVERSION_AUTO=y2023CONFIG_SWAP=y2124CONFIG_SYSVIPC=y2525+# CONFIG_IPC_NS is not set2226CONFIG_POSIX_MQUEUE=y2327# CONFIG_BSD_PROCESS_ACCT is not set2424-CONFIG_SYSCTL=y2828+# CONFIG_TASKSTATS is not set2929+# CONFIG_UTS_NS is not set2530# CONFIG_AUDIT is not set2626-CONFIG_LOG_BUF_SHIFT=142727-# CONFIG_HOTPLUG is not set2831# CONFIG_IKCONFIG is not set3232+CONFIG_SYSFS_DEPRECATED=y3333+# CONFIG_RELAY is not set3434+CONFIG_INITRAMFS_SOURCE=""3535+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set3636+CONFIG_SYSCTL=y2937# CONFIG_EMBEDDED is not set3838+CONFIG_UID16=y3939+CONFIG_SYSCTL_SYSCALL=y3040CONFIG_KALLSYMS=y3141# CONFIG_KALLSYMS_ALL is not set4242+# CONFIG_KALLSYMS_EXTRA_PASS is not set4343+CONFIG_HOTPLUG=y4444+CONFIG_PRINTK=y4545+CONFIG_BUG=y4646+CONFIG_ELF_CORE=y4747+CONFIG_BASE_FULL=y3248CONFIG_FUTEX=y3349CONFIG_EPOLL=y3434-CONFIG_IOSCHED_NOOP=y3535-CONFIG_IOSCHED_AS=y3636-CONFIG_IOSCHED_DEADLINE=y3737-CONFIG_IOSCHED_CFQ=y3838-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set5050+CONFIG_SHMEM=y5151+CONFIG_SLAB=y5252+CONFIG_VM_EVENT_COUNTERS=y5353+CONFIG_RT_MUTEXES=y5454+# CONFIG_TINY_SHMEM is not set5555+CONFIG_BASE_SMALL=05656+# CONFIG_SLOB is not set39574058#4159# Loadable module support···6143CONFIG_MODULES=y6244CONFIG_MODULE_UNLOAD=y6345# CONFIG_MODULE_FORCE_UNLOAD is not set6464-CONFIG_OBSOLETE_MODPARM=y6546# CONFIG_MODVERSIONS is not set4747+# CONFIG_MODULE_SRCVERSION_ALL is not set6648CONFIG_KMOD=y67496850#6969-# General setup5151+# Block layer7052#7171-CONFIG_VT=y7272-CONFIG_VT_CONSOLE=y7373-CONFIG_HW_CONSOLE=y5353+CONFIG_BLOCK=y5454+# CONFIG_LBD is not set5555+# CONFIG_BLK_DEV_IO_TRACE is not set5656+# CONFIG_LSF is not set5757+5858+#5959+# IO Schedulers6060+#6161+CONFIG_IOSCHED_NOOP=y6262+CONFIG_IOSCHED_AS=y6363+CONFIG_IOSCHED_DEADLINE=y6464+CONFIG_IOSCHED_CFQ=y6565+# CONFIG_DEFAULT_AS is not set6666+# CONFIG_DEFAULT_DEADLINE is not set6767+CONFIG_DEFAULT_CFQ=y6868+# CONFIG_DEFAULT_NOOP is not set6969+CONFIG_DEFAULT_IOSCHED="cfq"7070+7171+#7272+# General machine setup7373+#7474# CONFIG_SMP is not set7575+CONFIG_SPARC=y7576CONFIG_SPARC32=y7677CONFIG_SBUS=y7778CONFIG_SBUSCHAR=y···9861CONFIG_SUN_AUXIO=y9962CONFIG_SUN_IO=y10063CONFIG_RWSEM_GENERIC_SPINLOCK=y6464+CONFIG_GENERIC_FIND_NEXT_BIT=y6565+CONFIG_GENERIC_HWEIGHT=y6666+CONFIG_GENERIC_CALIBRATE_DELAY=y6767+CONFIG_ARCH_MAY_HAVE_PC_FDC=y6868+# CONFIG_ARCH_HAS_ILOG2_U32 is not set6969+# CONFIG_ARCH_HAS_ILOG2_U64 is not set10170CONFIG_SUN_PM=y10271# CONFIG_SUN4 is not set10372CONFIG_PCI=y104104-# CONFIG_PCI_LEGACY_PROC is not set105105-# CONFIG_PCI_NAMES is not set7373+# CONFIG_PCI_MULTITHREAD_PROBE is not set7474+# CONFIG_PCI_DEBUG is not set10675CONFIG_SUN_OPENPROMFS=m7676+# CONFIG_SPARC_LED is not set10777CONFIG_BINFMT_ELF=y10878CONFIG_BINFMT_AOUT=y10979CONFIG_BINFMT_MISC=m11080CONFIG_SUNOS_EMUL=y8181+CONFIG_SELECT_MEMORY_MODEL=y8282+CONFIG_FLATMEM_MANUAL=y8383+# CONFIG_DISCONTIGMEM_MANUAL is not set8484+# CONFIG_SPARSEMEM_MANUAL is not set8585+CONFIG_FLATMEM=y8686+CONFIG_FLAT_NODE_MEM_MAP=y8787+# CONFIG_SPARSEMEM_STATIC is not set8888+CONFIG_SPLIT_PTLOCK_CPUS=48989+# CONFIG_RESOURCES_64BIT is not set1119011291#113113-# Parallel port support114114-#115115-# CONFIG_PARPORT is not set116116-117117-#118118-# Generic Driver Options119119-#120120-# CONFIG_DEBUG_DRIVER is not set121121-122122-#123123-# Graphics support124124-#125125-# CONFIG_FB is not set126126-127127-#128128-# Console display driver support129129-#130130-# CONFIG_MDA_CONSOLE is not set131131-# CONFIG_PROM_CONSOLE is not set132132-CONFIG_DUMMY_CONSOLE=y133133-134134-#135135-# Memory Technology Devices (MTD)136136-#137137-# CONFIG_MTD is not set138138-139139-#140140-# Serial drivers141141-#142142-# CONFIG_SERIAL_8250 is not set143143-144144-#145145-# Non-8250 serial port support146146-#147147-CONFIG_SERIAL_SUNCORE=y148148-CONFIG_SERIAL_SUNZILOG=y149149-CONFIG_SERIAL_SUNZILOG_CONSOLE=y150150-CONFIG_SERIAL_SUNSU=y151151-CONFIG_SERIAL_SUNSU_CONSOLE=y152152-# CONFIG_SERIAL_SUNSAB is not set153153-CONFIG_SERIAL_CORE=y154154-CONFIG_SERIAL_CORE_CONSOLE=y155155-156156-#157157-# Misc Linux/SPARC drivers158158-#159159-CONFIG_SUN_OPENPROMIO=m160160-CONFIG_SUN_MOSTEK_RTC=m161161-# CONFIG_SUN_BPP is not set162162-# CONFIG_SUN_VIDEOPIX is not set163163-# CONFIG_SUN_AURORA is not set164164-# CONFIG_TADPOLE_TS102_UCTRL is not set165165-# CONFIG_SUN_JSFLASH is not set166166-CONFIG_APM_RTC_IS_GMT=y167167-CONFIG_RTC=m168168-169169-#170170-# Block devices171171-#172172-# CONFIG_BLK_DEV_FD is not set173173-# CONFIG_BLK_CPQ_DA is not set174174-# CONFIG_BLK_CPQ_CISS_DA is not set175175-# CONFIG_BLK_DEV_DAC960 is not set176176-# CONFIG_BLK_DEV_UMEM is not set177177-CONFIG_BLK_DEV_LOOP=m178178-CONFIG_BLK_DEV_CRYPTOLOOP=m179179-# CONFIG_BLK_DEV_NBD is not set180180-# CONFIG_BLK_DEV_CARMEL is not set181181-CONFIG_BLK_DEV_RAM=y182182-CONFIG_BLK_DEV_RAM_SIZE=4096183183-CONFIG_BLK_DEV_INITRD=y184184-185185-#186186-# ATA/ATAPI/MFM/RLL support187187-#188188-# CONFIG_IDE is not set189189-190190-#191191-# ISDN subsystem192192-#193193-# CONFIG_ISDN is not set194194-195195-#196196-# SCSI device support197197-#198198-CONFIG_SCSI=y199199-CONFIG_SCSI_PROC_FS=y200200-201201-#202202-# SCSI support type (disk, tape, CD-ROM)203203-#204204-CONFIG_BLK_DEV_SD=y205205-# CONFIG_CHR_DEV_ST is not set206206-# CONFIG_CHR_DEV_OSST is not set207207-CONFIG_BLK_DEV_SR=m208208-# CONFIG_BLK_DEV_SR_VENDOR is not set209209-CONFIG_CHR_DEV_SG=m210210-211211-#212212-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs213213-#214214-# CONFIG_SCSI_MULTI_LUN is not set215215-# CONFIG_SCSI_CONSTANTS is not set216216-# CONFIG_SCSI_LOGGING is not set217217-218218-#219219-# SCSI Transport Attributes220220-#221221-CONFIG_SCSI_SPI_ATTRS=m222222-# CONFIG_SCSI_FC_ATTRS is not set223223-224224-#225225-# SCSI low-level drivers226226-#227227-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set228228-# CONFIG_SCSI_ACARD is not set229229-# CONFIG_SCSI_AACRAID is not set230230-# CONFIG_SCSI_AIC7XXX is not set231231-# CONFIG_SCSI_AIC7XXX_OLD is not set232232-# CONFIG_SCSI_AIC79XX is not set233233-# CONFIG_SCSI_DPT_I2O is not set234234-# CONFIG_SCSI_ADVANSYS is not set235235-# CONFIG_SCSI_MEGARAID is not set236236-# CONFIG_SCSI_SATA is not set237237-# CONFIG_SCSI_BUSLOGIC is not set238238-# CONFIG_SCSI_DMX3191D is not set239239-# CONFIG_SCSI_EATA is not set240240-# CONFIG_SCSI_EATA_PIO is not set241241-# CONFIG_SCSI_FUTURE_DOMAIN is not set242242-# CONFIG_SCSI_GDTH is not set243243-# CONFIG_SCSI_IPS is not set244244-# CONFIG_SCSI_INIA100 is not set245245-# CONFIG_SCSI_SYM53C8XX_2 is not set246246-# CONFIG_SCSI_IPR is not set247247-# CONFIG_SCSI_QLOGIC_ISP is not set248248-# CONFIG_SCSI_QLOGIC_FC is not set249249-# CONFIG_SCSI_QLOGIC_1280 is not set250250-CONFIG_SCSI_QLOGICPTI=m251251-CONFIG_SCSI_QLA2XXX=y252252-# CONFIG_SCSI_QLA21XX is not set253253-# CONFIG_SCSI_QLA22XX is not set254254-# CONFIG_SCSI_QLA2300 is not set255255-# CONFIG_SCSI_QLA2322 is not set256256-# CONFIG_SCSI_QLA6312 is not set257257-# CONFIG_SCSI_QLA6322 is not set258258-# CONFIG_SCSI_DC395x is not set259259-# CONFIG_SCSI_DC390T is not set260260-# CONFIG_SCSI_NSP32 is not set261261-# CONFIG_SCSI_DEBUG is not set262262-CONFIG_SCSI_SUNESP=y263263-264264-#265265-# Fibre Channel support266266-#267267-# CONFIG_FC4 is not set268268-269269-#270270-# Multi-device support (RAID and LVM)271271-#272272-# CONFIG_MD is not set273273-274274-#275275-# Networking support9292+# Networking27693#27794CONFIG_NET=y2789527996#28097# Networking options28198#9999+# CONFIG_NETDEBUG is not set282100CONFIG_PACKET=y283101# CONFIG_PACKET_MMAP is not set284284-CONFIG_NETLINK_DEV=y285102CONFIG_UNIX=y103103+CONFIG_XFRM=y104104+CONFIG_XFRM_USER=m105105+# CONFIG_XFRM_SUB_POLICY is not set286106CONFIG_NET_KEY=m287107CONFIG_INET=y288108# CONFIG_IP_MULTICAST is not set289109# CONFIG_IP_ADVANCED_ROUTER is not set110110+CONFIG_IP_FIB_HASH=y290111CONFIG_IP_PNP=y291112CONFIG_IP_PNP_DHCP=y292113# CONFIG_IP_PNP_BOOTP is not set···156261CONFIG_INET_AH=y157262CONFIG_INET_ESP=y158263CONFIG_INET_IPCOMP=y264264+CONFIG_INET_XFRM_TUNNEL=y265265+CONFIG_INET_TUNNEL=y266266+CONFIG_INET_XFRM_MODE_TRANSPORT=y267267+CONFIG_INET_XFRM_MODE_TUNNEL=y268268+CONFIG_INET_XFRM_MODE_BEET=y269269+CONFIG_INET_DIAG=y270270+CONFIG_INET_TCP_DIAG=y271271+# CONFIG_TCP_CONG_ADVANCED is not set272272+CONFIG_TCP_CONG_CUBIC=y273273+CONFIG_DEFAULT_TCP_CONG="cubic"274274+# CONFIG_TCP_MD5SIG is not set159275CONFIG_IPV6=m160276CONFIG_IPV6_PRIVACY=y277277+# CONFIG_IPV6_ROUTER_PREF is not set161278CONFIG_INET6_AH=m162279CONFIG_INET6_ESP=m163280CONFIG_INET6_IPCOMP=m281281+# CONFIG_IPV6_MIP6 is not set282282+CONFIG_INET6_XFRM_TUNNEL=m283283+CONFIG_INET6_TUNNEL=m284284+CONFIG_INET6_XFRM_MODE_TRANSPORT=m285285+CONFIG_INET6_XFRM_MODE_TUNNEL=m286286+CONFIG_INET6_XFRM_MODE_BEET=m287287+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set288288+CONFIG_IPV6_SIT=m164289CONFIG_IPV6_TUNNEL=m290290+# CONFIG_IPV6_MULTIPLE_TABLES is not set291291+# CONFIG_NETWORK_SECMARK is not set165292# CONFIG_NETFILTER is not set166166-CONFIG_XFRM=y167167-CONFIG_XFRM_USER=m293293+294294+#295295+# DCCP Configuration (EXPERIMENTAL)296296+#297297+# CONFIG_IP_DCCP is not set168298169299#170300# SCTP Configuration (EXPERIMENTAL)···200280# CONFIG_SCTP_HMAC_NONE is not set201281# CONFIG_SCTP_HMAC_SHA1 is not set202282CONFIG_SCTP_HMAC_MD5=y283283+284284+#285285+# TIPC Configuration (EXPERIMENTAL)286286+#287287+# CONFIG_TIPC is not set203288# CONFIG_ATM is not set204289# CONFIG_BRIDGE is not set205290# CONFIG_VLAN_8021Q is not set···214289# CONFIG_ATALK is not set215290# CONFIG_X25 is not set216291# CONFIG_LAPB is not set217217-# CONFIG_NET_DIVERT is not set218292# CONFIG_ECONET is not set219293# CONFIG_WAN_ROUTER is not set220220-# CONFIG_NET_HW_FLOWCONTROL is not set221294222295#223296# QoS and/or fair queueing···226303# Network testing227304#228305CONFIG_NET_PKTGEN=m229229-# CONFIG_NETPOLL is not set230230-# CONFIG_NET_POLL_CONTROLLER is not set231306# CONFIG_HAMRADIO is not set232307# CONFIG_IRDA is not set233308# CONFIG_BT is not set309309+# CONFIG_IEEE80211 is not set310310+311311+#312312+# Device Drivers313313+#314314+315315+#316316+# Generic Driver Options317317+#318318+CONFIG_STANDALONE=y319319+CONFIG_PREVENT_FIRMWARE_BUILD=y320320+# CONFIG_FW_LOADER is not set321321+# CONFIG_DEBUG_DRIVER is not set322322+# CONFIG_SYS_HYPERVISOR is not set323323+324324+#325325+# Connector - unified userspace <-> kernelspace linker326326+#327327+# CONFIG_CONNECTOR is not set328328+329329+#330330+# Memory Technology Devices (MTD)331331+#332332+# CONFIG_MTD is not set333333+334334+#335335+# Parallel port support336336+#337337+# CONFIG_PARPORT is not set338338+339339+#340340+# Plug and Play support341341+#342342+343343+#344344+# Block devices345345+#346346+# CONFIG_BLK_DEV_FD is not set347347+# CONFIG_BLK_CPQ_DA is not set348348+# CONFIG_BLK_CPQ_CISS_DA is not set349349+# CONFIG_BLK_DEV_DAC960 is not set350350+# CONFIG_BLK_DEV_UMEM is not set351351+# CONFIG_BLK_DEV_COW_COMMON is not set352352+CONFIG_BLK_DEV_LOOP=m353353+CONFIG_BLK_DEV_CRYPTOLOOP=m354354+# CONFIG_BLK_DEV_NBD is not set355355+# CONFIG_BLK_DEV_SX8 is not set356356+CONFIG_BLK_DEV_RAM=y357357+CONFIG_BLK_DEV_RAM_COUNT=16358358+CONFIG_BLK_DEV_RAM_SIZE=4096359359+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024360360+CONFIG_BLK_DEV_INITRD=y361361+# CONFIG_CDROM_PKTCDVD is not set362362+# CONFIG_ATA_OVER_ETH is not set363363+364364+#365365+# Misc devices366366+#367367+# CONFIG_SGI_IOC4 is not set368368+# CONFIG_TIFM_CORE is not set369369+370370+#371371+# ATA/ATAPI/MFM/RLL support372372+#373373+# CONFIG_IDE is not set374374+375375+#376376+# SCSI device support377377+#378378+# CONFIG_RAID_ATTRS is not set379379+CONFIG_SCSI=y380380+# CONFIG_SCSI_TGT is not set381381+# CONFIG_SCSI_NETLINK is not set382382+CONFIG_SCSI_PROC_FS=y383383+384384+#385385+# SCSI support type (disk, tape, CD-ROM)386386+#387387+CONFIG_BLK_DEV_SD=y388388+# CONFIG_CHR_DEV_ST is not set389389+# CONFIG_CHR_DEV_OSST is not set390390+CONFIG_BLK_DEV_SR=m391391+# CONFIG_BLK_DEV_SR_VENDOR is not set392392+CONFIG_CHR_DEV_SG=m393393+# CONFIG_CHR_DEV_SCH is not set394394+395395+#396396+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs397397+#398398+# CONFIG_SCSI_MULTI_LUN is not set399399+# CONFIG_SCSI_CONSTANTS is not set400400+# CONFIG_SCSI_LOGGING is not set401401+# CONFIG_SCSI_SCAN_ASYNC is not set402402+403403+#404404+# SCSI Transports405405+#406406+CONFIG_SCSI_SPI_ATTRS=m407407+# CONFIG_SCSI_FC_ATTRS is not set408408+# CONFIG_SCSI_ISCSI_ATTRS is not set409409+# CONFIG_SCSI_SAS_ATTRS is not set410410+# CONFIG_SCSI_SAS_LIBSAS is not set411411+412412+#413413+# SCSI low-level drivers414414+#415415+# CONFIG_ISCSI_TCP is not set416416+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set417417+# CONFIG_SCSI_3W_9XXX is not set418418+# CONFIG_SCSI_ACARD is not set419419+# CONFIG_SCSI_AACRAID is not set420420+# CONFIG_SCSI_AIC7XXX is not set421421+# CONFIG_SCSI_AIC7XXX_OLD is not set422422+# CONFIG_SCSI_AIC79XX is not set423423+# CONFIG_SCSI_AIC94XX is not set424424+# CONFIG_SCSI_DPT_I2O is not set425425+# CONFIG_SCSI_ARCMSR is not set426426+# CONFIG_MEGARAID_NEWGEN is not set427427+# CONFIG_MEGARAID_LEGACY is not set428428+# CONFIG_MEGARAID_SAS is not set429429+# CONFIG_SCSI_HPTIOP is not set430430+# CONFIG_SCSI_DMX3191D is not set431431+# CONFIG_SCSI_FUTURE_DOMAIN is not set432432+# CONFIG_SCSI_IPS is not set433433+# CONFIG_SCSI_INITIO is not set434434+# CONFIG_SCSI_INIA100 is not set435435+# CONFIG_SCSI_STEX is not set436436+# CONFIG_SCSI_SYM53C8XX_2 is not set437437+# CONFIG_SCSI_QLOGIC_1280 is not set438438+CONFIG_SCSI_QLOGICPTI=m439439+# CONFIG_SCSI_QLA_FC is not set440440+# CONFIG_SCSI_QLA_ISCSI is not set441441+# CONFIG_SCSI_LPFC is not set442442+# CONFIG_SCSI_DC395x is not set443443+# CONFIG_SCSI_DC390T is not set444444+# CONFIG_SCSI_NSP32 is not set445445+# CONFIG_SCSI_DEBUG is not set446446+CONFIG_SCSI_SUNESP=y447447+# CONFIG_SCSI_SRP is not set448448+449449+#450450+# Serial ATA (prod) and Parallel ATA (experimental) drivers451451+#452452+# CONFIG_ATA is not set453453+454454+#455455+# Multi-device support (RAID and LVM)456456+#457457+# CONFIG_MD is not set458458+459459+#460460+# Fusion MPT device support461461+#462462+# CONFIG_FUSION is not set463463+# CONFIG_FUSION_SPI is not set464464+# CONFIG_FUSION_FC is not set465465+# CONFIG_FUSION_SAS is not set466466+467467+#468468+# IEEE 1394 (FireWire) support469469+#470470+# CONFIG_IEEE1394 is not set471471+472472+#473473+# I2O device support474474+#475475+# CONFIG_I2O is not set476476+477477+#478478+# Network device support479479+#234480CONFIG_NETDEVICES=y235481CONFIG_DUMMY=m236482# CONFIG_BONDING is not set237483# CONFIG_EQUALIZER is not set238484CONFIG_TUN=m239239-# CONFIG_ETHERTAP is not set240485241486#242487# ARCnet devices243488#244489# CONFIG_ARCNET is not set490490+491491+#492492+# PHY device support493493+#494494+# CONFIG_PHYLIB is not set245495246496#247497# Ethernet (10 or 100Mbit)···426330CONFIG_SUNBMAC=m427331CONFIG_SUNQE=m428332# CONFIG_SUNGEM is not set333333+# CONFIG_CASSINI is not set429334# CONFIG_NET_VENDOR_3COM is not set430335431336#···447350# CONFIG_HAMACHI is not set448351# CONFIG_YELLOWFIN is not set449352# CONFIG_R8169 is not set353353+# CONFIG_SIS190 is not set354354+# CONFIG_SKGE is not set355355+# CONFIG_SKY2 is not set450356# CONFIG_SK98LIN is not set451357# CONFIG_TIGON3 is not set358358+# CONFIG_BNX2 is not set359359+# CONFIG_QLA3XXX is not set452360453361#454362# Ethernet (10000 Mbit)455363#364364+# CONFIG_CHELSIO_T1 is not set456365# CONFIG_IXGB is not set457366# CONFIG_S2IO is not set367367+# CONFIG_MYRI10GE is not set368368+# CONFIG_NETXEN_NIC is not set458369459370#460371# Token Ring devices···485380# CONFIG_NET_FC is not set486381# CONFIG_SHAPER is not set487382# CONFIG_NETCONSOLE is not set383383+# CONFIG_NETPOLL is not set384384+# CONFIG_NET_POLL_CONTROLLER is not set488385489386#490490-# Unix98 PTY support387387+# ISDN subsystem491388#492492-CONFIG_UNIX98_PTYS=y493493-CONFIG_UNIX98_PTY_COUNT=256389389+# CONFIG_ISDN is not set390390+391391+#392392+# Telephony Support393393+#394394+# CONFIG_PHONE is not set494395495396#496397# Input device support497398#498399CONFIG_INPUT=y400400+# CONFIG_INPUT_FF_MEMLESS is not set499401500402#501403# Userland interfaces···517405CONFIG_INPUT_EVBUG=m518406519407#520520-# Input I/O drivers521521-#522522-# CONFIG_GAMEPORT is not set523523-CONFIG_SOUND_GAMEPORT=y524524-CONFIG_SERIO=m525525-# CONFIG_SERIO_I8042 is not set526526-CONFIG_SERIO_SERPORT=m527527-# CONFIG_SERIO_CT82C710 is not set528528-# CONFIG_SERIO_PCIPS2 is not set529529-530530-#531408# Input Device Drivers532409#533410CONFIG_INPUT_KEYBOARD=y···525424# CONFIG_KEYBOARD_LKKBD is not set526425# CONFIG_KEYBOARD_XTKBD is not set527426# CONFIG_KEYBOARD_NEWTON is not set427427+# CONFIG_KEYBOARD_STOWAWAY is not set528428CONFIG_INPUT_MOUSE=y529429CONFIG_MOUSE_PS2=m530430CONFIG_MOUSE_SERIAL=m···535433# CONFIG_INPUT_MISC is not set536434537435#436436+# Hardware I/O ports437437+#438438+CONFIG_SERIO=m439439+# CONFIG_SERIO_I8042 is not set440440+CONFIG_SERIO_SERPORT=m441441+# CONFIG_SERIO_PCIPS2 is not set442442+CONFIG_SERIO_LIBPS2=m443443+# CONFIG_SERIO_RAW is not set444444+# CONFIG_GAMEPORT is not set445445+446446+#447447+# Character devices448448+#449449+CONFIG_VT=y450450+CONFIG_VT_CONSOLE=y451451+CONFIG_HW_CONSOLE=y452452+# CONFIG_VT_HW_CONSOLE_BINDING is not set453453+# CONFIG_SERIAL_NONSTANDARD is not set454454+455455+#456456+# Serial drivers457457+#458458+459459+#460460+# Non-8250 serial port support461461+#462462+CONFIG_SERIAL_SUNCORE=y463463+CONFIG_SERIAL_SUNZILOG=y464464+CONFIG_SERIAL_SUNZILOG_CONSOLE=y465465+CONFIG_SERIAL_SUNSU=y466466+CONFIG_SERIAL_SUNSU_CONSOLE=y467467+# CONFIG_SERIAL_SUNSAB is not set468468+CONFIG_SERIAL_CORE=y469469+CONFIG_SERIAL_CORE_CONSOLE=y470470+# CONFIG_SERIAL_JSM is not set471471+CONFIG_UNIX98_PTYS=y472472+CONFIG_LEGACY_PTYS=y473473+CONFIG_LEGACY_PTY_COUNT=256474474+475475+#476476+# IPMI477477+#478478+# CONFIG_IPMI_HANDLER is not set479479+480480+#481481+# Watchdog Cards482482+#483483+# CONFIG_WATCHDOG is not set484484+CONFIG_HW_RANDOM=m485485+CONFIG_RTC=m486486+# CONFIG_DTLK is not set487487+# CONFIG_R3964 is not set488488+# CONFIG_APPLICOM is not set489489+# CONFIG_DRM is not set490490+# CONFIG_RAW_DRIVER is not set491491+492492+#493493+# TPM devices494494+#495495+# CONFIG_TCG_TPM is not set496496+497497+#498498+# I2C support499499+#500500+# CONFIG_I2C is not set501501+502502+#503503+# SPI support504504+#505505+# CONFIG_SPI is not set506506+# CONFIG_SPI_MASTER is not set507507+508508+#509509+# Dallas's 1-wire bus510510+#511511+# CONFIG_W1 is not set512512+513513+#514514+# Hardware Monitoring support515515+#516516+CONFIG_HWMON=y517517+# CONFIG_HWMON_VID is not set518518+# CONFIG_SENSORS_ABITUGURU is not set519519+# CONFIG_SENSORS_F71805F is not set520520+# CONFIG_SENSORS_PC87427 is not set521521+# CONFIG_SENSORS_VT1211 is not set522522+# CONFIG_HWMON_DEBUG_CHIP is not set523523+524524+#525525+# Multimedia devices526526+#527527+# CONFIG_VIDEO_DEV is not set528528+529529+#530530+# Digital Video Broadcasting Devices531531+#532532+# CONFIG_DVB is not set533533+534534+#535535+# Graphics support536536+#537537+CONFIG_FIRMWARE_EDID=y538538+# CONFIG_FB is not set539539+540540+#541541+# Console display driver support542542+#543543+# CONFIG_PROM_CONSOLE is not set544544+CONFIG_DUMMY_CONSOLE=y545545+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set546546+547547+#548548+# Sound549549+#550550+# CONFIG_SOUND is not set551551+552552+#553553+# HID Devices554554+#555555+CONFIG_HID=y556556+557557+#558558+# USB support559559+#560560+CONFIG_USB_ARCH_HAS_HCD=y561561+CONFIG_USB_ARCH_HAS_OHCI=y562562+CONFIG_USB_ARCH_HAS_EHCI=y563563+# CONFIG_USB is not set564564+565565+#566566+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'567567+#568568+569569+#570570+# USB Gadget Support571571+#572572+# CONFIG_USB_GADGET is not set573573+574574+#575575+# MMC/SD Card support576576+#577577+# CONFIG_MMC is not set578578+579579+#580580+# LED devices581581+#582582+# CONFIG_NEW_LEDS is not set583583+584584+#585585+# LED drivers586586+#587587+588588+#589589+# LED Triggers590590+#591591+592592+#593593+# InfiniBand support594594+#595595+# CONFIG_INFINIBAND is not set596596+597597+#598598+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)599599+#600600+601601+#602602+# Real Time Clock603603+#604604+# CONFIG_RTC_CLASS is not set605605+606606+#607607+# DMA Engine support608608+#609609+# CONFIG_DMA_ENGINE is not set610610+611611+#612612+# DMA Clients613613+#614614+615615+#616616+# DMA Devices617617+#618618+619619+#620620+# Virtualization621621+#622622+623623+#624624+# Misc Linux/SPARC drivers625625+#626626+CONFIG_SUN_OPENPROMIO=m627627+CONFIG_SUN_MOSTEK_RTC=m628628+# CONFIG_SUN_BPP is not set629629+# CONFIG_SUN_VIDEOPIX is not set630630+# CONFIG_TADPOLE_TS102_UCTRL is not set631631+# CONFIG_SUN_JSFLASH is not set632632+633633+#634634+# Unix98 PTY support635635+#636636+CONFIG_UNIX98_PTY_COUNT=256637637+638638+#538639# File systems539640#540641CONFIG_EXT2_FS=y541642CONFIG_EXT2_FS_XATTR=y542643CONFIG_EXT2_FS_POSIX_ACL=y543644CONFIG_EXT2_FS_SECURITY=y645645+# CONFIG_EXT2_FS_XIP is not set544646# CONFIG_EXT3_FS is not set545545-# CONFIG_JBD is not set647647+# CONFIG_EXT4DEV_FS is not set546648CONFIG_FS_MBCACHE=y547649# CONFIG_REISERFS_FS is not set548650# CONFIG_JFS_FS is not set549651CONFIG_FS_POSIX_ACL=y550652CONFIG_XFS_FS=m551551-CONFIG_XFS_RT=y552653CONFIG_XFS_QUOTA=y553654CONFIG_XFS_SECURITY=y554655CONFIG_XFS_POSIX_ACL=y656656+CONFIG_XFS_RT=y657657+# CONFIG_GFS2_FS is not set658658+# CONFIG_OCFS2_FS is not set555659# CONFIG_MINIX_FS is not set556660CONFIG_ROMFS_FS=m661661+CONFIG_INOTIFY=y662662+CONFIG_INOTIFY_USER=y557663# CONFIG_QUOTA is not set558664CONFIG_QUOTACTL=y665665+CONFIG_DNOTIFY=y559666CONFIG_AUTOFS_FS=m560667CONFIG_AUTOFS4_FS=m668668+# CONFIG_FUSE_FS is not set561669562670#563671# CD-ROM/DVD Filesystems···780468#781469# DOS/FAT/NT Filesystems782470#783783-# CONFIG_FAT_FS is not set471471+# CONFIG_MSDOS_FS is not set472472+# CONFIG_VFAT_FS is not set784473# CONFIG_NTFS_FS is not set785474786475#···789476#790477CONFIG_PROC_FS=y791478CONFIG_PROC_KCORE=y479479+CONFIG_PROC_SYSCTL=y792480CONFIG_SYSFS=y793793-# CONFIG_DEVFS_FS is not set794794-CONFIG_DEVPTS_FS_XATTR=y795795-# CONFIG_DEVPTS_FS_SECURITY is not set796481# CONFIG_TMPFS is not set797482# CONFIG_HUGETLB_PAGE is not set798483CONFIG_RAMFS=y484484+# CONFIG_CONFIGFS_FS is not set799485800486#801487# Miscellaneous filesystems···824512# CONFIG_NFSD is not set825513CONFIG_ROOT_NFS=y826514CONFIG_LOCKD=y827827-# CONFIG_EXPORTFS is not set515515+CONFIG_NFS_COMMON=y828516CONFIG_SUNRPC=y829517CONFIG_SUNRPC_GSS=m830518CONFIG_RPCSEC_GSS_KRB5=m519519+# CONFIG_RPCSEC_GSS_SPKM3 is not set831520# CONFIG_SMB_FS is not set832521CONFIG_CIFS=m833522# CONFIG_CIFS_STATS is not set523523+# CONFIG_CIFS_WEAK_PW_HASH is not set524524+# CONFIG_CIFS_XATTR is not set525525+# CONFIG_CIFS_DEBUG2 is not set526526+# CONFIG_CIFS_EXPERIMENTAL is not set834527# CONFIG_NCP_FS is not set835528# CONFIG_CODA_FS is not set836529CONFIG_AFS_FS=m837530CONFIG_RXRPC=m531531+# CONFIG_9P_FS is not set838532839533#840534# Partition Types···877559# CONFIG_NLS_ISO8859_8 is not set878560# CONFIG_NLS_CODEPAGE_1250 is not set879561# CONFIG_NLS_CODEPAGE_1251 is not set562562+# CONFIG_NLS_ASCII is not set880563# CONFIG_NLS_ISO8859_1 is not set881564# CONFIG_NLS_ISO8859_2 is not set882565# CONFIG_NLS_ISO8859_3 is not set···894575# CONFIG_NLS_UTF8 is not set895576896577#897897-# Sound578578+# Distributed Lock Manager898579#899899-# CONFIG_SOUND is not set580580+# CONFIG_DLM is not set900581901582#902902-# USB support583583+# Instrumentation Support903584#904904-# CONFIG_USB is not set905905-906906-#907907-# USB Gadget Support908908-#909909-# CONFIG_USB_GADGET is not set910910-911911-#912912-# Watchdog Cards913913-#914914-# CONFIG_WATCHDOG is not set585585+# CONFIG_PROFILING is not set915586916587#917588# Kernel hacking918589#919919-CONFIG_DEBUG_KERNEL=y920920-# CONFIG_DEBUG_STACK_USAGE is not set921921-# CONFIG_DEBUG_SLAB is not set590590+# CONFIG_PRINTK_TIME is not set591591+CONFIG_ENABLE_MUST_CHECK=y922592CONFIG_MAGIC_SYSRQ=y593593+# CONFIG_UNUSED_SYMBOLS is not set594594+# CONFIG_DEBUG_FS is not set595595+# CONFIG_HEADERS_CHECK is not set596596+CONFIG_DEBUG_KERNEL=y597597+CONFIG_LOG_BUF_SHIFT=14598598+CONFIG_DETECT_SOFTLOCKUP=y599599+# CONFIG_SCHEDSTATS is not set600600+# CONFIG_DEBUG_SLAB is not set601601+# CONFIG_DEBUG_RT_MUTEXES is not set602602+# CONFIG_RT_MUTEX_TESTER is not set923603# CONFIG_DEBUG_SPINLOCK is not set924924-# CONFIG_DEBUG_HIGHMEM is not set604604+# CONFIG_DEBUG_MUTEXES is not set605605+# CONFIG_DEBUG_RWSEMS is not set925606# CONFIG_DEBUG_SPINLOCK_SLEEP is not set926926-# CONFIG_DEBUG_BUGVERBOSE is not set607607+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set608608+# CONFIG_DEBUG_KOBJECT is not set609609+# CONFIG_DEBUG_HIGHMEM is not set610610+CONFIG_DEBUG_BUGVERBOSE=y611611+# CONFIG_DEBUG_INFO is not set612612+# CONFIG_DEBUG_VM is not set613613+# CONFIG_DEBUG_LIST is not set614614+CONFIG_FORCED_INLINING=y615615+# CONFIG_RCU_TORTURE_TEST is not set616616+# CONFIG_DEBUG_STACK_USAGE is not set927617928618#929619# Security options930620#621621+# CONFIG_KEYS is not set931622# CONFIG_SECURITY is not set932623933624#934625# Cryptographic options935626#936627CONFIG_CRYPTO=y628628+CONFIG_CRYPTO_ALGAPI=y629629+CONFIG_CRYPTO_BLKCIPHER=y630630+CONFIG_CRYPTO_HASH=y631631+CONFIG_CRYPTO_MANAGER=y937632CONFIG_CRYPTO_HMAC=y633633+# CONFIG_CRYPTO_XCBC is not set938634CONFIG_CRYPTO_NULL=m939635CONFIG_CRYPTO_MD4=y940636CONFIG_CRYPTO_MD5=y941637CONFIG_CRYPTO_SHA1=y942638CONFIG_CRYPTO_SHA256=m943639CONFIG_CRYPTO_SHA512=m640640+# CONFIG_CRYPTO_WP512 is not set641641+# CONFIG_CRYPTO_TGR192 is not set642642+# CONFIG_CRYPTO_GF128MUL is not set643643+CONFIG_CRYPTO_ECB=m644644+CONFIG_CRYPTO_CBC=y645645+# CONFIG_CRYPTO_LRW is not set944646CONFIG_CRYPTO_DES=y945647CONFIG_CRYPTO_BLOWFISH=m946648CONFIG_CRYPTO_TWOFISH=m649649+CONFIG_CRYPTO_TWOFISH_COMMON=m947650CONFIG_CRYPTO_SERPENT=m948651CONFIG_CRYPTO_AES=m949652CONFIG_CRYPTO_CAST5=m950653CONFIG_CRYPTO_CAST6=m654654+# CONFIG_CRYPTO_TEA is not set951655CONFIG_CRYPTO_ARC4=m656656+# CONFIG_CRYPTO_KHAZAD is not set657657+# CONFIG_CRYPTO_ANUBIS is not set952658CONFIG_CRYPTO_DEFLATE=y953659CONFIG_CRYPTO_MICHAEL_MIC=m954660CONFIG_CRYPTO_CRC32C=m955661# CONFIG_CRYPTO_TEST is not set956662957663#664664+# Hardware crypto devices665665+#666666+667667+#958668# Library routines959669#670670+CONFIG_BITREVERSE=y671671+# CONFIG_CRC_CCITT is not set672672+# CONFIG_CRC16 is not set960673CONFIG_CRC32=y961674CONFIG_LIBCRC32C=m962675CONFIG_ZLIB_INFLATE=y963676CONFIG_ZLIB_DEFLATE=y677677+CONFIG_PLIST=y678678+CONFIG_IOMAP_COPY=y
···7676 spin_unlock_irqrestore(ATOMIC_HASH(v), flags);7777}7878EXPORT_SYMBOL(atomic_set);7979+8080+unsigned long ___set_bit(unsigned long *addr, unsigned long mask)8181+{8282+ unsigned long old, flags;8383+8484+ spin_lock_irqsave(ATOMIC_HASH(addr), flags);8585+ old = *addr;8686+ *addr = old | mask;8787+ spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);8888+8989+ return old & mask;9090+}9191+EXPORT_SYMBOL(___set_bit);9292+9393+unsigned long ___clear_bit(unsigned long *addr, unsigned long mask)9494+{9595+ unsigned long old, flags;9696+9797+ spin_lock_irqsave(ATOMIC_HASH(addr), flags);9898+ old = *addr;9999+ *addr = old & ~mask;100100+ spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);101101+102102+ return old & mask;103103+}104104+EXPORT_SYMBOL(___clear_bit);105105+106106+unsigned long ___change_bit(unsigned long *addr, unsigned long mask)107107+{108108+ unsigned long old, flags;109109+110110+ spin_lock_irqsave(ATOMIC_HASH(addr), flags);111111+ old = *addr;112112+ *addr = old ^ mask;113113+ spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);114114+115115+ return old & mask;116116+}117117+EXPORT_SYMBOL(___change_bit);
-109
arch/sparc/lib/bitops.S
···11-/* bitops.S: Low level assembler bit operations.22- *33- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)44- */55-66-#include <asm/ptrace.h>77-#include <asm/psr.h>88-99- .text1010- .align 41111-1212- .globl __bitops_begin1313-__bitops_begin:1414-1515- /* Take bits in %g2 and set them in word at %g1,1616- * return whether bits were set in original value1717- * in %g2. %g4 holds value to restore into %o71818- * in delay slot of jmpl return, %g3 + %g5 + %g7 can be1919- * used as temporaries and thus is considered clobbered2020- * by all callers.2121- */2222- .globl ___set_bit2323-___set_bit:2424- rd %psr, %g32525- nop; nop; nop;2626- or %g3, PSR_PIL, %g52727- wr %g5, 0x0, %psr2828- nop; nop; nop2929-#ifdef CONFIG_SMP3030- set bitops_spinlock, %g53131-2: ldstub [%g5], %g7 ! Spin on the byte lock for SMP.3232- orcc %g7, 0x0, %g0 ! Did we get it?3333- bne 2b ! Nope...3434-#endif3535- ld [%g1], %g73636- or %g7, %g2, %g53737- and %g7, %g2, %g23838-#ifdef CONFIG_SMP3939- st %g5, [%g1]4040- set bitops_spinlock, %g54141- stb %g0, [%g5]4242-#else4343- st %g5, [%g1]4444-#endif4545- wr %g3, 0x0, %psr4646- nop; nop; nop4747- jmpl %o7, %g04848- mov %g4, %o74949-5050- /* Same as above, but clears the bits from %g2 instead. */5151- .globl ___clear_bit5252-___clear_bit:5353- rd %psr, %g35454- nop; nop; nop5555- or %g3, PSR_PIL, %g55656- wr %g5, 0x0, %psr5757- nop; nop; nop5858-#ifdef CONFIG_SMP5959- set bitops_spinlock, %g56060-2: ldstub [%g5], %g7 ! Spin on the byte lock for SMP.6161- orcc %g7, 0x0, %g0 ! Did we get it?6262- bne 2b ! Nope...6363-#endif6464- ld [%g1], %g76565- andn %g7, %g2, %g56666- and %g7, %g2, %g26767-#ifdef CONFIG_SMP6868- st %g5, [%g1]6969- set bitops_spinlock, %g57070- stb %g0, [%g5]7171-#else7272- st %g5, [%g1]7373-#endif7474- wr %g3, 0x0, %psr7575- nop; nop; nop7676- jmpl %o7, %g07777- mov %g4, %o77878-7979- /* Same thing again, but this time toggles the bits from %g2. */8080- .globl ___change_bit8181-___change_bit:8282- rd %psr, %g38383- nop; nop; nop8484- or %g3, PSR_PIL, %g58585- wr %g5, 0x0, %psr8686- nop; nop; nop8787-#ifdef CONFIG_SMP8888- set bitops_spinlock, %g58989-2: ldstub [%g5], %g7 ! Spin on the byte lock for SMP.9090- orcc %g7, 0x0, %g0 ! Did we get it?9191- bne 2b ! Nope...9292-#endif9393- ld [%g1], %g79494- xor %g7, %g2, %g59595- and %g7, %g2, %g29696-#ifdef CONFIG_SMP9797- st %g5, [%g1]9898- set bitops_spinlock, %g59999- stb %g0, [%g5]100100-#else101101- st %g5, [%g1]102102-#endif103103- wr %g3, 0x0, %psr104104- nop; nop; nop105105- jmpl %o7, %g0106106- mov %g4, %o7107107-108108- .globl __bitops_end109109-__bitops_end:
+1-6
arch/sparc64/kernel/head.S
···78787979 /* PROM cif handler code address is in %o4. */8080sparc64_boot:8181-1: rd %pc, %g78282- set 1b, %g18383- cmp %g1, %g78484- be,pn %xcc, sparc64_boot_after_remap8585- mov %o4, %l78181+ mov %o4, %l786828783 /* We need to remap the kernel. Use position independant8884 * code to remap us to KERNBASE.···291295292296 add %sp, (192 + 128), %sp293297294294-sparc64_boot_after_remap:295298 sethi %hi(prom_root_compatible), %g1296299 or %g1, %lo(prom_root_compatible), %g1297300 sethi %hi(prom_sun4v_name), %g7
···14471447 char *ptr;1448144814491449 /* Copy section for each CPU (we discard the original) */14501450- goal = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);14511451-#ifdef CONFIG_MODULES14521452- if (goal < PERCPU_ENOUGH_ROOM)14531453- goal = PERCPU_ENOUGH_ROOM;14541454-#endif14501450+ goal = PERCPU_ENOUGH_ROOM;14511451+14551452 __per_cpu_shift = 0;14561453 for (size = 1UL; size < goal; size <<= 1UL)14571454 __per_cpu_shift++;
-2
arch/x86_64/Makefile
···4545# actually it makes the kernel smaller too.4646cflags-y += -fno-reorder-blocks4747cflags-y += -Wno-sign-compare4848-ifneq ($(CONFIG_UNWIND_INFO),y)4948cflags-y += -fno-asynchronous-unwind-tables5050-endif5149ifneq ($(CONFIG_DEBUG_INFO),y)5250# -fweb shrinks the kernel a bit, but the difference is very small5351# it also messes up debugging, so don't use it for now.
-2
arch/x86_64/defconfig
···15231523# CONFIG_DEBUG_VM is not set15241524# CONFIG_DEBUG_LIST is not set15251525# CONFIG_FRAME_POINTER is not set15261526-CONFIG_UNWIND_INFO=y15271527-CONFIG_STACK_UNWIND=y15281526# CONFIG_FORCED_INLINING is not set15291527# CONFIG_HEADERS_CHECK is not set15301528# CONFIG_RCU_TORTURE_TEST is not set
···4040 tristate "Intel PIIX/ICH SATA support"4141 depends on PCI4242 help4343- This option enables support for ICH5/6/7/8 Serial ATA.4444- If PATA support was enabled previously, this enables4545- support for select Intel PIIX/ICH PATA host controllers.4343+ This option enables support for ICH5/6/7/8 Serial ATA4444+ and support for PATA on the Intel PIIX3/PIIX4/ICH series4545+ PATA host controllers.46464747 If unsure, say N.4848
···161161 return -ENOENT;162162 }163163164164- if ((config->flags & VIA_UDMA) >= VIA_UDMA_66)164164+ if ((config->flags & VIA_UDMA) >= VIA_UDMA_100)165165 ap->cbl = via_cable_detect(ap);166166- else166166+ /* The UDMA66 series has no cable detect so do drive side detect */167167+ else if ((config->flags & VIA_UDMA) < VIA_UDMA_66)167168 ap->cbl = ATA_CBL_PATA40;169169+ else170170+ ap->cbl = ATA_CBL_PATA_UNK;171171+172172+168173 return ata_std_prereset(ap);169174}170175
···959959960960961961/**962962- * cpufreq_quick_get - get the CPU frequency (in kHz) frpm policy->cur962962+ * cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur963963 * @cpu: CPU number964964 *965965 * This is the last known freq, without actually getting it from the driver.
+44
drivers/hid/hid-input.c
···415415 case 0x000: goto ignore;416416 case 0x034: map_key_clear(KEY_SLEEP); break;417417 case 0x036: map_key_clear(BTN_MISC); break;418418+ case 0x040: map_key_clear(KEY_MENU); break;418419 case 0x045: map_key_clear(KEY_RADIO); break;420420+421421+ case 0x088: map_key_clear(KEY_PC); break;422422+ case 0x089: map_key_clear(KEY_TV); break;419423 case 0x08a: map_key_clear(KEY_WWW); break;424424+ case 0x08b: map_key_clear(KEY_DVD); break;425425+ case 0x08c: map_key_clear(KEY_PHONE); break;420426 case 0x08d: map_key_clear(KEY_PROGRAM); break;427427+ case 0x08e: map_key_clear(KEY_VIDEOPHONE); break;428428+ case 0x08f: map_key_clear(KEY_GAMES); break;429429+ case 0x090: map_key_clear(KEY_MEMO); break;430430+ case 0x091: map_key_clear(KEY_CD); break;431431+ case 0x092: map_key_clear(KEY_VCR); break;432432+ case 0x093: map_key_clear(KEY_TUNER); break;433433+ case 0x094: map_key_clear(KEY_EXIT); break;421434 case 0x095: map_key_clear(KEY_HELP); break;435435+ case 0x096: map_key_clear(KEY_TAPE); break;436436+ case 0x097: map_key_clear(KEY_TV2); break;437437+ case 0x098: map_key_clear(KEY_SAT); break;438438+422439 case 0x09c: map_key_clear(KEY_CHANNELUP); break;423440 case 0x09d: map_key_clear(KEY_CHANNELDOWN); break;441441+ case 0x0a0: map_key_clear(KEY_VCR2); break;442442+424443 case 0x0b0: map_key_clear(KEY_PLAY); break;425444 case 0x0b1: map_key_clear(KEY_PAUSE); break;426445 case 0x0b2: map_key_clear(KEY_RECORD); break;···449430 case 0x0b6: map_key_clear(KEY_PREVIOUSSONG); break;450431 case 0x0b7: map_key_clear(KEY_STOPCD); break;451432 case 0x0b8: map_key_clear(KEY_EJECTCD); break;433433+452434 case 0x0cd: map_key_clear(KEY_PLAYPAUSE); break;453435 case 0x0e0: map_abs_clear(ABS_VOLUME); break;454436 case 0x0e2: map_key_clear(KEY_MUTE); break;···457437 case 0x0e9: map_key_clear(KEY_VOLUMEUP); break;458438 case 0x0ea: map_key_clear(KEY_VOLUMEDOWN); break;459439 case 0x183: map_key_clear(KEY_CONFIG); break;440440+ case 0x184: map_key_clear(KEY_WORDPROCESSOR); break;441441+ case 0x185: map_key_clear(KEY_EDITOR); break;442442+ case 0x186: map_key_clear(KEY_SPREADSHEET); break;443443+ case 0x187: map_key_clear(KEY_GRAPHICSEDITOR); break;444444+ case 0x188: map_key_clear(KEY_PRESENTATION); break;445445+ case 0x189: map_key_clear(KEY_DATABASE); break;460446 case 0x18a: map_key_clear(KEY_MAIL); break;447447+ case 0x18b: map_key_clear(KEY_NEWS); break;448448+ case 0x18c: map_key_clear(KEY_VOICEMAIL); break;449449+ case 0x18d: map_key_clear(KEY_ADDRESSBOOK); break;450450+ case 0x18e: map_key_clear(KEY_CALENDAR); break;451451+ case 0x191: map_key_clear(KEY_FINANCE); break;461452 case 0x192: map_key_clear(KEY_CALC); break;462453 case 0x194: map_key_clear(KEY_FILE); break;454454+ case 0x196: map_key_clear(KEY_WWW); break;455455+ case 0x19e: map_key_clear(KEY_COFFEE); break;456456+ case 0x1a6: map_key_clear(KEY_HELP); break;463457 case 0x1a7: map_key_clear(KEY_DOCUMENTS); break;458458+ case 0x1bc: map_key_clear(KEY_MESSENGER); break;459459+ case 0x1bd: map_key_clear(KEY_INFO); break;464460 case 0x201: map_key_clear(KEY_NEW); break;461461+ case 0x202: map_key_clear(KEY_OPEN); break;462462+ case 0x203: map_key_clear(KEY_CLOSE); break;463463+ case 0x204: map_key_clear(KEY_EXIT); break;465464 case 0x207: map_key_clear(KEY_SAVE); break;466465 case 0x208: map_key_clear(KEY_PRINT); break;467466 case 0x209: map_key_clear(KEY_PROPS); break;···495456 case 0x226: map_key_clear(KEY_STOP); break;496457 case 0x227: map_key_clear(KEY_REFRESH); break;497458 case 0x22a: map_key_clear(KEY_BOOKMARKS); break;459459+ case 0x22d: map_key_clear(KEY_ZOOMIN); break;460460+ case 0x22e: map_key_clear(KEY_ZOOMOUT); break;461461+ case 0x22f: map_key_clear(KEY_ZOOMRESET); break;498462 case 0x233: map_key_clear(KEY_SCROLLUP); break;499463 case 0x234: map_key_clear(KEY_SCROLLDOWN); break;500464 case 0x238: map_rel(REL_HWHEEL); break;465465+ case 0x25f: map_key_clear(KEY_CANCEL); break;501466 case 0x279: map_key_clear(KEY_REDO); break;467467+502468 case 0x289: map_key_clear(KEY_REPLY); break;503469 case 0x28b: map_key_clear(KEY_FORWARDMAIL); break;504470 case 0x28c: map_key_clear(KEY_SEND); break;
+97-16
drivers/infiniband/hw/mthca/mthca_main.c
···8080module_param(tune_pci, int, 0444);8181MODULE_PARM_DESC(tune_pci, "increase PCI burst from the default set by BIOS if nonzero");82828383-struct mutex mthca_device_mutex;8383+DEFINE_MUTEX(mthca_device_mutex);8484+8585+#define MTHCA_DEFAULT_NUM_QP (1 << 16)8686+#define MTHCA_DEFAULT_RDB_PER_QP (1 << 2)8787+#define MTHCA_DEFAULT_NUM_CQ (1 << 16)8888+#define MTHCA_DEFAULT_NUM_MCG (1 << 13)8989+#define MTHCA_DEFAULT_NUM_MPT (1 << 17)9090+#define MTHCA_DEFAULT_NUM_MTT (1 << 20)9191+#define MTHCA_DEFAULT_NUM_UDAV (1 << 15)9292+#define MTHCA_DEFAULT_NUM_RESERVED_MTTS (1 << 18)9393+#define MTHCA_DEFAULT_NUM_UARC_SIZE (1 << 18)9494+9595+static struct mthca_profile hca_profile = {9696+ .num_qp = MTHCA_DEFAULT_NUM_QP,9797+ .rdb_per_qp = MTHCA_DEFAULT_RDB_PER_QP,9898+ .num_cq = MTHCA_DEFAULT_NUM_CQ,9999+ .num_mcg = MTHCA_DEFAULT_NUM_MCG,100100+ .num_mpt = MTHCA_DEFAULT_NUM_MPT,101101+ .num_mtt = MTHCA_DEFAULT_NUM_MTT,102102+ .num_udav = MTHCA_DEFAULT_NUM_UDAV, /* Tavor only */103103+ .fmr_reserved_mtts = MTHCA_DEFAULT_NUM_RESERVED_MTTS, /* Tavor only */104104+ .uarc_size = MTHCA_DEFAULT_NUM_UARC_SIZE, /* Arbel only */105105+};106106+107107+module_param_named(num_qp, hca_profile.num_qp, int, 0444);108108+MODULE_PARM_DESC(num_qp, "maximum number of QPs per HCA");109109+110110+module_param_named(rdb_per_qp, hca_profile.rdb_per_qp, int, 0444);111111+MODULE_PARM_DESC(rdb_per_qp, "number of RDB buffers per QP");112112+113113+module_param_named(num_cq, hca_profile.num_cq, int, 0444);114114+MODULE_PARM_DESC(num_cq, "maximum number of CQs per HCA");115115+116116+module_param_named(num_mcg, hca_profile.num_mcg, int, 0444);117117+MODULE_PARM_DESC(num_mcg, "maximum number of multicast groups per HCA");118118+119119+module_param_named(num_mpt, hca_profile.num_mpt, int, 0444);120120+MODULE_PARM_DESC(num_mpt,121121+ "maximum number of memory protection table entries per HCA");122122+123123+module_param_named(num_mtt, hca_profile.num_mtt, int, 0444);124124+MODULE_PARM_DESC(num_mtt,125125+ "maximum number of memory translation table segments per HCA");126126+127127+module_param_named(num_udav, hca_profile.num_udav, int, 0444);128128+MODULE_PARM_DESC(num_udav, "maximum number of UD address vectors per HCA");129129+130130+module_param_named(fmr_reserved_mtts, hca_profile.fmr_reserved_mtts, int, 0444);131131+MODULE_PARM_DESC(fmr_reserved_mtts,132132+ "number of memory translation table segments reserved for FMR");8413385134static const char mthca_version[] __devinitdata =86135 DRV_NAME ": Mellanox InfiniBand HCA driver v"87136 DRV_VERSION " (" DRV_RELDATE ")\n";8888-8989-static struct mthca_profile default_profile = {9090- .num_qp = 1 << 16,9191- .rdb_per_qp = 4,9292- .num_cq = 1 << 16,9393- .num_mcg = 1 << 13,9494- .num_mpt = 1 << 17,9595- .num_mtt = 1 << 20,9696- .num_udav = 1 << 15, /* Tavor only */9797- .fmr_reserved_mtts = 1 << 18, /* Tavor only */9898- .uarc_size = 1 << 18, /* Arbel only */9999-};100137101138static int mthca_tune_pci(struct mthca_dev *mdev)102139{···340303 goto err_disable;341304 }342305343343- profile = default_profile;306306+ profile = hca_profile;344307 profile.num_uar = dev_lim.uar_size / PAGE_SIZE;345308 profile.uarc_size = 0;346309 if (mdev->mthca_flags & MTHCA_FLAG_SRQ)···658621 goto err_stop_fw;659622 }660623661661- profile = default_profile;624624+ profile = hca_profile;662625 profile.num_uar = dev_lim.uar_size / PAGE_SIZE;663626 profile.num_udav = 0;664627 if (mdev->mthca_flags & MTHCA_FLAG_SRQ)···13151278 .remove = __devexit_p(mthca_remove_one)13161279};1317128012811281+static void __init __mthca_check_profile_val(const char *name, int *pval,12821282+ int pval_default)12831283+{12841284+ /* value must be positive and power of 2 */12851285+ int old_pval = *pval;12861286+12871287+ if (old_pval <= 0)12881288+ *pval = pval_default;12891289+ else12901290+ *pval = roundup_pow_of_two(old_pval);12911291+12921292+ if (old_pval != *pval) {12931293+ printk(KERN_WARNING PFX "Invalid value %d for %s in module parameter.\n",12941294+ old_pval, name);12951295+ printk(KERN_WARNING PFX "Corrected %s to %d.\n", name, *pval);12961296+ }12971297+}12981298+12991299+#define mthca_check_profile_val(name, default) \13001300+ __mthca_check_profile_val(#name, &hca_profile.name, default)13011301+13021302+static void __init mthca_validate_profile(void)13031303+{13041304+ mthca_check_profile_val(num_qp, MTHCA_DEFAULT_NUM_QP);13051305+ mthca_check_profile_val(rdb_per_qp, MTHCA_DEFAULT_RDB_PER_QP);13061306+ mthca_check_profile_val(num_cq, MTHCA_DEFAULT_NUM_CQ);13071307+ mthca_check_profile_val(num_mcg, MTHCA_DEFAULT_NUM_MCG);13081308+ mthca_check_profile_val(num_mpt, MTHCA_DEFAULT_NUM_MPT);13091309+ mthca_check_profile_val(num_mtt, MTHCA_DEFAULT_NUM_MTT);13101310+ mthca_check_profile_val(num_udav, MTHCA_DEFAULT_NUM_UDAV);13111311+ mthca_check_profile_val(fmr_reserved_mtts, MTHCA_DEFAULT_NUM_RESERVED_MTTS);13121312+13131313+ if (hca_profile.fmr_reserved_mtts >= hca_profile.num_mtt) {13141314+ printk(KERN_WARNING PFX "Invalid fmr_reserved_mtts module parameter %d.\n",13151315+ hca_profile.fmr_reserved_mtts);13161316+ printk(KERN_WARNING PFX "(Must be smaller than num_mtt %d)\n",13171317+ hca_profile.num_mtt);13181318+ hca_profile.fmr_reserved_mtts = hca_profile.num_mtt / 2;13191319+ printk(KERN_WARNING PFX "Corrected fmr_reserved_mtts to %d.\n",13201320+ hca_profile.fmr_reserved_mtts);13211321+ }13221322+}13231323+13181324static int __init mthca_init(void)13191325{13201326 int ret;1321132713221322- mutex_init(&mthca_device_mutex);13281328+ mthca_validate_profile();13291329+13231330 ret = mthca_catas_init();13241331 if (ret)13251332 return ret;
···8787 struct ib_fmr_pool *fmr_pool;8888 int fmr_page_shift;8989 int fmr_page_size;9090- unsigned long fmr_page_mask;9090+ u64 fmr_page_mask;9191};92929393struct srp_host {
···4949 .send_mask = EvTyp_CtlProgIdent_Mask5050};51515252+MODULE_LICENSE("GPL");5353+5254MODULE_AUTHOR(5355 "Martin Peschke, IBM Deutschland Entwicklung GmbH "5456 "<mpeschke@de.ibm.com>");
+23-2
drivers/s390/cio/cio.c
···871871 return -EBUSY;872872}873873874874+static int pgm_check_occured;875875+876876+static void cio_reset_pgm_check_handler(void)877877+{878878+ pgm_check_occured = 1;879879+}880880+881881+static int stsch_reset(struct subchannel_id schid, volatile struct schib *addr)882882+{883883+ int rc;884884+885885+ pgm_check_occured = 0;886886+ s390_reset_pgm_handler = cio_reset_pgm_check_handler;887887+ rc = stsch(schid, addr);888888+ s390_reset_pgm_handler = NULL;889889+ if (pgm_check_occured)890890+ return -EIO;891891+ else892892+ return rc;893893+}894894+874895static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data)875896{876897 struct schib schib;877898878878- if (stsch_err(schid, &schib))899899+ if (stsch_reset(schid, &schib))879900 return -ENXIO;880901 if (!schib.pmcw.ena)881902 return 0;···993972 struct schib schib;994973 struct sch_match_id *match_id = data;995974996996- if (stsch_err(schid, &schib))975975+ if (stsch_reset(schid, &schib))997976 return -ENXIO;998977 if (schib.pmcw.dnv &&999978 (schib.pmcw.dev == match_id->devid.devno) &&
+2-1
drivers/s390/cio/css.c
···139139 sch->dev.release = &css_subchannel_release;140140 sch->dev.groups = subch_attr_groups;141141142142+ css_get_ssd_info(sch);143143+142144 /* make it known to the system */143145 ret = css_sch_device_register(sch);144146 if (ret) {···148146 __func__, sch->dev.bus_id);149147 return ret;150148 }151151- css_get_ssd_info(sch);152149 return ret;153150}154151
+8-5
drivers/s390/cio/qdio.c
···979979980980 if (q->is_iqdio_q) {981981 /* 982982- * for asynchronous queues, we better check, if the fill983983- * level is too high. for synchronous queues, the fill984984- * level will never be that high. 982982+ * for asynchronous queues, we better check, if the sent983983+ * buffer is already switched from PRIMED to EMPTY.985984 */986986- if (atomic_read(&q->number_of_buffers_used)>987987- IQDIO_FILL_LEVEL_TO_POLL)985985+ if ((q->queue_type == QDIO_IQDIO_QFMT_ASYNCH) &&986986+ !qdio_is_outbound_q_done(q))988987 qdio_mark_q(q);989988990989 } else if (!q->hydra_gives_outbound_pcis)···18241825 q->sbal[j]=*(outbound_sbals_array++);1825182618261827 q->queue_type=q_format;18281828+ if ((q->queue_type == QDIO_IQDIO_QFMT) &&18291829+ (no_output_qs > 1) &&18301830+ (i == no_output_qs-1))18311831+ q->queue_type = QDIO_IQDIO_QFMT_ASYNCH;18271832 q->int_parm=int_parm;18281833 q->is_input_q=0;18291834 q->schid = irq_ptr->schid;
+12-2
drivers/s390/crypto/ap_bus.c
···11291129 mutex_unlock(&ap_poll_thread_mutex);11301130}1131113111321132-static void ap_reset(void)11321132+static void ap_reset_domain(void)11331133+{11341134+ int i;11351135+11361136+ for (i = 0; i < AP_DEVICES; i++)11371137+ ap_reset_queue(AP_MKQID(i, ap_domain_index));11381138+}11391139+11401140+static void ap_reset_all(void)11331141{11341142 int i, j;11351143···11471139}1148114011491141static struct reset_call ap_reset_call = {11501150- .fn = ap_reset,11421142+ .fn = ap_reset_all,11511143};1152114411531145/**···12371229 int i;12381230 struct device *dev;1239123112321232+ ap_reset_domain();12401233 ap_poll_thread_stop();12411234 del_timer_sync(&ap_config_timer);12421235 del_timer_sync(&ap_poll_timer);12431236 destroy_workqueue(ap_work_queue);12371237+ tasklet_kill(&ap_tasklet);12441238 s390_root_dev_unregister(ap_root_device);12451239 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,12461240 __ap_match_all)))
···77config USB_HID88 tristate "USB Human Interface Device (full HID) support"99 default y1010- depends on USB && HID1010+ depends on USB1111+ select HID1112 ---help---1213 Say Y here if you want full HID support to connect USB keyboards,1314 mice, joysticks, graphic tablets, or any other HID based devices
···14141515struct module;16161717-#ifdef CONFIG_STACK_UNWIND1818-1919-#include <asm/unwind.h>2020-2121-#ifndef ARCH_UNWIND_SECTION_NAME2222-#define ARCH_UNWIND_SECTION_NAME ".eh_frame"2323-#endif2424-2525-/*2626- * Initialize unwind support.2727- */2828-extern void unwind_init(void);2929-extern void unwind_setup(void);3030-3131-#ifdef CONFIG_MODULES3232-3333-extern void *unwind_add_table(struct module *,3434- const void *table_start,3535- unsigned long table_size);3636-3737-extern void unwind_remove_table(void *handle, int init_only);3838-3939-#endif4040-4141-extern int unwind_init_frame_info(struct unwind_frame_info *,4242- struct task_struct *,4343- /*const*/ struct pt_regs *);4444-4545-/*4646- * Prepare to unwind a blocked task.4747- */4848-extern int unwind_init_blocked(struct unwind_frame_info *,4949- struct task_struct *);5050-5151-/*5252- * Prepare to unwind the currently running thread.5353- */5454-extern int unwind_init_running(struct unwind_frame_info *,5555- asmlinkage int (*callback)(struct unwind_frame_info *,5656- void *arg),5757- void *arg);5858-5959-/*6060- * Unwind to previous to frame. Returns 0 if successful, negative6161- * number in case of an error.6262- */6363-extern int unwind(struct unwind_frame_info *);6464-6565-/*6666- * Unwind until the return pointer is in user-land (or until an error6767- * occurs). Returns 0 if successful, negative number in case of6868- * error.6969- */7070-extern int unwind_to_user(struct unwind_frame_info *);7171-7272-#else7373-7417struct unwind_frame_info {};75187619static inline void unwind_init(void) {}···2885 return NULL;2986}30873131-#endif3232-3388static inline void unwind_remove_table(void *handle, int init_only)3489{3590}9191+9292+#endif36933794static inline int unwind_init_frame_info(struct unwind_frame_info *info,3895 struct task_struct *tsk,···64121{65122 return -ENOSYS;66123}6767-6868-#endif6912470125#endif /* _LINUX_UNWIND_H */
+24-12
include/linux/workqueue.h
···88#include <linux/timer.h>99#include <linux/linkage.h>1010#include <linux/bitops.h>1111+#include <asm/atomic.h>11121213struct workqueue_struct;13141415struct work_struct;1516typedef void (*work_func_t)(struct work_struct *work);16171818+/*1919+ * The first word is the work queue pointer and the flags rolled into2020+ * one2121+ */2222+#define work_data_bits(work) ((unsigned long *)(&(work)->data))2323+1724struct work_struct {1818- /* the first word is the work queue pointer and the flags rolled into1919- * one */2020- unsigned long management;2525+ atomic_long_t data;2126#define WORK_STRUCT_PENDING 0 /* T if work item pending execution */2227#define WORK_STRUCT_NOAUTOREL 1 /* F if work item automatically released on exec */2328#define WORK_STRUCT_FLAG_MASK (3UL)···3025 struct list_head entry;3126 work_func_t func;3227};2828+2929+#define WORK_DATA_INIT(autorelease) \3030+ ATOMIC_LONG_INIT((autorelease) << WORK_STRUCT_NOAUTOREL)33313432struct delayed_work {3533 struct work_struct work;···4436};45374638#define __WORK_INITIALIZER(n, f) { \4747- .management = 0, \3939+ .data = WORK_DATA_INIT(0), \4840 .entry = { &(n).entry, &(n).entry }, \4941 .func = (f), \5042 }51435244#define __WORK_INITIALIZER_NAR(n, f) { \5353- .management = (1 << WORK_STRUCT_NOAUTOREL), \4545+ .data = WORK_DATA_INIT(1), \5446 .entry = { &(n).entry, &(n).entry }, \5547 .func = (f), \5648 }···90829183/*9284 * initialize all of a work item in one go8585+ *8686+ * NOTE! No point in using "atomic_long_set()": useing a direct8787+ * assignment of the work data initializer allows the compiler8888+ * to generate better code.9389 */9490#define INIT_WORK(_work, _func) \9591 do { \9696- (_work)->management = 0; \9292+ (_work)->data = (atomic_long_t) WORK_DATA_INIT(0); \9793 INIT_LIST_HEAD(&(_work)->entry); \9894 PREPARE_WORK((_work), (_func)); \9995 } while (0)1009610197#define INIT_WORK_NAR(_work, _func) \10298 do { \103103- (_work)->management = (1 << WORK_STRUCT_NOAUTOREL); \9999+ (_work)->data = (atomic_long_t) WORK_DATA_INIT(1); \104100 INIT_LIST_HEAD(&(_work)->entry); \105101 PREPARE_WORK((_work), (_func)); \106102 } while (0)···126114 * @work: The work item in question127115 */128116#define work_pending(work) \129129- test_bit(WORK_STRUCT_PENDING, &(work)->management)117117+ test_bit(WORK_STRUCT_PENDING, work_data_bits(work))130118131119/**132120 * delayed_work_pending - Find out whether a delayable work item is currently133121 * pending134122 * @work: The work item in question135123 */136136-#define delayed_work_pending(work) \137137- test_bit(WORK_STRUCT_PENDING, &(work)->work.management)124124+#define delayed_work_pending(w) \125125+ work_pending(&(w)->work)138126139127/**140128 * work_release - Release a work item under execution···155143 * This should also be used to release a delayed work item.156144 */157145#define work_release(work) \158158- clear_bit(WORK_STRUCT_PENDING, &(work)->management)146146+ clear_bit(WORK_STRUCT_PENDING, work_data_bits(work))159147160148161149extern struct workqueue_struct *__create_workqueue(const char *name,···200188201189 ret = del_timer_sync(&work->timer);202190 if (ret)203203- clear_bit(WORK_STRUCT_PENDING, &work->work.management);191191+ work_release(&work->work);204192 return ret;205193}206194
···11-/*22- * Copyright (C) 2002-2006 Novell, Inc.33- * Jan Beulich <jbeulich@novell.com>44- * This code is released under version 2 of the GNU GPL.55- *66- * A simple API for unwinding kernel stacks. This is used for77- * debugging and error reporting purposes. The kernel doesn't need88- * full-blown stack unwinding with all the bells and whistles, so there99- * is not much point in implementing the full Dwarf2 unwind API.1010- */1111-1212-#include <linux/unwind.h>1313-#include <linux/module.h>1414-#include <linux/bootmem.h>1515-#include <linux/sort.h>1616-#include <linux/stop_machine.h>1717-#include <linux/uaccess.h>1818-#include <asm/sections.h>1919-#include <asm/uaccess.h>2020-#include <asm/unaligned.h>2121-2222-extern const char __start_unwind[], __end_unwind[];2323-extern const u8 __start_unwind_hdr[], __end_unwind_hdr[];2424-2525-#define MAX_STACK_DEPTH 82626-2727-#define EXTRA_INFO(f) { \2828- BUILD_BUG_ON_ZERO(offsetof(struct unwind_frame_info, f) \2929- % FIELD_SIZEOF(struct unwind_frame_info, f)) \3030- + offsetof(struct unwind_frame_info, f) \3131- / FIELD_SIZEOF(struct unwind_frame_info, f), \3232- FIELD_SIZEOF(struct unwind_frame_info, f) \3333- }3434-#define PTREGS_INFO(f) EXTRA_INFO(regs.f)3535-3636-static const struct {3737- unsigned offs:BITS_PER_LONG / 2;3838- unsigned width:BITS_PER_LONG / 2;3939-} reg_info[] = {4040- UNW_REGISTER_INFO4141-};4242-4343-#undef PTREGS_INFO4444-#undef EXTRA_INFO4545-4646-#ifndef REG_INVALID4747-#define REG_INVALID(r) (reg_info[r].width == 0)4848-#endif4949-5050-#define DW_CFA_nop 0x005151-#define DW_CFA_set_loc 0x015252-#define DW_CFA_advance_loc1 0x025353-#define DW_CFA_advance_loc2 0x035454-#define DW_CFA_advance_loc4 0x045555-#define DW_CFA_offset_extended 0x055656-#define DW_CFA_restore_extended 0x065757-#define DW_CFA_undefined 0x075858-#define DW_CFA_same_value 0x085959-#define DW_CFA_register 0x096060-#define DW_CFA_remember_state 0x0a6161-#define DW_CFA_restore_state 0x0b6262-#define DW_CFA_def_cfa 0x0c6363-#define DW_CFA_def_cfa_register 0x0d6464-#define DW_CFA_def_cfa_offset 0x0e6565-#define DW_CFA_def_cfa_expression 0x0f6666-#define DW_CFA_expression 0x106767-#define DW_CFA_offset_extended_sf 0x116868-#define DW_CFA_def_cfa_sf 0x126969-#define DW_CFA_def_cfa_offset_sf 0x137070-#define DW_CFA_val_offset 0x147171-#define DW_CFA_val_offset_sf 0x157272-#define DW_CFA_val_expression 0x167373-#define DW_CFA_lo_user 0x1c7474-#define DW_CFA_GNU_window_save 0x2d7575-#define DW_CFA_GNU_args_size 0x2e7676-#define DW_CFA_GNU_negative_offset_extended 0x2f7777-#define DW_CFA_hi_user 0x3f7878-7979-#define DW_EH_PE_FORM 0x078080-#define DW_EH_PE_native 0x008181-#define DW_EH_PE_leb128 0x018282-#define DW_EH_PE_data2 0x028383-#define DW_EH_PE_data4 0x038484-#define DW_EH_PE_data8 0x048585-#define DW_EH_PE_signed 0x088686-#define DW_EH_PE_ADJUST 0x708787-#define DW_EH_PE_abs 0x008888-#define DW_EH_PE_pcrel 0x108989-#define DW_EH_PE_textrel 0x209090-#define DW_EH_PE_datarel 0x309191-#define DW_EH_PE_funcrel 0x409292-#define DW_EH_PE_aligned 0x509393-#define DW_EH_PE_indirect 0x809494-#define DW_EH_PE_omit 0xff9595-9696-typedef unsigned long uleb128_t;9797-typedef signed long sleb128_t;9898-#define sleb128abs __builtin_labs9999-100100-static struct unwind_table {101101- struct {102102- unsigned long pc;103103- unsigned long range;104104- } core, init;105105- const void *address;106106- unsigned long size;107107- const unsigned char *header;108108- unsigned long hdrsz;109109- struct unwind_table *link;110110- const char *name;111111-} root_table;112112-113113-struct unwind_item {114114- enum item_location {115115- Nowhere,116116- Memory,117117- Register,118118- Value119119- } where;120120- uleb128_t value;121121-};122122-123123-struct unwind_state {124124- uleb128_t loc, org;125125- const u8 *cieStart, *cieEnd;126126- uleb128_t codeAlign;127127- sleb128_t dataAlign;128128- struct cfa {129129- uleb128_t reg, offs;130130- } cfa;131131- struct unwind_item regs[ARRAY_SIZE(reg_info)];132132- unsigned stackDepth:8;133133- unsigned version:8;134134- const u8 *label;135135- const u8 *stack[MAX_STACK_DEPTH];136136-};137137-138138-static const struct cfa badCFA = { ARRAY_SIZE(reg_info), 1 };139139-140140-static unsigned unwind_debug;141141-static int __init unwind_debug_setup(char *s)142142-{143143- unwind_debug = simple_strtoul(s, NULL, 0);144144- return 1;145145-}146146-__setup("unwind_debug=", unwind_debug_setup);147147-#define dprintk(lvl, fmt, args...) \148148- ((void)(lvl > unwind_debug \149149- || printk(KERN_DEBUG "unwind: " fmt "\n", ##args)))150150-151151-static struct unwind_table *find_table(unsigned long pc)152152-{153153- struct unwind_table *table;154154-155155- for (table = &root_table; table; table = table->link)156156- if ((pc >= table->core.pc157157- && pc < table->core.pc + table->core.range)158158- || (pc >= table->init.pc159159- && pc < table->init.pc + table->init.range))160160- break;161161-162162- return table;163163-}164164-165165-static unsigned long read_pointer(const u8 **pLoc,166166- const void *end,167167- signed ptrType,168168- unsigned long text_base,169169- unsigned long data_base);170170-171171-static void init_unwind_table(struct unwind_table *table,172172- const char *name,173173- const void *core_start,174174- unsigned long core_size,175175- const void *init_start,176176- unsigned long init_size,177177- const void *table_start,178178- unsigned long table_size,179179- const u8 *header_start,180180- unsigned long header_size)181181-{182182- const u8 *ptr = header_start + 4;183183- const u8 *end = header_start + header_size;184184-185185- table->core.pc = (unsigned long)core_start;186186- table->core.range = core_size;187187- table->init.pc = (unsigned long)init_start;188188- table->init.range = init_size;189189- table->address = table_start;190190- table->size = table_size;191191- /* See if the linker provided table looks valid. */192192- if (header_size <= 4193193- || header_start[0] != 1194194- || (void *)read_pointer(&ptr, end, header_start[1], 0, 0)195195- != table_start196196- || !read_pointer(&ptr, end, header_start[2], 0, 0)197197- || !read_pointer(&ptr, end, header_start[3], 0,198198- (unsigned long)header_start)199199- || !read_pointer(&ptr, end, header_start[3], 0,200200- (unsigned long)header_start))201201- header_start = NULL;202202- table->hdrsz = header_size;203203- smp_wmb();204204- table->header = header_start;205205- table->link = NULL;206206- table->name = name;207207-}208208-209209-void __init unwind_init(void)210210-{211211- init_unwind_table(&root_table, "kernel",212212- _text, _end - _text,213213- NULL, 0,214214- __start_unwind, __end_unwind - __start_unwind,215215- __start_unwind_hdr, __end_unwind_hdr - __start_unwind_hdr);216216-}217217-218218-static const u32 bad_cie, not_fde;219219-static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *);220220-static signed fde_pointer_type(const u32 *cie);221221-222222-struct eh_frame_hdr_table_entry {223223- unsigned long start, fde;224224-};225225-226226-static int cmp_eh_frame_hdr_table_entries(const void *p1, const void *p2)227227-{228228- const struct eh_frame_hdr_table_entry *e1 = p1;229229- const struct eh_frame_hdr_table_entry *e2 = p2;230230-231231- return (e1->start > e2->start) - (e1->start < e2->start);232232-}233233-234234-static void swap_eh_frame_hdr_table_entries(void *p1, void *p2, int size)235235-{236236- struct eh_frame_hdr_table_entry *e1 = p1;237237- struct eh_frame_hdr_table_entry *e2 = p2;238238- unsigned long v;239239-240240- v = e1->start;241241- e1->start = e2->start;242242- e2->start = v;243243- v = e1->fde;244244- e1->fde = e2->fde;245245- e2->fde = v;246246-}247247-248248-static void __init setup_unwind_table(struct unwind_table *table,249249- void *(*alloc)(unsigned long))250250-{251251- const u8 *ptr;252252- unsigned long tableSize = table->size, hdrSize;253253- unsigned n;254254- const u32 *fde;255255- struct {256256- u8 version;257257- u8 eh_frame_ptr_enc;258258- u8 fde_count_enc;259259- u8 table_enc;260260- unsigned long eh_frame_ptr;261261- unsigned int fde_count;262262- struct eh_frame_hdr_table_entry table[];263263- } __attribute__((__packed__)) *header;264264-265265- if (table->header)266266- return;267267-268268- if (table->hdrsz)269269- printk(KERN_WARNING ".eh_frame_hdr for '%s' present but unusable\n",270270- table->name);271271-272272- if (tableSize & (sizeof(*fde) - 1))273273- return;274274-275275- for (fde = table->address, n = 0;276276- tableSize > sizeof(*fde) && tableSize - sizeof(*fde) >= *fde;277277- tableSize -= sizeof(*fde) + *fde, fde += 1 + *fde / sizeof(*fde)) {278278- const u32 *cie = cie_for_fde(fde, table);279279- signed ptrType;280280-281281- if (cie == ¬_fde)282282- continue;283283- if (cie == NULL284284- || cie == &bad_cie285285- || (ptrType = fde_pointer_type(cie)) < 0)286286- return;287287- ptr = (const u8 *)(fde + 2);288288- if (!read_pointer(&ptr,289289- (const u8 *)(fde + 1) + *fde,290290- ptrType, 0, 0))291291- return;292292- ++n;293293- }294294-295295- if (tableSize || !n)296296- return;297297-298298- hdrSize = 4 + sizeof(unsigned long) + sizeof(unsigned int)299299- + 2 * n * sizeof(unsigned long);300300- dprintk(2, "Binary lookup table size for %s: %lu bytes", table->name, hdrSize);301301- header = alloc(hdrSize);302302- if (!header)303303- return;304304- header->version = 1;305305- header->eh_frame_ptr_enc = DW_EH_PE_abs|DW_EH_PE_native;306306- header->fde_count_enc = DW_EH_PE_abs|DW_EH_PE_data4;307307- header->table_enc = DW_EH_PE_abs|DW_EH_PE_native;308308- put_unaligned((unsigned long)table->address, &header->eh_frame_ptr);309309- BUILD_BUG_ON(offsetof(typeof(*header), fde_count)310310- % __alignof(typeof(header->fde_count)));311311- header->fde_count = n;312312-313313- BUILD_BUG_ON(offsetof(typeof(*header), table)314314- % __alignof(typeof(*header->table)));315315- for (fde = table->address, tableSize = table->size, n = 0;316316- tableSize;317317- tableSize -= sizeof(*fde) + *fde, fde += 1 + *fde / sizeof(*fde)) {318318- const u32 *cie = fde + 1 - fde[1] / sizeof(*fde);319319-320320- if (!fde[1])321321- continue; /* this is a CIE */322322- ptr = (const u8 *)(fde + 2);323323- header->table[n].start = read_pointer(&ptr,324324- (const u8 *)(fde + 1) + *fde,325325- fde_pointer_type(cie), 0, 0);326326- header->table[n].fde = (unsigned long)fde;327327- ++n;328328- }329329- WARN_ON(n != header->fde_count);330330-331331- sort(header->table,332332- n,333333- sizeof(*header->table),334334- cmp_eh_frame_hdr_table_entries,335335- swap_eh_frame_hdr_table_entries);336336-337337- table->hdrsz = hdrSize;338338- smp_wmb();339339- table->header = (const void *)header;340340-}341341-342342-static void *__init balloc(unsigned long sz)343343-{344344- return __alloc_bootmem_nopanic(sz,345345- sizeof(unsigned int),346346- __pa(MAX_DMA_ADDRESS));347347-}348348-349349-void __init unwind_setup(void)350350-{351351- setup_unwind_table(&root_table, balloc);352352-}353353-354354-#ifdef CONFIG_MODULES355355-356356-static struct unwind_table *last_table;357357-358358-/* Must be called with module_mutex held. */359359-void *unwind_add_table(struct module *module,360360- const void *table_start,361361- unsigned long table_size)362362-{363363- struct unwind_table *table;364364-365365- if (table_size <= 0)366366- return NULL;367367-368368- table = kmalloc(sizeof(*table), GFP_KERNEL);369369- if (!table)370370- return NULL;371371-372372- init_unwind_table(table, module->name,373373- module->module_core, module->core_size,374374- module->module_init, module->init_size,375375- table_start, table_size,376376- NULL, 0);377377-378378- if (last_table)379379- last_table->link = table;380380- else381381- root_table.link = table;382382- last_table = table;383383-384384- return table;385385-}386386-387387-struct unlink_table_info388388-{389389- struct unwind_table *table;390390- int init_only;391391-};392392-393393-static int unlink_table(void *arg)394394-{395395- struct unlink_table_info *info = arg;396396- struct unwind_table *table = info->table, *prev;397397-398398- for (prev = &root_table; prev->link && prev->link != table; prev = prev->link)399399- ;400400-401401- if (prev->link) {402402- if (info->init_only) {403403- table->init.pc = 0;404404- table->init.range = 0;405405- info->table = NULL;406406- } else {407407- prev->link = table->link;408408- if (!prev->link)409409- last_table = prev;410410- }411411- } else412412- info->table = NULL;413413-414414- return 0;415415-}416416-417417-/* Must be called with module_mutex held. */418418-void unwind_remove_table(void *handle, int init_only)419419-{420420- struct unwind_table *table = handle;421421- struct unlink_table_info info;422422-423423- if (!table || table == &root_table)424424- return;425425-426426- if (init_only && table == last_table) {427427- table->init.pc = 0;428428- table->init.range = 0;429429- return;430430- }431431-432432- info.table = table;433433- info.init_only = init_only;434434- stop_machine_run(unlink_table, &info, NR_CPUS);435435-436436- if (info.table)437437- kfree(table);438438-}439439-440440-#endif /* CONFIG_MODULES */441441-442442-static uleb128_t get_uleb128(const u8 **pcur, const u8 *end)443443-{444444- const u8 *cur = *pcur;445445- uleb128_t value;446446- unsigned shift;447447-448448- for (shift = 0, value = 0; cur < end; shift += 7) {449449- if (shift + 7 > 8 * sizeof(value)450450- && (*cur & 0x7fU) >= (1U << (8 * sizeof(value) - shift))) {451451- cur = end + 1;452452- break;453453- }454454- value |= (uleb128_t)(*cur & 0x7f) << shift;455455- if (!(*cur++ & 0x80))456456- break;457457- }458458- *pcur = cur;459459-460460- return value;461461-}462462-463463-static sleb128_t get_sleb128(const u8 **pcur, const u8 *end)464464-{465465- const u8 *cur = *pcur;466466- sleb128_t value;467467- unsigned shift;468468-469469- for (shift = 0, value = 0; cur < end; shift += 7) {470470- if (shift + 7 > 8 * sizeof(value)471471- && (*cur & 0x7fU) >= (1U << (8 * sizeof(value) - shift))) {472472- cur = end + 1;473473- break;474474- }475475- value |= (sleb128_t)(*cur & 0x7f) << shift;476476- if (!(*cur & 0x80)) {477477- value |= -(*cur++ & 0x40) << shift;478478- break;479479- }480480- }481481- *pcur = cur;482482-483483- return value;484484-}485485-486486-static const u32 *cie_for_fde(const u32 *fde, const struct unwind_table *table)487487-{488488- const u32 *cie;489489-490490- if (!*fde || (*fde & (sizeof(*fde) - 1)))491491- return &bad_cie;492492- if (!fde[1])493493- return ¬_fde; /* this is a CIE */494494- if ((fde[1] & (sizeof(*fde) - 1))495495- || fde[1] > (unsigned long)(fde + 1) - (unsigned long)table->address)496496- return NULL; /* this is not a valid FDE */497497- cie = fde + 1 - fde[1] / sizeof(*fde);498498- if (*cie <= sizeof(*cie) + 4499499- || *cie >= fde[1] - sizeof(*fde)500500- || (*cie & (sizeof(*cie) - 1))501501- || cie[1])502502- return NULL; /* this is not a (valid) CIE */503503- return cie;504504-}505505-506506-static unsigned long read_pointer(const u8 **pLoc,507507- const void *end,508508- signed ptrType,509509- unsigned long text_base,510510- unsigned long data_base)511511-{512512- unsigned long value = 0;513513- union {514514- const u8 *p8;515515- const u16 *p16u;516516- const s16 *p16s;517517- const u32 *p32u;518518- const s32 *p32s;519519- const unsigned long *pul;520520- } ptr;521521-522522- if (ptrType < 0 || ptrType == DW_EH_PE_omit) {523523- dprintk(1, "Invalid pointer encoding %02X (%p,%p).", ptrType, *pLoc, end);524524- return 0;525525- }526526- ptr.p8 = *pLoc;527527- switch(ptrType & DW_EH_PE_FORM) {528528- case DW_EH_PE_data2:529529- if (end < (const void *)(ptr.p16u + 1)) {530530- dprintk(1, "Data16 overrun (%p,%p).", ptr.p8, end);531531- return 0;532532- }533533- if(ptrType & DW_EH_PE_signed)534534- value = get_unaligned(ptr.p16s++);535535- else536536- value = get_unaligned(ptr.p16u++);537537- break;538538- case DW_EH_PE_data4:539539-#ifdef CONFIG_64BIT540540- if (end < (const void *)(ptr.p32u + 1)) {541541- dprintk(1, "Data32 overrun (%p,%p).", ptr.p8, end);542542- return 0;543543- }544544- if(ptrType & DW_EH_PE_signed)545545- value = get_unaligned(ptr.p32s++);546546- else547547- value = get_unaligned(ptr.p32u++);548548- break;549549- case DW_EH_PE_data8:550550- BUILD_BUG_ON(sizeof(u64) != sizeof(value));551551-#else552552- BUILD_BUG_ON(sizeof(u32) != sizeof(value));553553-#endif554554- case DW_EH_PE_native:555555- if (end < (const void *)(ptr.pul + 1)) {556556- dprintk(1, "DataUL overrun (%p,%p).", ptr.p8, end);557557- return 0;558558- }559559- value = get_unaligned(ptr.pul++);560560- break;561561- case DW_EH_PE_leb128:562562- BUILD_BUG_ON(sizeof(uleb128_t) > sizeof(value));563563- value = ptrType & DW_EH_PE_signed564564- ? get_sleb128(&ptr.p8, end)565565- : get_uleb128(&ptr.p8, end);566566- if ((const void *)ptr.p8 > end) {567567- dprintk(1, "DataLEB overrun (%p,%p).", ptr.p8, end);568568- return 0;569569- }570570- break;571571- default:572572- dprintk(2, "Cannot decode pointer type %02X (%p,%p).",573573- ptrType, ptr.p8, end);574574- return 0;575575- }576576- switch(ptrType & DW_EH_PE_ADJUST) {577577- case DW_EH_PE_abs:578578- break;579579- case DW_EH_PE_pcrel:580580- value += (unsigned long)*pLoc;581581- break;582582- case DW_EH_PE_textrel:583583- if (likely(text_base)) {584584- value += text_base;585585- break;586586- }587587- dprintk(2, "Text-relative encoding %02X (%p,%p), but zero text base.",588588- ptrType, *pLoc, end);589589- return 0;590590- case DW_EH_PE_datarel:591591- if (likely(data_base)) {592592- value += data_base;593593- break;594594- }595595- dprintk(2, "Data-relative encoding %02X (%p,%p), but zero data base.",596596- ptrType, *pLoc, end);597597- return 0;598598- default:599599- dprintk(2, "Cannot adjust pointer type %02X (%p,%p).",600600- ptrType, *pLoc, end);601601- return 0;602602- }603603- if ((ptrType & DW_EH_PE_indirect)604604- && probe_kernel_address((unsigned long *)value, value)) {605605- dprintk(1, "Cannot read indirect value %lx (%p,%p).",606606- value, *pLoc, end);607607- return 0;608608- }609609- *pLoc = ptr.p8;610610-611611- return value;612612-}613613-614614-static signed fde_pointer_type(const u32 *cie)615615-{616616- const u8 *ptr = (const u8 *)(cie + 2);617617- unsigned version = *ptr;618618-619619- if (version != 1)620620- return -1; /* unsupported */621621- if (*++ptr) {622622- const char *aug;623623- const u8 *end = (const u8 *)(cie + 1) + *cie;624624- uleb128_t len;625625-626626- /* check if augmentation size is first (and thus present) */627627- if (*ptr != 'z')628628- return -1;629629- /* check if augmentation string is nul-terminated */630630- if ((ptr = memchr(aug = (const void *)ptr, 0, end - ptr)) == NULL)631631- return -1;632632- ++ptr; /* skip terminator */633633- get_uleb128(&ptr, end); /* skip code alignment */634634- get_sleb128(&ptr, end); /* skip data alignment */635635- /* skip return address column */636636- version <= 1 ? (void)++ptr : (void)get_uleb128(&ptr, end);637637- len = get_uleb128(&ptr, end); /* augmentation length */638638- if (ptr + len < ptr || ptr + len > end)639639- return -1;640640- end = ptr + len;641641- while (*++aug) {642642- if (ptr >= end)643643- return -1;644644- switch(*aug) {645645- case 'L':646646- ++ptr;647647- break;648648- case 'P': {649649- signed ptrType = *ptr++;650650-651651- if (!read_pointer(&ptr, end, ptrType, 0, 0)652652- || ptr > end)653653- return -1;654654- }655655- break;656656- case 'R':657657- return *ptr;658658- default:659659- return -1;660660- }661661- }662662- }663663- return DW_EH_PE_native|DW_EH_PE_abs;664664-}665665-666666-static int advance_loc(unsigned long delta, struct unwind_state *state)667667-{668668- state->loc += delta * state->codeAlign;669669-670670- return delta > 0;671671-}672672-673673-static void set_rule(uleb128_t reg,674674- enum item_location where,675675- uleb128_t value,676676- struct unwind_state *state)677677-{678678- if (reg < ARRAY_SIZE(state->regs)) {679679- state->regs[reg].where = where;680680- state->regs[reg].value = value;681681- }682682-}683683-684684-static int processCFI(const u8 *start,685685- const u8 *end,686686- unsigned long targetLoc,687687- signed ptrType,688688- struct unwind_state *state)689689-{690690- union {691691- const u8 *p8;692692- const u16 *p16;693693- const u32 *p32;694694- } ptr;695695- int result = 1;696696-697697- if (start != state->cieStart) {698698- state->loc = state->org;699699- result = processCFI(state->cieStart, state->cieEnd, 0, ptrType, state);700700- if (targetLoc == 0 && state->label == NULL)701701- return result;702702- }703703- for (ptr.p8 = start; result && ptr.p8 < end; ) {704704- switch(*ptr.p8 >> 6) {705705- uleb128_t value;706706-707707- case 0:708708- switch(*ptr.p8++) {709709- case DW_CFA_nop:710710- break;711711- case DW_CFA_set_loc:712712- state->loc = read_pointer(&ptr.p8, end, ptrType, 0, 0);713713- if (state->loc == 0)714714- result = 0;715715- break;716716- case DW_CFA_advance_loc1:717717- result = ptr.p8 < end && advance_loc(*ptr.p8++, state);718718- break;719719- case DW_CFA_advance_loc2:720720- result = ptr.p8 <= end + 2721721- && advance_loc(*ptr.p16++, state);722722- break;723723- case DW_CFA_advance_loc4:724724- result = ptr.p8 <= end + 4725725- && advance_loc(*ptr.p32++, state);726726- break;727727- case DW_CFA_offset_extended:728728- value = get_uleb128(&ptr.p8, end);729729- set_rule(value, Memory, get_uleb128(&ptr.p8, end), state);730730- break;731731- case DW_CFA_val_offset:732732- value = get_uleb128(&ptr.p8, end);733733- set_rule(value, Value, get_uleb128(&ptr.p8, end), state);734734- break;735735- case DW_CFA_offset_extended_sf:736736- value = get_uleb128(&ptr.p8, end);737737- set_rule(value, Memory, get_sleb128(&ptr.p8, end), state);738738- break;739739- case DW_CFA_val_offset_sf:740740- value = get_uleb128(&ptr.p8, end);741741- set_rule(value, Value, get_sleb128(&ptr.p8, end), state);742742- break;743743- case DW_CFA_restore_extended:744744- case DW_CFA_undefined:745745- case DW_CFA_same_value:746746- set_rule(get_uleb128(&ptr.p8, end), Nowhere, 0, state);747747- break;748748- case DW_CFA_register:749749- value = get_uleb128(&ptr.p8, end);750750- set_rule(value,751751- Register,752752- get_uleb128(&ptr.p8, end), state);753753- break;754754- case DW_CFA_remember_state:755755- if (ptr.p8 == state->label) {756756- state->label = NULL;757757- return 1;758758- }759759- if (state->stackDepth >= MAX_STACK_DEPTH) {760760- dprintk(1, "State stack overflow (%p,%p).", ptr.p8, end);761761- return 0;762762- }763763- state->stack[state->stackDepth++] = ptr.p8;764764- break;765765- case DW_CFA_restore_state:766766- if (state->stackDepth) {767767- const uleb128_t loc = state->loc;768768- const u8 *label = state->label;769769-770770- state->label = state->stack[state->stackDepth - 1];771771- memcpy(&state->cfa, &badCFA, sizeof(state->cfa));772772- memset(state->regs, 0, sizeof(state->regs));773773- state->stackDepth = 0;774774- result = processCFI(start, end, 0, ptrType, state);775775- state->loc = loc;776776- state->label = label;777777- } else {778778- dprintk(1, "State stack underflow (%p,%p).", ptr.p8, end);779779- return 0;780780- }781781- break;782782- case DW_CFA_def_cfa:783783- state->cfa.reg = get_uleb128(&ptr.p8, end);784784- /*nobreak*/785785- case DW_CFA_def_cfa_offset:786786- state->cfa.offs = get_uleb128(&ptr.p8, end);787787- break;788788- case DW_CFA_def_cfa_sf:789789- state->cfa.reg = get_uleb128(&ptr.p8, end);790790- /*nobreak*/791791- case DW_CFA_def_cfa_offset_sf:792792- state->cfa.offs = get_sleb128(&ptr.p8, end)793793- * state->dataAlign;794794- break;795795- case DW_CFA_def_cfa_register:796796- state->cfa.reg = get_uleb128(&ptr.p8, end);797797- break;798798- /*todo case DW_CFA_def_cfa_expression: */799799- /*todo case DW_CFA_expression: */800800- /*todo case DW_CFA_val_expression: */801801- case DW_CFA_GNU_args_size:802802- get_uleb128(&ptr.p8, end);803803- break;804804- case DW_CFA_GNU_negative_offset_extended:805805- value = get_uleb128(&ptr.p8, end);806806- set_rule(value,807807- Memory,808808- (uleb128_t)0 - get_uleb128(&ptr.p8, end), state);809809- break;810810- case DW_CFA_GNU_window_save:811811- default:812812- dprintk(1, "Unrecognized CFI op %02X (%p,%p).", ptr.p8[-1], ptr.p8 - 1, end);813813- result = 0;814814- break;815815- }816816- break;817817- case 1:818818- result = advance_loc(*ptr.p8++ & 0x3f, state);819819- break;820820- case 2:821821- value = *ptr.p8++ & 0x3f;822822- set_rule(value, Memory, get_uleb128(&ptr.p8, end), state);823823- break;824824- case 3:825825- set_rule(*ptr.p8++ & 0x3f, Nowhere, 0, state);826826- break;827827- }828828- if (ptr.p8 > end) {829829- dprintk(1, "Data overrun (%p,%p).", ptr.p8, end);830830- result = 0;831831- }832832- if (result && targetLoc != 0 && targetLoc < state->loc)833833- return 1;834834- }835835-836836- if (result && ptr.p8 < end)837837- dprintk(1, "Data underrun (%p,%p).", ptr.p8, end);838838-839839- return result840840- && ptr.p8 == end841841- && (targetLoc == 0842842- || (/*todo While in theory this should apply, gcc in practice omits843843- everything past the function prolog, and hence the location844844- never reaches the end of the function.845845- targetLoc < state->loc &&*/ state->label == NULL));846846-}847847-848848-/* Unwind to previous to frame. Returns 0 if successful, negative849849- * number in case of an error. */850850-int unwind(struct unwind_frame_info *frame)851851-{852852-#define FRAME_REG(r, t) (((t *)frame)[reg_info[r].offs])853853- const u32 *fde = NULL, *cie = NULL;854854- const u8 *ptr = NULL, *end = NULL;855855- unsigned long pc = UNW_PC(frame) - frame->call_frame, sp;856856- unsigned long startLoc = 0, endLoc = 0, cfa;857857- unsigned i;858858- signed ptrType = -1;859859- uleb128_t retAddrReg = 0;860860- const struct unwind_table *table;861861- struct unwind_state state;862862-863863- if (UNW_PC(frame) == 0)864864- return -EINVAL;865865- if ((table = find_table(pc)) != NULL866866- && !(table->size & (sizeof(*fde) - 1))) {867867- const u8 *hdr = table->header;868868- unsigned long tableSize;869869-870870- smp_rmb();871871- if (hdr && hdr[0] == 1) {872872- switch(hdr[3] & DW_EH_PE_FORM) {873873- case DW_EH_PE_native: tableSize = sizeof(unsigned long); break;874874- case DW_EH_PE_data2: tableSize = 2; break;875875- case DW_EH_PE_data4: tableSize = 4; break;876876- case DW_EH_PE_data8: tableSize = 8; break;877877- default: tableSize = 0; break;878878- }879879- ptr = hdr + 4;880880- end = hdr + table->hdrsz;881881- if (tableSize882882- && read_pointer(&ptr, end, hdr[1], 0, 0)883883- == (unsigned long)table->address884884- && (i = read_pointer(&ptr, end, hdr[2], 0, 0)) > 0885885- && i == (end - ptr) / (2 * tableSize)886886- && !((end - ptr) % (2 * tableSize))) {887887- do {888888- const u8 *cur = ptr + (i / 2) * (2 * tableSize);889889-890890- startLoc = read_pointer(&cur,891891- cur + tableSize,892892- hdr[3], 0,893893- (unsigned long)hdr);894894- if (pc < startLoc)895895- i /= 2;896896- else {897897- ptr = cur - tableSize;898898- i = (i + 1) / 2;899899- }900900- } while (startLoc && i > 1);901901- if (i == 1902902- && (startLoc = read_pointer(&ptr,903903- ptr + tableSize,904904- hdr[3], 0,905905- (unsigned long)hdr)) != 0906906- && pc >= startLoc)907907- fde = (void *)read_pointer(&ptr,908908- ptr + tableSize,909909- hdr[3], 0,910910- (unsigned long)hdr);911911- }912912- }913913- if(hdr && !fde)914914- dprintk(3, "Binary lookup for %lx failed.", pc);915915-916916- if (fde != NULL) {917917- cie = cie_for_fde(fde, table);918918- ptr = (const u8 *)(fde + 2);919919- if(cie != NULL920920- && cie != &bad_cie921921- && cie != ¬_fde922922- && (ptrType = fde_pointer_type(cie)) >= 0923923- && read_pointer(&ptr,924924- (const u8 *)(fde + 1) + *fde,925925- ptrType, 0, 0) == startLoc) {926926- if (!(ptrType & DW_EH_PE_indirect))927927- ptrType &= DW_EH_PE_FORM|DW_EH_PE_signed;928928- endLoc = startLoc929929- + read_pointer(&ptr,930930- (const u8 *)(fde + 1) + *fde,931931- ptrType, 0, 0);932932- if(pc >= endLoc)933933- fde = NULL;934934- } else935935- fde = NULL;936936- if(!fde)937937- dprintk(1, "Binary lookup result for %lx discarded.", pc);938938- }939939- if (fde == NULL) {940940- for (fde = table->address, tableSize = table->size;941941- cie = NULL, tableSize > sizeof(*fde)942942- && tableSize - sizeof(*fde) >= *fde;943943- tableSize -= sizeof(*fde) + *fde,944944- fde += 1 + *fde / sizeof(*fde)) {945945- cie = cie_for_fde(fde, table);946946- if (cie == &bad_cie) {947947- cie = NULL;948948- break;949949- }950950- if (cie == NULL951951- || cie == ¬_fde952952- || (ptrType = fde_pointer_type(cie)) < 0)953953- continue;954954- ptr = (const u8 *)(fde + 2);955955- startLoc = read_pointer(&ptr,956956- (const u8 *)(fde + 1) + *fde,957957- ptrType, 0, 0);958958- if (!startLoc)959959- continue;960960- if (!(ptrType & DW_EH_PE_indirect))961961- ptrType &= DW_EH_PE_FORM|DW_EH_PE_signed;962962- endLoc = startLoc963963- + read_pointer(&ptr,964964- (const u8 *)(fde + 1) + *fde,965965- ptrType, 0, 0);966966- if (pc >= startLoc && pc < endLoc)967967- break;968968- }969969- if(!fde)970970- dprintk(3, "Linear lookup for %lx failed.", pc);971971- }972972- }973973- if (cie != NULL) {974974- memset(&state, 0, sizeof(state));975975- state.cieEnd = ptr; /* keep here temporarily */976976- ptr = (const u8 *)(cie + 2);977977- end = (const u8 *)(cie + 1) + *cie;978978- frame->call_frame = 1;979979- if ((state.version = *ptr) != 1)980980- cie = NULL; /* unsupported version */981981- else if (*++ptr) {982982- /* check if augmentation size is first (and thus present) */983983- if (*ptr == 'z') {984984- while (++ptr < end && *ptr) {985985- switch(*ptr) {986986- /* check for ignorable (or already handled)987987- * nul-terminated augmentation string */988988- case 'L':989989- case 'P':990990- case 'R':991991- continue;992992- case 'S':993993- frame->call_frame = 0;994994- continue;995995- default:996996- break;997997- }998998- break;999999- }10001000- }10011001- if (ptr >= end || *ptr)10021002- cie = NULL;10031003- }10041004- if(!cie)10051005- dprintk(1, "CIE unusable (%p,%p).", ptr, end);10061006- ++ptr;10071007- }10081008- if (cie != NULL) {10091009- /* get code aligment factor */10101010- state.codeAlign = get_uleb128(&ptr, end);10111011- /* get data aligment factor */10121012- state.dataAlign = get_sleb128(&ptr, end);10131013- if (state.codeAlign == 0 || state.dataAlign == 0 || ptr >= end)10141014- cie = NULL;10151015- else if (UNW_PC(frame) % state.codeAlign10161016- || UNW_SP(frame) % sleb128abs(state.dataAlign)) {10171017- dprintk(1, "Input pointer(s) misaligned (%lx,%lx).",10181018- UNW_PC(frame), UNW_SP(frame));10191019- return -EPERM;10201020- } else {10211021- retAddrReg = state.version <= 1 ? *ptr++ : get_uleb128(&ptr, end);10221022- /* skip augmentation */10231023- if (((const char *)(cie + 2))[1] == 'z') {10241024- uleb128_t augSize = get_uleb128(&ptr, end);10251025-10261026- ptr += augSize;10271027- }10281028- if (ptr > end10291029- || retAddrReg >= ARRAY_SIZE(reg_info)10301030- || REG_INVALID(retAddrReg)10311031- || reg_info[retAddrReg].width != sizeof(unsigned long))10321032- cie = NULL;10331033- }10341034- if(!cie)10351035- dprintk(1, "CIE validation failed (%p,%p).", ptr, end);10361036- }10371037- if (cie != NULL) {10381038- state.cieStart = ptr;10391039- ptr = state.cieEnd;10401040- state.cieEnd = end;10411041- end = (const u8 *)(fde + 1) + *fde;10421042- /* skip augmentation */10431043- if (((const char *)(cie + 2))[1] == 'z') {10441044- uleb128_t augSize = get_uleb128(&ptr, end);10451045-10461046- if ((ptr += augSize) > end)10471047- fde = NULL;10481048- }10491049- if(!fde)10501050- dprintk(1, "FDE validation failed (%p,%p).", ptr, end);10511051- }10521052- if (cie == NULL || fde == NULL) {10531053-#ifdef CONFIG_FRAME_POINTER10541054- unsigned long top, bottom;10551055-10561056- if ((UNW_SP(frame) | UNW_FP(frame)) % sizeof(unsigned long))10571057- return -EPERM;10581058- top = STACK_TOP(frame->task);10591059- bottom = STACK_BOTTOM(frame->task);10601060-# if FRAME_RETADDR_OFFSET < 010611061- if (UNW_SP(frame) < top10621062- && UNW_FP(frame) <= UNW_SP(frame)10631063- && bottom < UNW_FP(frame)10641064-# else10651065- if (UNW_SP(frame) > top10661066- && UNW_FP(frame) >= UNW_SP(frame)10671067- && bottom > UNW_FP(frame)10681068-# endif10691069- && !((UNW_SP(frame) | UNW_FP(frame))10701070- & (sizeof(unsigned long) - 1))) {10711071- unsigned long link;10721072-10731073- if (!probe_kernel_address(10741074- (unsigned long *)(UNW_FP(frame)10751075- + FRAME_LINK_OFFSET),10761076- link)10771077-# if FRAME_RETADDR_OFFSET < 010781078- && link > bottom && link < UNW_FP(frame)10791079-# else10801080- && link > UNW_FP(frame) && link < bottom10811081-# endif10821082- && !(link & (sizeof(link) - 1))10831083- && !probe_kernel_address(10841084- (unsigned long *)(UNW_FP(frame)10851085- + FRAME_RETADDR_OFFSET), UNW_PC(frame))) {10861086- UNW_SP(frame) = UNW_FP(frame) + FRAME_RETADDR_OFFSET10871087-# if FRAME_RETADDR_OFFSET < 010881088- -10891089-# else10901090- +10911091-# endif10921092- sizeof(UNW_PC(frame));10931093- UNW_FP(frame) = link;10941094- return 0;10951095- }10961096- }10971097-#endif10981098- return -ENXIO;10991099- }11001100- state.org = startLoc;11011101- memcpy(&state.cfa, &badCFA, sizeof(state.cfa));11021102- /* process instructions */11031103- if (!processCFI(ptr, end, pc, ptrType, &state)11041104- || state.loc > endLoc11051105- || state.regs[retAddrReg].where == Nowhere11061106- || state.cfa.reg >= ARRAY_SIZE(reg_info)11071107- || reg_info[state.cfa.reg].width != sizeof(unsigned long)11081108- || FRAME_REG(state.cfa.reg, unsigned long) % sizeof(unsigned long)11091109- || state.cfa.offs % sizeof(unsigned long)) {11101110- dprintk(1, "Unusable unwind info (%p,%p).", ptr, end);11111111- return -EIO;11121112- }11131113- /* update frame */11141114-#ifndef CONFIG_AS_CFI_SIGNAL_FRAME11151115- if(frame->call_frame11161116- && !UNW_DEFAULT_RA(state.regs[retAddrReg], state.dataAlign))11171117- frame->call_frame = 0;11181118-#endif11191119- cfa = FRAME_REG(state.cfa.reg, unsigned long) + state.cfa.offs;11201120- startLoc = min((unsigned long)UNW_SP(frame), cfa);11211121- endLoc = max((unsigned long)UNW_SP(frame), cfa);11221122- if (STACK_LIMIT(startLoc) != STACK_LIMIT(endLoc)) {11231123- startLoc = min(STACK_LIMIT(cfa), cfa);11241124- endLoc = max(STACK_LIMIT(cfa), cfa);11251125- }11261126-#ifndef CONFIG_64BIT11271127-# define CASES CASE(8); CASE(16); CASE(32)11281128-#else11291129-# define CASES CASE(8); CASE(16); CASE(32); CASE(64)11301130-#endif11311131- pc = UNW_PC(frame);11321132- sp = UNW_SP(frame);11331133- for (i = 0; i < ARRAY_SIZE(state.regs); ++i) {11341134- if (REG_INVALID(i)) {11351135- if (state.regs[i].where == Nowhere)11361136- continue;11371137- dprintk(1, "Cannot restore register %u (%d).",11381138- i, state.regs[i].where);11391139- return -EIO;11401140- }11411141- switch(state.regs[i].where) {11421142- default:11431143- break;11441144- case Register:11451145- if (state.regs[i].value >= ARRAY_SIZE(reg_info)11461146- || REG_INVALID(state.regs[i].value)11471147- || reg_info[i].width > reg_info[state.regs[i].value].width) {11481148- dprintk(1, "Cannot restore register %u from register %lu.",11491149- i, state.regs[i].value);11501150- return -EIO;11511151- }11521152- switch(reg_info[state.regs[i].value].width) {11531153-#define CASE(n) \11541154- case sizeof(u##n): \11551155- state.regs[i].value = FRAME_REG(state.regs[i].value, \11561156- const u##n); \11571157- break11581158- CASES;11591159-#undef CASE11601160- default:11611161- dprintk(1, "Unsupported register size %u (%lu).",11621162- reg_info[state.regs[i].value].width,11631163- state.regs[i].value);11641164- return -EIO;11651165- }11661166- break;11671167- }11681168- }11691169- for (i = 0; i < ARRAY_SIZE(state.regs); ++i) {11701170- if (REG_INVALID(i))11711171- continue;11721172- switch(state.regs[i].where) {11731173- case Nowhere:11741174- if (reg_info[i].width != sizeof(UNW_SP(frame))11751175- || &FRAME_REG(i, __typeof__(UNW_SP(frame)))11761176- != &UNW_SP(frame))11771177- continue;11781178- UNW_SP(frame) = cfa;11791179- break;11801180- case Register:11811181- switch(reg_info[i].width) {11821182-#define CASE(n) case sizeof(u##n): \11831183- FRAME_REG(i, u##n) = state.regs[i].value; \11841184- break11851185- CASES;11861186-#undef CASE11871187- default:11881188- dprintk(1, "Unsupported register size %u (%u).",11891189- reg_info[i].width, i);11901190- return -EIO;11911191- }11921192- break;11931193- case Value:11941194- if (reg_info[i].width != sizeof(unsigned long)) {11951195- dprintk(1, "Unsupported value size %u (%u).",11961196- reg_info[i].width, i);11971197- return -EIO;11981198- }11991199- FRAME_REG(i, unsigned long) = cfa + state.regs[i].value12001200- * state.dataAlign;12011201- break;12021202- case Memory: {12031203- unsigned long addr = cfa + state.regs[i].value12041204- * state.dataAlign;12051205-12061206- if ((state.regs[i].value * state.dataAlign)12071207- % sizeof(unsigned long)12081208- || addr < startLoc12091209- || addr + sizeof(unsigned long) < addr12101210- || addr + sizeof(unsigned long) > endLoc) {12111211- dprintk(1, "Bad memory location %lx (%lx).",12121212- addr, state.regs[i].value);12131213- return -EIO;12141214- }12151215- switch(reg_info[i].width) {12161216-#define CASE(n) case sizeof(u##n): \12171217- probe_kernel_address((u##n *)addr, FRAME_REG(i, u##n)); \12181218- break12191219- CASES;12201220-#undef CASE12211221- default:12221222- dprintk(1, "Unsupported memory size %u (%u).",12231223- reg_info[i].width, i);12241224- return -EIO;12251225- }12261226- }12271227- break;12281228- }12291229- }12301230-12311231- if (UNW_PC(frame) % state.codeAlign12321232- || UNW_SP(frame) % sleb128abs(state.dataAlign)) {12331233- dprintk(1, "Output pointer(s) misaligned (%lx,%lx).",12341234- UNW_PC(frame), UNW_SP(frame));12351235- return -EIO;12361236- }12371237- if (pc == UNW_PC(frame) && sp == UNW_SP(frame)) {12381238- dprintk(1, "No progress (%lx,%lx).", pc, sp);12391239- return -EIO;12401240- }12411241-12421242- return 0;12431243-#undef CASES12441244-#undef FRAME_REG12451245-}12461246-EXPORT_SYMBOL(unwind);12471247-12481248-int unwind_init_frame_info(struct unwind_frame_info *info,12491249- struct task_struct *tsk,12501250- /*const*/ struct pt_regs *regs)12511251-{12521252- info->task = tsk;12531253- info->call_frame = 0;12541254- arch_unw_init_frame_info(info, regs);12551255-12561256- return 0;12571257-}12581258-EXPORT_SYMBOL(unwind_init_frame_info);12591259-12601260-/*12611261- * Prepare to unwind a blocked task.12621262- */12631263-int unwind_init_blocked(struct unwind_frame_info *info,12641264- struct task_struct *tsk)12651265-{12661266- info->task = tsk;12671267- info->call_frame = 0;12681268- arch_unw_init_blocked(info);12691269-12701270- return 0;12711271-}12721272-EXPORT_SYMBOL(unwind_init_blocked);12731273-12741274-/*12751275- * Prepare to unwind the currently running thread.12761276- */12771277-int unwind_init_running(struct unwind_frame_info *info,12781278- asmlinkage int (*callback)(struct unwind_frame_info *,12791279- void *arg),12801280- void *arg)12811281-{12821282- info->task = current;12831283- info->call_frame = 0;12841284-12851285- return arch_unwind_init_running(info, callback, arg);12861286-}12871287-EXPORT_SYMBOL(unwind_init_running);12881288-12891289-/*12901290- * Unwind until the return pointer is in user-land (or until an error12911291- * occurs). Returns 0 if successful, negative number in case of12921292- * error.12931293- */12941294-int unwind_to_user(struct unwind_frame_info *info)12951295-{12961296- while (!arch_unw_user_mode(info)) {12971297- int err = unwind(info);12981298-12991299- if (err < 0)13001300- return err;13011301- }13021302-13031303- return 0;13041304-}13051305-EXPORT_SYMBOL(unwind_to_user);
+8-8
kernel/workqueue.c
···9696 BUG_ON(!work_pending(work));97979898 new = (unsigned long) wq | (1UL << WORK_STRUCT_PENDING);9999- new |= work->management & WORK_STRUCT_FLAG_MASK;100100- work->management = new;9999+ new |= WORK_STRUCT_FLAG_MASK & *work_data_bits(work);100100+ atomic_long_set(&work->data, new);101101}102102103103static inline void *get_wq_data(struct work_struct *work)104104{105105- return (void *) (work->management & WORK_STRUCT_WQ_DATA_MASK);105105+ return (void *) (atomic_long_read(&work->data) & WORK_STRUCT_WQ_DATA_MASK);106106}107107108108static int __run_work(struct cpu_workqueue_struct *cwq, struct work_struct *work)···133133 list_del_init(&work->entry);134134 spin_unlock_irqrestore(&cwq->lock, flags);135135136136- if (!test_bit(WORK_STRUCT_NOAUTOREL, &work->management))136136+ if (!test_bit(WORK_STRUCT_NOAUTOREL, work_data_bits(work)))137137 work_release(work);138138 f(work);139139···206206{207207 int ret = 0, cpu = get_cpu();208208209209- if (!test_and_set_bit(WORK_STRUCT_PENDING, &work->management)) {209209+ if (!test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) {210210 if (unlikely(is_single_threaded(wq)))211211 cpu = singlethread_cpu;212212 BUG_ON(!list_empty(&work->entry));···248248 if (delay == 0)249249 return queue_work(wq, work);250250251251- if (!test_and_set_bit(WORK_STRUCT_PENDING, &work->management)) {251251+ if (!test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) {252252 BUG_ON(timer_pending(timer));253253 BUG_ON(!list_empty(&work->entry));254254···280280 struct timer_list *timer = &dwork->timer;281281 struct work_struct *work = &dwork->work;282282283283- if (!test_and_set_bit(WORK_STRUCT_PENDING, &work->management)) {283283+ if (!test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work))) {284284 BUG_ON(timer_pending(timer));285285 BUG_ON(!list_empty(&work->entry));286286···321321 spin_unlock_irqrestore(&cwq->lock, flags);322322323323 BUG_ON(get_wq_data(work) != cwq);324324- if (!test_bit(WORK_STRUCT_NOAUTOREL, &work->management))324324+ if (!test_bit(WORK_STRUCT_NOAUTOREL, work_data_bits(work)))325325 work_release(work);326326 f(work);327327
-18
lib/Kconfig.debug
···354354 some architectures or if you use external debuggers.355355 If you don't debug the kernel, you can say N.356356357357-config UNWIND_INFO358358- bool "Compile the kernel with frame unwind information"359359- depends on !IA64 && !PARISC && !ARM360360- depends on !MODULES || !(MIPS || PPC || SUPERH || V850)361361- help362362- If you say Y here the resulting kernel image will be slightly larger363363- but not slower, and it will give very useful debugging information.364364- If you don't debug the kernel, you can say N, but we may not be able365365- to solve problems without frame unwind information or frame pointers.366366-367367-config STACK_UNWIND368368- bool "Stack unwind support"369369- depends on UNWIND_INFO370370- depends on X86371371- help372372- This enables more precise stack traces, omitting all unrelated373373- occurrences of pointers into kernel code from the dump.374374-375357config FORCED_INLINING376358 bool "Force gcc to inline functions marked 'inline'"377359 depends on DEBUG_KERNEL
···11/*22 * linux/mm/mincore.c33 *44- * Copyright (C) 1994-1999 Linus Torvalds44+ * Copyright (C) 1994-2006 Linus Torvalds55 */6677/*···3838 return present;3939}40404141-static long mincore_vma(struct vm_area_struct * vma,4242- unsigned long start, unsigned long end, unsigned char __user * vec)4141+/*4242+ * Do a chunk of "sys_mincore()". We've already checked4343+ * all the arguments, we hold the mmap semaphore: we should4444+ * just return the amount of info we're asked for.4545+ */4646+static long do_mincore(unsigned long addr, unsigned char *vec, unsigned long pages)4347{4444- long error, i, remaining;4545- unsigned char * tmp;4848+ unsigned long i, nr, pgoff;4949+ struct vm_area_struct *vma = find_vma(current->mm, addr);46504747- error = -ENOMEM;5151+ /*5252+ * find_vma() didn't find anything above us, or we're5353+ * in an unmapped hole in the address space: ENOMEM.5454+ */5555+ if (!vma || addr < vma->vm_start)5656+ return -ENOMEM;5757+5858+ /*5959+ * Ok, got it. But check whether it's a segment we support6060+ * mincore() on. Right now, we don't do any anonymous mappings.6161+ *6262+ * FIXME: This is just stupid. And returning ENOMEM is 6363+ * stupid too. We should just look at the page tables. But6464+ * this is what we've traditionally done, so we'll just6565+ * continue doing it.6666+ */4867 if (!vma->vm_file)4949- return error;6868+ return -ENOMEM;50695151- start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;5252- if (end > vma->vm_end)5353- end = vma->vm_end;5454- end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;7070+ /*7171+ * Calculate how many pages there are left in the vma, and7272+ * what the pgoff is for our address.7373+ */7474+ nr = (vma->vm_end - addr) >> PAGE_SHIFT;7575+ if (nr > pages)7676+ nr = pages;55775656- error = -EAGAIN;5757- tmp = (unsigned char *) __get_free_page(GFP_KERNEL);5858- if (!tmp)5959- return error;7878+ pgoff = (addr - vma->vm_start) >> PAGE_SHIFT;7979+ pgoff += vma->vm_pgoff;60806161- /* (end - start) is # of pages, and also # of bytes in "vec */6262- remaining = (end - start),8181+ /* And then we just fill the sucker in.. */8282+ for (i = 0 ; i < nr; i++, pgoff++)8383+ vec[i] = mincore_page(vma, pgoff);63846464- error = 0;6565- for (i = 0; remaining > 0; remaining -= PAGE_SIZE, i++) {6666- int j = 0;6767- long thispiece = (remaining < PAGE_SIZE) ?6868- remaining : PAGE_SIZE;6969-7070- while (j < thispiece)7171- tmp[j++] = mincore_page(vma, start++);7272-7373- if (copy_to_user(vec + PAGE_SIZE * i, tmp, thispiece)) {7474- error = -EFAULT;7575- break;7676- }7777- }7878-7979- free_page((unsigned long) tmp);8080- return error;8585+ return nr;8186}82878388/*···112107asmlinkage long sys_mincore(unsigned long start, size_t len,113108 unsigned char __user * vec)114109{115115- int index = 0;116116- unsigned long end, limit;117117- struct vm_area_struct * vma;118118- size_t max;119119- int unmapped_error = 0;120120- long error;110110+ long retval;111111+ unsigned long pages;112112+ unsigned char *tmp;121113122122- /* check the arguments */114114+ /* Check the start address: needs to be page-aligned.. */123115 if (start & ~PAGE_CACHE_MASK)124124- goto einval;116116+ return -EINVAL;125117126126- limit = TASK_SIZE;127127- if (start >= limit)128128- goto enomem;118118+ /* ..and we need to be passed a valid user-space range */119119+ if (!access_ok(VERIFY_READ, (void __user *) start, len))120120+ return -ENOMEM;129121130130- if (!len)131131- return 0;122122+ /* This also avoids any overflows on PAGE_CACHE_ALIGN */123123+ pages = len >> PAGE_SHIFT;124124+ pages += (len & ~PAGE_MASK) != 0;132125133133- max = limit - start;134134- len = PAGE_CACHE_ALIGN(len);135135- if (len > max || !len)136136- goto enomem;126126+ if (!access_ok(VERIFY_WRITE, vec, pages))127127+ return -EFAULT;137128138138- end = start + len;129129+ tmp = (void *) __get_free_page(GFP_USER);130130+ if (!tmp)131131+ return -EAGAIN;139132140140- /* check the output buffer whilst holding the lock */141141- error = -EFAULT;142142- down_read(¤t->mm->mmap_sem);133133+ retval = 0;134134+ while (pages) {135135+ /*136136+ * Do at most PAGE_SIZE entries per iteration, due to137137+ * the temporary buffer size.138138+ */139139+ down_read(¤t->mm->mmap_sem);140140+ retval = do_mincore(start, tmp, min(pages, PAGE_SIZE));141141+ up_read(¤t->mm->mmap_sem);143142144144- if (!access_ok(VERIFY_WRITE, vec, len >> PAGE_SHIFT))145145- goto out;146146-147147- /*148148- * If the interval [start,end) covers some unmapped address149149- * ranges, just ignore them, but return -ENOMEM at the end.150150- */151151- error = 0;152152-153153- vma = find_vma(current->mm, start);154154- while (vma) {155155- /* Here start < vma->vm_end. */156156- if (start < vma->vm_start) {157157- unmapped_error = -ENOMEM;158158- start = vma->vm_start;143143+ if (retval <= 0)144144+ break;145145+ if (copy_to_user(vec, tmp, retval)) {146146+ retval = -EFAULT;147147+ break;159148 }160160-161161- /* Here vma->vm_start <= start < vma->vm_end. */162162- if (end <= vma->vm_end) {163163- if (start < end) {164164- error = mincore_vma(vma, start, end,165165- &vec[index]);166166- if (error)167167- goto out;168168- }169169- error = unmapped_error;170170- goto out;171171- }172172-173173- /* Here vma->vm_start <= start < vma->vm_end < end. */174174- error = mincore_vma(vma, start, vma->vm_end, &vec[index]);175175- if (error)176176- goto out;177177- index += (vma->vm_end - start) >> PAGE_CACHE_SHIFT;178178- start = vma->vm_end;179179- vma = vma->vm_next;149149+ pages -= retval;150150+ vec += retval;151151+ start += retval << PAGE_SHIFT;152152+ retval = 0;180153 }181181-182182- /* we found a hole in the area queried if we arrive here */183183- error = -ENOMEM;184184-185185-out:186186- up_read(¤t->mm->mmap_sem);187187- return error;188188-189189-einval:190190- return -EINVAL;191191-enomem:192192- return -ENOMEM;154154+ free_page((unsigned long) tmp);155155+ return retval;193156}
+2-2
net/ax25/af_ax25.c
···10881088/*10891089 * FIXME: nonblock behaviour looks like it may have a bug.10901090 */10911091-static int ax25_connect(struct socket *sock, struct sockaddr *uaddr,10921092- int addr_len, int flags)10911091+static int __must_check ax25_connect(struct socket *sock,10921092+ struct sockaddr *uaddr, int addr_len, int flags)10931093{10941094 struct sock *sk = sock->sk;10951095 ax25_cb *ax25 = ax25_sk(sk), *ax25t;
···7171 write_unlock(&ax25_route_lock);7272}73737474-static int ax25_rt_add(struct ax25_routes_struct *route)7474+static int __must_check ax25_rt_add(struct ax25_routes_struct *route)7575{7676 ax25_route *ax25_rt;7777 ax25_dev *ax25_dev;
+2-1
net/ipv4/route.c
···13251325 /* Check for load limit; set rate_last to the latest sent13261326 * redirect.13271327 */13281328- if (time_after(jiffies,13281328+ if (rt->u.dst.rate_tokens == 0 ||13291329+ time_after(jiffies,13291330 (rt->u.dst.rate_last +13301331 (ip_rt_redirect_load << rt->u.dst.rate_tokens)))) {13311332 icmp_send(skb, ICMP_REDIRECT, ICMP_REDIR_HOST, rt->rt_gateway);
+2-1
net/ipv4/tcp_ipv4.c
···928928 if (tp->md5sig_info->entries4 == 0) {929929 kfree(tp->md5sig_info->keys4);930930 tp->md5sig_info->keys4 = NULL;931931+ tp->md5sig_info->alloced4 = 0;931932 } else if (tp->md5sig_info->entries4 != i) {932933 /* Need to do some manipulation */933934 memcpy(&tp->md5sig_info->keys4[i],···11861185 return 0;1187118611881187 if (hash_expected && !hash_location) {11891189- LIMIT_NETDEBUG(KERN_INFO "MD5 Hash NOT expected but found "11881188+ LIMIT_NETDEBUG(KERN_INFO "MD5 Hash expected but NOT found "11901189 "(" NIPQUAD_FMT ", %d)->(" NIPQUAD_FMT ", %d)\n",11911190 NIPQUAD(iph->saddr), ntohs(th->source),11921191 NIPQUAD(iph->daddr), ntohs(th->dest));
+3-2
net/ipv6/netfilter/Kconfig
···7788config NF_CONNTRACK_IPV699 tristate "IPv6 connection tracking support (EXPERIMENTAL)"1010- depends on EXPERIMENTAL && NF_CONNTRACK1010+ depends on INET && IPV6 && EXPERIMENTAL && NF_CONNTRACK1111 ---help---1212 Connection tracking keeps a record of what packets have passed1313 through your machine, in order to figure out how they are related···21212222config IP6_NF_QUEUE2323 tristate "IP6 Userspace queueing via NETLINK (OBSOLETE)"2424+ depends on INET && IPV6 && NETFILTER && EXPERIMENTAL2425 ---help---25262627 This option adds a queue handler to the kernel for IPv6···42414342config IP6_NF_IPTABLES4443 tristate "IP6 tables support (required for filtering)"4545- depends on NETFILTER_XTABLES4444+ depends on INET && IPV6 && EXPERIMENTAL && NETFILTER_XTABLES4645 help4746 ip6tables is a general, extensible packet identification framework.4847 Currently only the packet filtering and packet mangling subsystem
···128128 return -37;129129}130130131131-static int nr_set_mac_address(struct net_device *dev, void *addr)131131+static int __must_check nr_set_mac_address(struct net_device *dev, void *addr)132132{133133 struct sockaddr *sa = addr;134134+ int err;134135135135- if (dev->flags & IFF_UP)136136+ if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len))137137+ return 0;138138+139139+ if (dev->flags & IFF_UP) {140140+ err = ax25_listen_register((ax25_address *)sa->sa_data, NULL);141141+ if (err)142142+ return err;143143+136144 ax25_listen_release((ax25_address *)dev->dev_addr, NULL);145145+ }137146138147 memcpy(dev->dev_addr, sa->sa_data, dev->addr_len);139139-140140- if (dev->flags & IFF_UP)141141- ax25_listen_register((ax25_address *)dev->dev_addr, NULL);142148143149 return 0;144150}145151146152static int nr_open(struct net_device *dev)147153{154154+ int err;155155+156156+ err = ax25_listen_register((ax25_address *)dev->dev_addr, NULL);157157+ if (err)158158+ return err;159159+148160 netif_start_queue(dev);149149- ax25_listen_register((ax25_address *)dev->dev_addr, NULL);161161+150162 return 0;151163}152164
+13-6
net/netrom/nr_route.c
···8787 * Add a new route to a node, and in the process add the node and the8888 * neighbour if it is new.8989 */9090-static int nr_add_node(ax25_address *nr, const char *mnemonic, ax25_address *ax25,9191- ax25_digi *ax25_digi, struct net_device *dev, int quality, int obs_count)9090+static int __must_check nr_add_node(ax25_address *nr, const char *mnemonic,9191+ ax25_address *ax25, ax25_digi *ax25_digi, struct net_device *dev,9292+ int quality, int obs_count)9293{9394 struct nr_node *nr_node;9495 struct nr_neigh *nr_neigh;···407406/*408407 * Lock a neighbour with a quality.409408 */410410-static int nr_add_neigh(ax25_address *callsign, ax25_digi *ax25_digi, struct net_device *dev, unsigned int quality)409409+static int __must_check nr_add_neigh(ax25_address *callsign,410410+ ax25_digi *ax25_digi, struct net_device *dev, unsigned int quality)411411{412412 struct nr_neigh *nr_neigh;413413···779777 nr_src = (ax25_address *)(skb->data + 0);780778 nr_dest = (ax25_address *)(skb->data + 7);781779782782- if (ax25 != NULL)783783- nr_add_node(nr_src, "", &ax25->dest_addr, ax25->digipeat,784784- ax25->ax25_dev->dev, 0, sysctl_netrom_obsolescence_count_initialiser);780780+ if (ax25 != NULL) {781781+ ret = nr_add_node(nr_src, "", &ax25->dest_addr, ax25->digipeat,782782+ ax25->ax25_dev->dev, 0,783783+ sysctl_netrom_obsolescence_count_initialiser);784784+ if (ret)785785+ return ret;786786+ }785787786788 if ((dev = nr_dev_get(nr_dest)) != NULL) { /* Its for me */787789 if (ax25 == NULL) /* Its from me */···850844 ret = (nr_neigh->ax25 != NULL);851845 nr_node_unlock(nr_node);852846 nr_node_put(nr_node);847847+853848 return ret;854849}855850