···150150 Unit: revolution/min (RPM)151151 RW152152153153+fan[1-*]_max Fan maximum value154154+ Unit: revolution/min (RPM)155155+ Only rarely supported by the hardware.156156+ RW157157+153158fan[1-*]_input Fan input value.154159 Unit: revolution/min (RPM)155160 RO···395390in[0-*]_min_alarm396391in[0-*]_max_alarm397392fan[1-*]_min_alarm393393+fan[1-*]_max_alarm398394temp[1-*]_min_alarm399395temp[1-*]_max_alarm400396temp[1-*]_crit_alarm
+79-24
Documentation/input/multi-touch-protocol.txt
···1818Anonymous finger details are sent sequentially as separate packets of ABS1919events. Only the ABS_MT events are recognized as part of a finger2020packet. The end of a packet is marked by calling the input_mt_sync()2121-function, which generates a SYN_MT_REPORT event. The end of multi-touch2222-transfer is marked by calling the usual input_sync() function.2121+function, which generates a SYN_MT_REPORT event. This instructs the2222+receiver to accept the data for the current finger and prepare to receive2323+another. The end of a multi-touch transfer is marked by calling the usual2424+input_sync() function. This instructs the receiver to act upon events2525+accumulated since last EV_SYN/SYN_REPORT and prepare to receive a new2626+set of events/packets.23272428A set of ABS_MT events with the desired properties is defined. The events2529are divided into categories, to allow for partial implementation. The···3127ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked. If the3228device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide the size3329of the approaching finger. Anisotropy and direction may be specified with3434-ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. Devices with3535-more granular information may specify general shapes as blobs, i.e., as a3636-sequence of rectangular shapes grouped together by an3737-ABS_MT_BLOB_ID. Finally, the ABS_MT_TOOL_TYPE may be used to specify3838-whether the touching tool is a finger or a pen or something else.3030+ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. The3131+ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a3232+finger or a pen or something else. Devices with more granular information3333+may specify general shapes as blobs, i.e., as a sequence of rectangular3434+shapes grouped together by an ABS_MT_BLOB_ID. Finally, for the few devices3535+that currently support it, the ABS_MT_TRACKING_ID event may be used to3636+report finger tracking from hardware [5].3737+3838+Here is what a minimal event sequence for a two-finger touch would look3939+like:4040+4141+ ABS_MT_TOUCH_MAJOR4242+ ABS_MT_POSITION_X4343+ ABS_MT_POSITION_Y4444+ SYN_MT_REPORT4545+ ABS_MT_TOUCH_MAJOR4646+ ABS_MT_POSITION_X4747+ ABS_MT_POSITION_Y4848+ SYN_MT_REPORT4949+ SYN_REPORT395040514152Event Semantics···63446445The length of the major axis of the contact. The length should be given in6546surface units. If the surface has an X times Y resolution, the largest6666-possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal.4747+possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal [4].67486849ABS_MT_TOUCH_MINOR69507051The length, in surface units, of the minor axis of the contact. If the7171-contact is circular, this event can be omitted.5252+contact is circular, this event can be omitted [4].72537354ABS_MT_WIDTH_MAJOR74557556The length, in surface units, of the major axis of the approaching7657tool. This should be understood as the size of the tool itself. The7758orientation of the contact and the approaching tool are assumed to be the7878-same.5959+same [4].79608061ABS_MT_WIDTH_MINOR81628263The length, in surface units, of the minor axis of the approaching8383-tool. Omit if circular.6464+tool. Omit if circular [4].84658566The above four values can be used to derive additional information about8667the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates···89709071ABS_MT_ORIENTATION91729292-The orientation of the ellipse. The value should describe half a revolution9393-clockwise around the touch center. The scale of the value is arbitrary, but9494-zero should be returned for an ellipse aligned along the Y axis of the9595-surface. As an example, an index finger placed straight onto the axis could9696-return zero orientation, something negative when twisted to the left, and9797-something positive when twisted to the right. This value can be omitted if9898-the touching object is circular, or if the information is not available in9999-the kernel driver.7373+The orientation of the ellipse. The value should describe a signed quarter7474+of a revolution clockwise around the touch center. The signed value range7575+is arbitrary, but zero should be returned for a finger aligned along the Y7676+axis of the surface, a negative value when finger is turned to the left, and7777+a positive value when finger turned to the right. When completely aligned with7878+the X axis, the range max should be returned. Orientation can be omitted7979+if the touching object is circular, or if the information is not available8080+in the kernel driver. Partial orientation support is possible if the device8181+can distinguish between the two axis, but not (uniquely) any values in8282+between. In such cases, the range of ABS_MT_ORIENTATION should be [0, 1]8383+[4].1008410185ABS_MT_POSITION_X10286···1209812199The BLOB_ID groups several packets together into one arbitrarily shaped122100contact. This is a low-level anonymous grouping, and should not be confused123123-with the high-level contactID, explained below. Most kernel drivers will124124-not have this capability, and can safely omit the event.101101+with the high-level trackingID [5]. Most kernel drivers will not have blob102102+capability, and can safely omit the event.103103+104104+ABS_MT_TRACKING_ID105105+106106+The TRACKING_ID identifies an initiated contact throughout its life cycle107107+[5]. There are currently only a few devices that support it, so this event108108+should normally be omitted.109109+110110+111111+Event Computation112112+-----------------113113+114114+The flora of different hardware unavoidably leads to some devices fitting115115+better to the MT protocol than others. To simplify and unify the mapping,116116+this section gives recipes for how to compute certain events.117117+118118+For devices reporting contacts as rectangular shapes, signed orientation119119+cannot be obtained. Assuming X and Y are the lengths of the sides of the120120+touching rectangle, here is a simple formula that retains the most121121+information possible:122122+123123+ ABS_MT_TOUCH_MAJOR := max(X, Y)124124+ ABS_MT_TOUCH_MINOR := min(X, Y)125125+ ABS_MT_ORIENTATION := bool(X > Y)126126+127127+The range of ABS_MT_ORIENTATION should be set to [0, 1], to indicate that128128+the device can distinguish between a finger along the Y axis (0) and a129129+finger along the X axis (1).125130126131127132Finger Tracking···158109anonymous contacts currently on the surface. The order in which the packets159110appear in the event stream is not important.160111161161-The process of finger tracking, i.e., to assign a unique contactID to each112112+The process of finger tracking, i.e., to assign a unique trackingID to each162113initiated contact on the surface, is left to user space; preferably the163163-multi-touch X driver [3]. In that driver, the contactID stays the same and114114+multi-touch X driver [3]. In that driver, the trackingID stays the same and164115unique until the contact vanishes (when the finger leaves the surface). The165116problem of assigning a set of anonymous fingers to a set of identified166117fingers is a euclidian bipartite matching problem at each event update, and167118relies on a sufficiently rapid update rate.119119+120120+There are a few devices that support trackingID in hardware. User space can121121+make use of these native identifiers to reduce bandwidth and cpu usage.122122+168123169124Notes170125-----···189136time of writing (April 2009), the MT protocol is not yet merged, and the190137prototype implements finger matching, basic mouse support and two-finger191138scrolling. The project aims at improving the quality of current multi-touch192192-functionality available in the synaptics X driver, and in addition139139+functionality available in the Synaptics X driver, and in addition193140implement more advanced gestures.141141+[4] See the section on event computation.142142+[5] See the section on finger tracking.
+4
Documentation/kernel-parameters.txt
···15351535 register save and restore. The kernel will only save15361536 legacy floating-point registers on task switch.1537153715381538+ noxsave [BUGS=X86] Disables x86 extended register state save15391539+ and restore using xsave. The kernel will fallback to15401540+ enabling legacy floating-point and sse state.15411541+15381542 nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or15391543 wfi(ARM) instruction doesn't work correctly and not to15401544 use it. This is also useful when using JTAG debugger.
+1
Documentation/sound/alsa/HD-Audio-Models.txt
···334334 ref-no-jd Reference board without HP/Mic jack detection335335 3stack D965 3stack336336 5stack D965 5stack + SPDIF337337+ 5stack-no-fp D965 5stack without front panel337338 dell-3stack Dell Dimension E520338339 dell-bios Fixes with Dell BIOS setup339340 auto BIOS setup (default)
+5
Documentation/sound/alsa/Procfile.txt
···104104 When this value is greater than 1, the driver will show the105105 stack trace additionally. This may help the debugging.106106107107+ Since 2.6.30, this option also enables the hwptr check using108108+ jiffies. This detects spontaneous invalid pointer callback109109+ values, but can be lead to too much corrections for a (mostly110110+ buggy) hardware that doesn't give smooth pointer updates.111111+107112card*/pcm*/sub*/info108113 The general information of this PCM sub-stream.109114
+21-12
MAINTAINERS
···434434435435AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER436436P: Thomas Dahlmann437437-M: thomas.dahlmann@amd.com437437+M: dahlmann.thomas@arcor.de438438L: linux-geode@lists.infradead.org (moderated for non-subscribers)439439S: Supported440440F: drivers/usb/gadget/amd5536udc.*···624624L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)625625T: git git://gitorious.org/linux-gemini/mainline.git626626S: Maintained627627+F: arch/arm/mach-gemini/627628628629ARM/EBSA110 MACHINE SUPPORT629630P: Russell King···651650M: paulius.zaleckas@teltonika.lt652651L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)653652S: Maintained653653+F: arch/arm/mm/*-fa*654654655655ARM/FOOTBRIDGE ARCHITECTURE656656P: Russell King···11341132F: include/linux/bfs_fs.h1135113311361134BLACKFIN ARCHITECTURE11371137-P: Bryan Wu11381138-M: cooloney@kernel.org11351135+P: Mike Frysinger11361136+M: vapier@gentoo.org11391137L: uclinux-dist-devel@blackfin.uclinux.org11401138W: http://blackfin.uclinux.org11411139S: Supported11421140F: arch/blackfin/1143114111441142BLACKFIN EMAC DRIVER11451145-P: Bryan Wu11461146-M: cooloney@kernel.org11471147-L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)11431143+P: Michael Hennerich11441144+M: michael.hennerich@analog.com11451145+L: uclinux-dist-devel@blackfin.uclinux.org11481146W: http://blackfin.uclinux.org11491147S: Supported11501148F: drivers/net/bfin_mac.*···11521150BLACKFIN RTC DRIVER11531151P: Mike Frysinger11541152M: vapier.adi@gmail.com11551155-L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)11531153+L: uclinux-dist-devel@blackfin.uclinux.org11561154W: http://blackfin.uclinux.org11571155S: Supported11581156F: drivers/rtc/rtc-bfin.c···11601158BLACKFIN SERIAL DRIVER11611159P: Sonic Zhang11621160M: sonic.zhang@analog.com11631163-L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)11611161+L: uclinux-dist-devel@blackfin.uclinux.org11641162W: http://blackfin.uclinux.org11651163S: Supported11661164F: drivers/serial/bfin_5xx.c···11681166BLACKFIN WATCHDOG DRIVER11691167P: Mike Frysinger11701168M: vapier.adi@gmail.com11711171-L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)11691169+L: uclinux-dist-devel@blackfin.uclinux.org11721170W: http://blackfin.uclinux.org11731171S: Supported11741172F: drivers/watchdog/bfin_wdt.c···11761174BLACKFIN I2C TWI DRIVER11771175P: Sonic Zhang11781176M: sonic.zhang@analog.com11791179-L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)11771177+L: uclinux-dist-devel@blackfin.uclinux.org11801178W: http://blackfin.uclinux.org/11811179S: Supported11821180F: drivers/i2c/busses/i2c-bfin-twi.c···15411539W: http://www.fi.muni.cz/~kas/cosa/15421540S: Maintained15431541F: drivers/net/wan/cosa*15421542+15431543+CPMAC ETHERNET DRIVER15441544+P: Florian Fainelli15451545+M: florian@openwrt.org15461546+L: netdev@vger.kernel.org15471547+S: Maintained15481548+F: drivers/net/cpmac.c1544154915451550CPU FREQUENCY DRIVERS15461551P: Dave Jones···1980197119811972EDAC-E752X19821973P: Mark Gross19831983-P: Doug Thompson19841974M: mark.gross@intel.com19751975+P: Doug Thompson19851976M: dougthompson@xmission.com19861977L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)19871978W: bluesmoke.sourceforge.net···22582249M: leoli@freescale.com22592250P: Zhang Wei22602251M: zw@zh-kernel.org22612261-L: linuxppc-embedded@ozlabs.org22522252+L: linuxppc-dev@ozlabs.org22622253L: linux-kernel@vger.kernel.org22632254S: Maintained22642255F: drivers/dma/fsldma.*
···182182CONFIG_MACH_DB88F6281_BP=y183183CONFIG_MACH_RD88F6192_NAS=y184184CONFIG_MACH_RD88F6281=y185185+CONFIG_MACH_MV88F6281GTW_GE=y185186CONFIG_MACH_SHEEVAPLUG=y186187CONFIG_MACH_TS219=y187188CONFIG_PLAT_ORION=y···271270#272271# CPU Power Management273272#274274-# CONFIG_CPU_IDLE is not set273273+CONFIG_CPU_IDLE=y274274+CONFIG_CPU_IDLE_GOV_LADDER=y275275+CONFIG_CPU_IDLE_GOV_MENU=y275276276277#277278# Floating point emulation
+2-1
arch/arm/configs/orion5x_defconfig
···903903CONFIG_LEGACY_PTYS=y904904CONFIG_LEGACY_PTY_COUNT=16905905# CONFIG_IPMI_HANDLER is not set906906-# CONFIG_HW_RANDOM is not set906906+CONFIG_HW_RANDOM=m907907+CONFIG_HW_RANDOM_TIMERIOMEM=m907908# CONFIG_R3964 is not set908909# CONFIG_APPLICOM is not set909910# CONFIG_RAW_DRIVER is not set
···4444 : "cc");4545}46464747+static inline void atomic_add(int i, atomic_t *v)4848+{4949+ unsigned long tmp;5050+ int result;5151+5252+ __asm__ __volatile__("@ atomic_add\n"5353+"1: ldrex %0, [%2]\n"5454+" add %0, %0, %3\n"5555+" strex %1, %0, [%2]\n"5656+" teq %1, #0\n"5757+" bne 1b"5858+ : "=&r" (result), "=&r" (tmp)5959+ : "r" (&v->counter), "Ir" (i)6060+ : "cc");6161+}6262+4763static inline int atomic_add_return(int i, atomic_t *v)4864{4965 unsigned long tmp;5066 int result;6767+6868+ smp_mb();51695270 __asm__ __volatile__("@ atomic_add_return\n"5371"1: ldrex %0, [%2]\n"···7759 : "r" (&v->counter), "Ir" (i)7860 : "cc");79616262+ smp_mb();6363+8064 return result;6565+}6666+6767+static inline void atomic_sub(int i, atomic_t *v)6868+{6969+ unsigned long tmp;7070+ int result;7171+7272+ __asm__ __volatile__("@ atomic_sub\n"7373+"1: ldrex %0, [%2]\n"7474+" sub %0, %0, %3\n"7575+" strex %1, %0, [%2]\n"7676+" teq %1, #0\n"7777+" bne 1b"7878+ : "=&r" (result), "=&r" (tmp)7979+ : "r" (&v->counter), "Ir" (i)8080+ : "cc");8181}82828383static inline int atomic_sub_return(int i, atomic_t *v)8484{8585 unsigned long tmp;8686 int result;8787+8888+ smp_mb();87898890 __asm__ __volatile__("@ atomic_sub_return\n"8991"1: ldrex %0, [%2]\n"···11577 : "r" (&v->counter), "Ir" (i)11678 : "cc");117798080+ smp_mb();8181+11882 return result;11983}1208412185static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)12286{12387 unsigned long oldval, res;8888+8989+ smp_mb();1249012591 do {12692 __asm__ __volatile__("@ atomic_cmpxchg\n"···13694 : "r" (&ptr->counter), "Ir" (old), "r" (new)13795 : "cc");13896 } while (res);9797+9898+ smp_mb();13999140100 return oldval;141101}···179135180136 return val;181137}138138+#define atomic_add(i, v) (void) atomic_add_return(i, v)182139183140static inline int atomic_sub_return(int i, atomic_t *v)184141{···193148194149 return val;195150}151151+#define atomic_sub(i, v) (void) atomic_sub_return(i, v)196152197153static inline int atomic_cmpxchg(atomic_t *v, int old, int new)198154{···233187}234188#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)235189236236-#define atomic_add(i, v) (void) atomic_add_return(i, v)237237-#define atomic_inc(v) (void) atomic_add_return(1, v)238238-#define atomic_sub(i, v) (void) atomic_sub_return(i, v)239239-#define atomic_dec(v) (void) atomic_sub_return(1, v)190190+#define atomic_inc(v) atomic_add(1, v)191191+#define atomic_dec(v) atomic_sub(1, v)240192241193#define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0)242194#define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0)···244200245201#define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0)246202247247-/* Atomic operations are already serializing on ARM */248248-#define smp_mb__before_atomic_dec() barrier()249249-#define smp_mb__after_atomic_dec() barrier()250250-#define smp_mb__before_atomic_inc() barrier()251251-#define smp_mb__after_atomic_inc() barrier()203203+#define smp_mb__before_atomic_dec() smp_mb()204204+#define smp_mb__after_atomic_dec() smp_mb()205205+#define smp_mb__before_atomic_inc() smp_mb()206206+#define smp_mb__after_atomic_inc() smp_mb()252207253208#include <asm-generic/atomic.h>254209#endif
-3
arch/arm/include/asm/flat.h
···55#ifndef __ARM_FLAT_H__66#define __ARM_FLAT_H__7788-/* An odd number of words will be pushed after this alignment, so99- deliberately misalign the value. */1010-#define flat_stack_align(sp) sp = (void *)(((unsigned long)(sp) - 4) | 4)118#define flat_argvp_envp_on_stack() 1129#define flat_old_ram_flag(flags) (flags)1310#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
···248248 unsigned int tmp;249249#endif250250251251+ smp_mb();252252+251253 switch (size) {252254#if __LINUX_ARM_ARCH__ >= 6253255 case 1:···309307 __bad_xchg(ptr, size), ret = 0;310308 break;311309 }310310+ smp_mb();312311313312 return ret;314313}···318315extern void enable_hlt(void);319316320317#include <asm-generic/cmpxchg-local.h>318318+319319+#if __LINUX_ARM_ARCH__ < 6320320+321321+#ifdef CONFIG_SMP322322+#error "SMP is not supported on this platform"323323+#endif321324322325/*323326 * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make···337328#ifndef CONFIG_SMP338329#include <asm-generic/cmpxchg.h>339330#endif331331+332332+#else /* __LINUX_ARM_ARCH__ >= 6 */333333+334334+extern void __bad_cmpxchg(volatile void *ptr, int size);335335+336336+/*337337+ * cmpxchg only support 32-bits operands on ARMv6.338338+ */339339+340340+static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,341341+ unsigned long new, int size)342342+{343343+ unsigned long oldval, res;344344+345345+ switch (size) {346346+#ifdef CONFIG_CPU_32v6K347347+ case 1:348348+ do {349349+ asm volatile("@ __cmpxchg1\n"350350+ " ldrexb %1, [%2]\n"351351+ " mov %0, #0\n"352352+ " teq %1, %3\n"353353+ " strexbeq %0, %4, [%2]\n"354354+ : "=&r" (res), "=&r" (oldval)355355+ : "r" (ptr), "Ir" (old), "r" (new)356356+ : "memory", "cc");357357+ } while (res);358358+ break;359359+ case 2:360360+ do {361361+ asm volatile("@ __cmpxchg1\n"362362+ " ldrexh %1, [%2]\n"363363+ " mov %0, #0\n"364364+ " teq %1, %3\n"365365+ " strexheq %0, %4, [%2]\n"366366+ : "=&r" (res), "=&r" (oldval)367367+ : "r" (ptr), "Ir" (old), "r" (new)368368+ : "memory", "cc");369369+ } while (res);370370+ break;371371+#endif /* CONFIG_CPU_32v6K */372372+ case 4:373373+ do {374374+ asm volatile("@ __cmpxchg4\n"375375+ " ldrex %1, [%2]\n"376376+ " mov %0, #0\n"377377+ " teq %1, %3\n"378378+ " strexeq %0, %4, [%2]\n"379379+ : "=&r" (res), "=&r" (oldval)380380+ : "r" (ptr), "Ir" (old), "r" (new)381381+ : "memory", "cc");382382+ } while (res);383383+ break;384384+ default:385385+ __bad_cmpxchg(ptr, size);386386+ oldval = 0;387387+ }388388+389389+ return oldval;390390+}391391+392392+static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old,393393+ unsigned long new, int size)394394+{395395+ unsigned long ret;396396+397397+ smp_mb();398398+ ret = __cmpxchg(ptr, old, new, size);399399+ smp_mb();400400+401401+ return ret;402402+}403403+404404+#define cmpxchg(ptr,o,n) \405405+ ((__typeof__(*(ptr)))__cmpxchg_mb((ptr), \406406+ (unsigned long)(o), \407407+ (unsigned long)(n), \408408+ sizeof(*(ptr))))409409+410410+static inline unsigned long __cmpxchg_local(volatile void *ptr,411411+ unsigned long old,412412+ unsigned long new, int size)413413+{414414+ unsigned long ret;415415+416416+ switch (size) {417417+#ifndef CONFIG_CPU_32v6K418418+ case 1:419419+ case 2:420420+ ret = __cmpxchg_local_generic(ptr, old, new, size);421421+ break;422422+#endif /* !CONFIG_CPU_32v6K */423423+ default:424424+ ret = __cmpxchg(ptr, old, new, size);425425+ }426426+427427+ return ret;428428+}429429+430430+#define cmpxchg_local(ptr,o,n) \431431+ ((__typeof__(*(ptr)))__cmpxchg_local((ptr), \432432+ (unsigned long)(o), \433433+ (unsigned long)(n), \434434+ sizeof(*(ptr))))435435+436436+#ifdef CONFIG_CPU_32v6K437437+438438+/*439439+ * Note : ARMv7-M (currently unsupported by Linux) does not support440440+ * ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should441441+ * not be allowed to use __cmpxchg64.442442+ */443443+static inline unsigned long long __cmpxchg64(volatile void *ptr,444444+ unsigned long long old,445445+ unsigned long long new)446446+{447447+ register unsigned long long oldval asm("r0");448448+ register unsigned long long __old asm("r2") = old;449449+ register unsigned long long __new asm("r4") = new;450450+ unsigned long res;451451+452452+ do {453453+ asm volatile(454454+ " @ __cmpxchg8\n"455455+ " ldrexd %1, %H1, [%2]\n"456456+ " mov %0, #0\n"457457+ " teq %1, %3\n"458458+ " teqeq %H1, %H3\n"459459+ " strexdeq %0, %4, %H4, [%2]\n"460460+ : "=&r" (res), "=&r" (oldval)461461+ : "r" (ptr), "Ir" (__old), "r" (__new)462462+ : "memory", "cc");463463+ } while (res);464464+465465+ return oldval;466466+}467467+468468+static inline unsigned long long __cmpxchg64_mb(volatile void *ptr,469469+ unsigned long long old,470470+ unsigned long long new)471471+{472472+ unsigned long long ret;473473+474474+ smp_mb();475475+ ret = __cmpxchg64(ptr, old, new);476476+ smp_mb();477477+478478+ return ret;479479+}480480+481481+#define cmpxchg64(ptr,o,n) \482482+ ((__typeof__(*(ptr)))__cmpxchg64_mb((ptr), \483483+ (unsigned long long)(o), \484484+ (unsigned long long)(n)))485485+486486+#define cmpxchg64_local(ptr,o,n) \487487+ ((__typeof__(*(ptr)))__cmpxchg64((ptr), \488488+ (unsigned long long)(o), \489489+ (unsigned long long)(n)))490490+491491+#else /* !CONFIG_CPU_32v6K */492492+493493+#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))494494+495495+#endif /* CONFIG_CPU_32v6K */496496+497497+#endif /* __LINUX_ARM_ARCH__ >= 6 */340498341499#endif /* __ASSEMBLY__ */342500
+9
arch/arm/kernel/elf.c
···7878 return 1;7979 if (cpu_architecture() < CPU_ARCH_ARMv6)8080 return 1;8181+#if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)8282+ /*8383+ * If we have support for OABI programs, we can never allow NX8484+ * support - our signal syscall restart mechanism relies upon8585+ * being able to execute code placed on the user stack.8686+ */8787+ return 1;8888+#else8189 return 0;9090+#endif8291}8392EXPORT_SYMBOL(arm_elf_read_implies_exec);
···2020 Say 'Y' here if you want your kernel to support the2121 Marvell RD-88F6281 Reference Board.22222323+config MACH_MV88F6281GTW_GE2424+ bool "Marvell 88F6281 GTW GE Board"2525+ help2626+ Say 'Y' here if you want your kernel to support the2727+ Marvell 88F6281 GTW GE Board.2828+2329config MACH_SHEEVAPLUG2430 bool "Marvell SheevaPlug Reference Board"2531 help
···1515struct mv643xx_eth_platform_data;1616struct mv_sata_platform_data;1717struct mvsdio_platform_data;1818+struct mtd_partition;18191920/*2021 * Basic Kirkwood init functions used early by machine-setup.···26252726extern struct mbus_dram_target_info kirkwood_mbus_dram_info;2827void kirkwood_setup_cpu_mbus(void);2929-void kirkwood_setup_sram_win(u32 base, u32 size);30283129void kirkwood_pcie_id(u32 *dev, u32 *rev);3230···4040void kirkwood_i2c_init(void);4141void kirkwood_uart0_init(void);4242void kirkwood_uart1_init(void);4343+void kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, int delay);43444445extern int kirkwood_tclk;4546extern struct sys_timer kirkwood_timer;46474848+#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)47494850#endif
+96
arch/arm/mach-kirkwood/cpuidle.c
···11+/*22+ * arch/arm/mach-kirkwood/cpuidle.c33+ *44+ * CPU idle Marvell Kirkwood SoCs55+ *66+ * This file is licensed under the terms of the GNU General Public77+ * License version 2. This program is licensed "as is" without any88+ * warranty of any kind, whether express or implied.99+ *1010+ * The cpu idle uses wait-for-interrupt and DDR self refresh in order1111+ * to implement two idle states -1212+ * #1 wait-for-interrupt1313+ * #2 wait-for-interrupt and DDR self refresh1414+ */1515+1616+#include <linux/kernel.h>1717+#include <linux/init.h>1818+#include <linux/platform_device.h>1919+#include <linux/cpuidle.h>2020+#include <linux/io.h>2121+#include <asm/proc-fns.h>2222+#include <mach/kirkwood.h>2323+2424+#define KIRKWOOD_MAX_STATES 22525+2626+static struct cpuidle_driver kirkwood_idle_driver = {2727+ .name = "kirkwood_idle",2828+ .owner = THIS_MODULE,2929+};3030+3131+static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device);3232+3333+/* Actual code that puts the SoC in different idle states */3434+static int kirkwood_enter_idle(struct cpuidle_device *dev,3535+ struct cpuidle_state *state)3636+{3737+ struct timeval before, after;3838+ int idle_time;3939+4040+ local_irq_disable();4141+ do_gettimeofday(&before);4242+ if (state == &dev->states[0])4343+ /* Wait for interrupt state */4444+ cpu_do_idle();4545+ else if (state == &dev->states[1]) {4646+ /*4747+ * Following write will put DDR in self refresh.4848+ * Note that we have 256 cycles before DDR puts it4949+ * self in self-refresh, so the wait-for-interrupt5050+ * call afterwards won't get the DDR from self refresh5151+ * mode.5252+ */5353+ writel(0x7, DDR_OPERATION_BASE);5454+ cpu_do_idle();5555+ }5656+ do_gettimeofday(&after);5757+ local_irq_enable();5858+ idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +5959+ (after.tv_usec - before.tv_usec);6060+ return idle_time;6161+}6262+6363+/* Initialize CPU idle by registering the idle states */6464+static int kirkwood_init_cpuidle(void)6565+{6666+ struct cpuidle_device *device;6767+6868+ cpuidle_register_driver(&kirkwood_idle_driver);6969+7070+ device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id());7171+ device->state_count = KIRKWOOD_MAX_STATES;7272+7373+ /* Wait for interrupt state */7474+ device->states[0].enter = kirkwood_enter_idle;7575+ device->states[0].exit_latency = 1;7676+ device->states[0].target_residency = 10000;7777+ device->states[0].flags = CPUIDLE_FLAG_TIME_VALID;7878+ strcpy(device->states[0].name, "WFI");7979+ strcpy(device->states[0].desc, "Wait for interrupt");8080+8181+ /* Wait for interrupt and DDR self refresh state */8282+ device->states[1].enter = kirkwood_enter_idle;8383+ device->states[1].exit_latency = 10;8484+ device->states[1].target_residency = 10000;8585+ device->states[1].flags = CPUIDLE_FLAG_TIME_VALID;8686+ strcpy(device->states[1].name, "DDR SR");8787+ strcpy(device->states[1].desc, "WFI and DDR Self Refresh");8888+8989+ if (cpuidle_register_device(device)) {9090+ printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n");9191+ return -EIO;9292+ }9393+ return 0;9494+}9595+9696+device_initcall(kirkwood_init_cpuidle);
···1212 * possible, we make the following compromise:1313 *1414 * 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT)1515- * 2. DRIVE strength definitions redefined to include the reserved bit101515+ * 2. DRIVE strength definitions redefined to include the reserved bit1616+ * - the reserved bit differs between pxa168 and pxa910, and the1717+ * MFP_DRIVE_* macros are individually defined in mfp-pxa{168,910}.h1618 * 3. Override MFP_CFG() and MFP_CFG_DRV()1719 * 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X()1820 */1919-2020-#define MFP_DRIVE_VERY_SLOW (0x0 << 13)2121-#define MFP_DRIVE_SLOW (0x2 << 13)2222-#define MFP_DRIVE_MEDIUM (0x4 << 13)2323-#define MFP_DRIVE_FAST (0x8 << 13)24212522#undef MFP_CFG2623#undef MFP_CFG_DRV
···1313/**1414 * init_gpio_reset() - register GPIO as reset generator1515 * @gpio: gpio nr1616- * @output: set gpio as out/low instead of input during normal work1616+ * @output: set gpio as output instead of input during normal work1717+ * @level: output level1718 */1818-extern int init_gpio_reset(int gpio, int output);1919+extern int init_gpio_reset(int gpio, int output, int level);19202021#endif /* __ASM_ARCH_RESET_H */
+6
arch/arm/mach-pxa/mfp-pxa2xx.c
···322322#ifdef CONFIG_PM323323static unsigned long saved_gafr[2][4];324324static unsigned long saved_gpdr[4];325325+static unsigned long saved_pgsr[4];325326326327static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)327328{···333332 saved_gafr[0][i] = GAFR_L(i);334333 saved_gafr[1][i] = GAFR_U(i);335334 saved_gpdr[i] = GPDR(i * 32);335335+ saved_pgsr[i] = PGSR(i);336336337337 GPDR(i * 32) = gpdr_lpm[i];338338 }···348346 GAFR_L(i) = saved_gafr[0][i];349347 GAFR_U(i) = saved_gafr[1][i];350348 GPDR(i * 32) = saved_gpdr[i];349349+ PGSR(i) = saved_pgsr[i];351350 }352351 PSSR = PSSR_RDH | PSSR_PH;353352 return 0;···376373377374 if (cpu_is_pxa27x())378375 pxa27x_mfp_init();376376+377377+ /* clear RDH bit to enable GPIO receivers after reset/sleep exit */378378+ PSSR = PSSR_RDH;379379380380 /* initialize gafr_run[], pgsr_lpm[] from existing values */381381 for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
···20202121static int reset_gpio = -1;22222323-int init_gpio_reset(int gpio, int output)2323+int init_gpio_reset(int gpio, int output, int level)2424{2525 int rc;2626···3131 }32323333 if (output)3434- rc = gpio_direction_output(gpio, 0);3434+ rc = gpio_direction_output(gpio, level);3535 else3636 rc = gpio_direction_input(gpio);3737 if (rc) {
···897897 gpio_set_wake(MFP_PIN_GPIO1, 1);898898 /* We can't pass to gpio-keys since it will drop the Reset altfunc */899899900900- init_gpio_reset(TOSA_GPIO_ON_RESET, 0);900900+ init_gpio_reset(TOSA_GPIO_ON_RESET, 0, 0);901901902902 pm_power_off = tosa_poweroff;903903 arm_pm_restart = tosa_restart;
+81-125
arch/arm/plat-orion/gpio.c
···1515#include <linux/spinlock.h>1616#include <linux/bitops.h>1717#include <linux/io.h>1818-#include <asm/gpio.h>1818+#include <linux/gpio.h>19192020static DEFINE_SPINLOCK(gpio_lock);2121-static const char *gpio_label[GPIO_MAX]; /* non null for allocated GPIOs */2221static unsigned long gpio_valid_input[BITS_TO_LONGS(GPIO_MAX)];2322static unsigned long gpio_valid_output[BITS_TO_LONGS(GPIO_MAX)];2423···4546 writel(u, GPIO_OUT(pin));4647}47484949+static inline void __set_blinking(unsigned pin, int blink)5050+{5151+ u32 u;5252+5353+ u = readl(GPIO_BLINK_EN(pin));5454+ if (blink)5555+ u |= 1 << (pin & 31);5656+ else5757+ u &= ~(1 << (pin & 31));5858+ writel(u, GPIO_BLINK_EN(pin));5959+}6060+6161+static inline int orion_gpio_is_valid(unsigned pin, int mode)6262+{6363+ if (pin < GPIO_MAX) {6464+ if ((mode & GPIO_INPUT_OK) && !test_bit(pin, gpio_valid_input))6565+ goto err_out;6666+ if ((mode & GPIO_OUTPUT_OK) && !test_bit(pin, gpio_valid_output))6767+ goto err_out;6868+ return true;6969+ }7070+7171+err_out:7272+ pr_debug("%s: invalid GPIO %d\n", __func__, pin);7373+ return false;7474+}48754976/*5077 * GENERIC_GPIO primitives.5178 */5252-int gpio_direction_input(unsigned pin)7979+static int orion_gpio_direction_input(struct gpio_chip *chip, unsigned pin)5380{5481 unsigned long flags;55825656- if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_input)) {5757- pr_debug("%s: invalid GPIO %d\n", __func__, pin);8383+ if (!orion_gpio_is_valid(pin, GPIO_INPUT_OK))5884 return -EINVAL;5959- }60856186 spin_lock_irqsave(&gpio_lock, flags);62876363- /*6464- * Some callers might not have used gpio_request(),6565- * so flag this pin as requested now.6666- */6767- if (gpio_label[pin] == NULL)6868- gpio_label[pin] = "?";6969-7070- /*7171- * Configure GPIO direction.7272- */8888+ /* Configure GPIO direction. */7389 __set_direction(pin, 1);74907591 spin_unlock_irqrestore(&gpio_lock, flags);76927793 return 0;7894}7979-EXPORT_SYMBOL(gpio_direction_input);80958181-int gpio_direction_output(unsigned pin, int value)8282-{8383- unsigned long flags;8484- u32 u;8585-8686- if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_output)) {8787- pr_debug("%s: invalid GPIO %d\n", __func__, pin);8888- return -EINVAL;8989- }9090-9191- spin_lock_irqsave(&gpio_lock, flags);9292-9393- /*9494- * Some callers might not have used gpio_request(),9595- * so flag this pin as requested now.9696- */9797- if (gpio_label[pin] == NULL)9898- gpio_label[pin] = "?";9999-100100- /*101101- * Disable blinking.102102- */103103- u = readl(GPIO_BLINK_EN(pin));104104- u &= ~(1 << (pin & 31));105105- writel(u, GPIO_BLINK_EN(pin));106106-107107- /*108108- * Configure GPIO output value.109109- */110110- __set_level(pin, value);111111-112112- /*113113- * Configure GPIO direction.114114- */115115- __set_direction(pin, 0);116116-117117- spin_unlock_irqrestore(&gpio_lock, flags);118118-119119- return 0;120120-}121121-EXPORT_SYMBOL(gpio_direction_output);122122-123123-int gpio_get_value(unsigned pin)9696+static int orion_gpio_get_value(struct gpio_chip *chip, unsigned pin)12497{12598 int val;12699···103132104133 return (val >> (pin & 31)) & 1;105134}106106-EXPORT_SYMBOL(gpio_get_value);107135108108-void gpio_set_value(unsigned pin, int value)136136+static int orion_gpio_direction_output(struct gpio_chip *chip, unsigned pin,137137+ int value)109138{110139 unsigned long flags;111111- u32 u;140140+141141+ if (!orion_gpio_is_valid(pin, GPIO_OUTPUT_OK))142142+ return -EINVAL;112143113144 spin_lock_irqsave(&gpio_lock, flags);114145115115- /*116116- * Disable blinking.117117- */118118- u = readl(GPIO_BLINK_EN(pin));119119- u &= ~(1 << (pin & 31));120120- writel(u, GPIO_BLINK_EN(pin));146146+ /* Disable blinking. */147147+ __set_blinking(pin, 0);121148122122- /*123123- * Configure GPIO output value.124124- */149149+ /* Configure GPIO output value. */150150+ __set_level(pin, value);151151+152152+ /* Configure GPIO direction. */153153+ __set_direction(pin, 0);154154+155155+ spin_unlock_irqrestore(&gpio_lock, flags);156156+157157+ return 0;158158+}159159+160160+static void orion_gpio_set_value(struct gpio_chip *chip, unsigned pin,161161+ int value)162162+{163163+ unsigned long flags;164164+165165+ spin_lock_irqsave(&gpio_lock, flags);166166+167167+ /* Configure GPIO output value. */125168 __set_level(pin, value);126169127170 spin_unlock_irqrestore(&gpio_lock, flags);128171}129129-EXPORT_SYMBOL(gpio_set_value);130172131131-int gpio_request(unsigned pin, const char *label)173173+static int orion_gpio_request(struct gpio_chip *chip, unsigned pin)132174{133133- unsigned long flags;134134- int ret;135135-136136- if (pin >= GPIO_MAX ||137137- !(test_bit(pin, gpio_valid_input) ||138138- test_bit(pin, gpio_valid_output))) {139139- pr_debug("%s: invalid GPIO %d\n", __func__, pin);140140- return -EINVAL;141141- }142142-143143- spin_lock_irqsave(&gpio_lock, flags);144144- if (gpio_label[pin] == NULL) {145145- gpio_label[pin] = label ? label : "?";146146- ret = 0;147147- } else {148148- pr_debug("%s: GPIO %d already used as %s\n",149149- __func__, pin, gpio_label[pin]);150150- ret = -EBUSY;151151- }152152- spin_unlock_irqrestore(&gpio_lock, flags);153153-154154- return ret;175175+ if (orion_gpio_is_valid(pin, GPIO_INPUT_OK) ||176176+ orion_gpio_is_valid(pin, GPIO_OUTPUT_OK))177177+ return 0;178178+ return -EINVAL;155179}156156-EXPORT_SYMBOL(gpio_request);157180158158-void gpio_free(unsigned pin)181181+static struct gpio_chip orion_gpiochip = {182182+ .label = "orion_gpio",183183+ .direction_input = orion_gpio_direction_input,184184+ .get = orion_gpio_get_value,185185+ .direction_output = orion_gpio_direction_output,186186+ .set = orion_gpio_set_value,187187+ .request = orion_gpio_request,188188+ .base = 0,189189+ .ngpio = GPIO_MAX,190190+ .can_sleep = 0,191191+};192192+193193+void __init orion_gpio_init(void)159194{160160- if (pin >= GPIO_MAX ||161161- !(test_bit(pin, gpio_valid_input) ||162162- test_bit(pin, gpio_valid_output))) {163163- pr_debug("%s: invalid GPIO %d\n", __func__, pin);164164- return;165165- }166166-167167- if (gpio_label[pin] == NULL)168168- pr_warning("%s: GPIO %d already freed\n", __func__, pin);169169- else170170- gpio_label[pin] = NULL;195195+ gpiochip_add(&orion_gpiochip);171196}172172-EXPORT_SYMBOL(gpio_free);173173-174197175198/*176199 * Orion-specific GPIO API extensions.177200 */178201void __init orion_gpio_set_unused(unsigned pin)179202{180180- /*181181- * Configure as output, drive low.182182- */203203+ /* Configure as output, drive low. */183204 __set_level(pin, 0);184205 __set_direction(pin, 0);185206}···193230void orion_gpio_set_blink(unsigned pin, int blink)194231{195232 unsigned long flags;196196- u32 u;197233198234 spin_lock_irqsave(&gpio_lock, flags);199235200200- /*201201- * Set output value to zero.202202- */236236+ /* Set output value to zero. */203237 __set_level(pin, 0);204238205205- u = readl(GPIO_BLINK_EN(pin));206206- if (blink)207207- u |= 1 << (pin & 31);208208- else209209- u &= ~(1 << (pin & 31));210210- writel(u, GPIO_BLINK_EN(pin));239239+ /* Set blinking. */240240+ __set_blinking(pin, blink);211241212242 spin_unlock_irqrestore(&gpio_lock, flags);213243}···324368}325369326370struct irq_chip orion_gpio_irq_chip = {327327- .name = "orion_gpio",371371+ .name = "orion_gpio_irq",328372 .ack = gpio_irq_ack,329373 .mask = gpio_irq_mask,330374 .unmask = gpio_irq_unmask,
···11/*22- * arch/arm/plat-orion/include/plat/orion5x_wdt.h22+ * arch/arm/plat-orion/include/plat/orion_wdt.h33 *44 * This file is licensed under the terms of the GNU General Public55 * License version 2. This program is licensed "as is" without any66 * warranty of any kind, whether express or implied.77 */8899-#ifndef __PLAT_ORION5X_WDT_H1010-#define __PLAT_ORION5X_WDT_H99+#ifndef __PLAT_ORION_WDT_H1010+#define __PLAT_ORION_WDT_H11111212-struct orion5x_wdt_platform_data {1212+struct orion_wdt_platform_data {1313 u32 tclk; /* no <linux/clk.h> support yet */1414};1515
+58-1
arch/arm/plat-orion/time.c
···1212 */13131414#include <linux/kernel.h>1515+#include <linux/sched.h>1616+#include <linux/cnt32_to_63.h>1717+#include <linux/timer.h>1518#include <linux/clockchips.h>1619#include <linux/interrupt.h>1720#include <linux/irq.h>1821#include <asm/mach/time.h>1922#include <mach/bridge-regs.h>2323+#include <mach/hardware.h>20242125/*2226 * Number of timer ticks per jiffy.···4137#define TIMER1_RELOAD (TIMER_VIRT_BASE + 0x0018)4238#define TIMER1_VAL (TIMER_VIRT_BASE + 0x001c)43394040+4141+/*4242+ * Orion's sched_clock implementation. It has a resolution of4343+ * at least 7.5ns (133MHz TCLK) and a maximum value of 834 days.4444+ *4545+ * Because the hardware timer period is quite short (21 secs if4646+ * 200MHz TCLK) and because cnt32_to_63() needs to be called at4747+ * least once per half period to work properly, a kernel timer is4848+ * set up to ensure this requirement is always met.4949+ */5050+#define TCLK2NS_SCALE_FACTOR 85151+5252+static unsigned long tclk2ns_scale;5353+5454+unsigned long long sched_clock(void)5555+{5656+ unsigned long long v = cnt32_to_63(0xffffffff - readl(TIMER0_VAL));5757+ return (v * tclk2ns_scale) >> TCLK2NS_SCALE_FACTOR;5858+}5959+6060+static struct timer_list cnt32_to_63_keepwarm_timer;6161+6262+static void cnt32_to_63_keepwarm(unsigned long data)6363+{6464+ mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data));6565+ (void) sched_clock();6666+}6767+6868+static void __init setup_sched_clock(unsigned long tclk)6969+{7070+ unsigned long long v;7171+ unsigned long data;7272+7373+ v = NSEC_PER_SEC;7474+ v <<= TCLK2NS_SCALE_FACTOR;7575+ v += tclk/2;7676+ do_div(v, tclk);7777+ /*7878+ * We want an even value to automatically clear the top bit7979+ * returned by cnt32_to_63() without an additional run time8080+ * instruction. So if the LSB is 1 then round it up.8181+ */8282+ if (v & 1)8383+ v++;8484+ tclk2ns_scale = v;8585+8686+ data = (0xffffffffUL / tclk / 2 - 2) * HZ;8787+ setup_timer(&cnt32_to_63_keepwarm_timer, cnt32_to_63_keepwarm, data);8888+ mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data));8989+}44904591/*4692 * Clocksource handling.···230176231177 ticks_per_jiffy = (tclk + HZ/2) / HZ;232178179179+ /*180180+ * Set scale and timer for sched_clock181181+ */182182+ setup_sched_clock(tclk);233183234184 /*235185 * Setup free-running clocksource timer (interrupts···247189 writel(u | TIMER0_EN | TIMER0_RELOAD_EN, TIMER_CTRL);248190 orion_clksrc.mult = clocksource_hz2mult(tclk, orion_clksrc.shift);249191 clocksource_register(&orion_clksrc);250250-251192252193 /*253194 * Setup clockevent timer (interrupt-driven.)
···868868 default "0x80000000" if PPC_PREP || PPC_8xx869869 default "0xc0000000"870870871871+config CONSISTENT_SIZE_BOOL872872+ bool "Set custom consistent memory pool size"873873+ depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE874874+ help875875+ This option allows you to set the size of the876876+ consistent memory pool. This pool of virtual memory877877+ is used to make consistent memory allocations.878878+879879+config CONSISTENT_SIZE880880+ hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL881881+ default "0x00200000" if NOT_COHERENT_CACHE882882+871883config PIN_TLB872884 bool "Pinned Kernel TLBs (860 ONLY)"873885 depends on ADVANCED_OPTIONS && 8xx
+195-83
arch/powerpc/configs/pmac32_defconfig
···11#22# Automatically generated make config: don't edit33-# Linux kernel version: 2.6.28-rc344-# Tue Nov 11 19:36:51 200833+# Linux kernel version: 2.6.30-rc744+# Mon May 25 14:53:25 200955#66# CONFIG_PPC64 is not set77···1414# CONFIG_40x is not set1515# CONFIG_44x is not set1616# CONFIG_E200 is not set1717+CONFIG_PPC_BOOK3S=y1718CONFIG_PPC_FPU=y1819CONFIG_ALTIVEC=y1920CONFIG_PPC_STD_MMU=y···4443CONFIG_PPC=y4544CONFIG_EARLY_PRINTK=y4645CONFIG_GENERIC_NVRAM=y4747-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y4646+CONFIG_SCHED_OMIT_FRAME_POINTER=y4847CONFIG_ARCH_MAY_HAVE_PC_FDC=y4948CONFIG_PPC_OF=y5049CONFIG_OF=y···5352CONFIG_AUDIT_ARCH=y5453CONFIG_GENERIC_BUG=y5554CONFIG_SYS_SUPPORTS_APM_EMULATION=y5555+CONFIG_DTC=y5656# CONFIG_DEFAULT_UIMAGE is not set5757CONFIG_HIBERNATE_32=y5858CONFIG_ARCH_HIBERNATION_POSSIBLE=y5959CONFIG_ARCH_SUSPEND_POSSIBLE=y6060# CONFIG_PPC_DCR_NATIVE is not set6161# CONFIG_PPC_DCR_MMIO is not set6262+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y6263CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"63646465#···7572CONFIG_SYSVIPC=y7673CONFIG_SYSVIPC_SYSCTL=y7774CONFIG_POSIX_MQUEUE=y7575+CONFIG_POSIX_MQUEUE_SYSCTL=y7876# CONFIG_BSD_PROCESS_ACCT is not set7977# CONFIG_TASKSTATS is not set8078# CONFIG_AUDIT is not set7979+8080+#8181+# RCU Subsystem8282+#8383+CONFIG_CLASSIC_RCU=y8484+# CONFIG_TREE_RCU is not set8585+# CONFIG_PREEMPT_RCU is not set8686+# CONFIG_TREE_RCU_TRACE is not set8787+# CONFIG_PREEMPT_RCU_TRACE is not set8188CONFIG_IKCONFIG=y8289CONFIG_IKCONFIG_PROC=y8390CONFIG_LOG_BUF_SHIFT=148484-# CONFIG_CGROUPS is not set8591# CONFIG_GROUP_SCHED is not set9292+# CONFIG_CGROUPS is not set8693CONFIG_SYSFS_DEPRECATED=y8794CONFIG_SYSFS_DEPRECATED_V2=y8895# CONFIG_RELAY is not set···10188# CONFIG_IPC_NS is not set10289# CONFIG_USER_NS is not set10390# CONFIG_PID_NS is not set9191+# CONFIG_NET_NS is not set10492CONFIG_BLK_DEV_INITRD=y10593CONFIG_INITRAMFS_SOURCE=""9494+CONFIG_RD_GZIP=y9595+CONFIG_RD_BZIP2=y9696+CONFIG_RD_LZMA=y10697# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set10798CONFIG_SYSCTL=y9999+CONFIG_ANON_INODES=y108100# CONFIG_EMBEDDED is not set109101CONFIG_SYSCTL_SYSCALL=y110102CONFIG_KALLSYMS=y111103CONFIG_KALLSYMS_ALL=y112104# CONFIG_KALLSYMS_EXTRA_PASS is not set105105+# CONFIG_STRIP_ASM_SYMS is not set113106CONFIG_HOTPLUG=y114107CONFIG_PRINTK=y115108CONFIG_BUG=y116109CONFIG_ELF_CORE=y117117-# CONFIG_COMPAT_BRK is not set118110CONFIG_BASE_FULL=y119111CONFIG_FUTEX=y120120-CONFIG_ANON_INODES=y121112CONFIG_EPOLL=y122113CONFIG_SIGNALFD=y123114CONFIG_TIMERFD=y···131114CONFIG_VM_EVENT_COUNTERS=y132115CONFIG_PCI_QUIRKS=y133116CONFIG_SLUB_DEBUG=y117117+# CONFIG_COMPAT_BRK is not set134118# CONFIG_SLAB is not set135119CONFIG_SLUB=y136120# CONFIG_SLOB is not set137121CONFIG_PROFILING=y122122+CONFIG_TRACEPOINTS=y138123# CONFIG_MARKERS is not set139124CONFIG_OPROFILE=y140125CONFIG_HAVE_OPROFILE=y···146127CONFIG_HAVE_KPROBES=y147128CONFIG_HAVE_KRETPROBES=y148129CONFIG_HAVE_ARCH_TRACEHOOK=y130130+# CONFIG_SLOW_WORK is not set149131# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set150132CONFIG_SLABINFO=y151133CONFIG_RT_MUTEXES=y152152-# CONFIG_TINY_SHMEM is not set153134CONFIG_BASE_SMALL=0154135CONFIG_MODULES=y155136# CONFIG_MODULE_FORCE_LOAD is not set···157138CONFIG_MODULE_FORCE_UNLOAD=y158139# CONFIG_MODVERSIONS is not set159140# CONFIG_MODULE_SRCVERSION_ALL is not set160160-CONFIG_KMOD=y161141CONFIG_BLOCK=y162142CONFIG_LBD=y163163-# CONFIG_BLK_DEV_IO_TRACE is not set164164-CONFIG_LSF=y165143CONFIG_BLK_DEV_BSG=y166144# CONFIG_BLK_DEV_INTEGRITY is not set167145···174158# CONFIG_DEFAULT_CFQ is not set175159# CONFIG_DEFAULT_NOOP is not set176160CONFIG_DEFAULT_IOSCHED="anticipatory"177177-CONFIG_CLASSIC_RCU=y178161CONFIG_FREEZER=y179162180163#181164# Platform support182165#183183-CONFIG_PPC_MULTIPLATFORM=y184184-CONFIG_CLASSIC32=y185166# CONFIG_PPC_CHRP is not set186167# CONFIG_MPC5121_ADS is not set187168# CONFIG_MPC5121_GENERIC is not set···191178# CONFIG_PPC_83xx is not set192179# CONFIG_PPC_86xx is not set193180# CONFIG_EMBEDDED6xx is not set181181+# CONFIG_AMIGAONE is not set194182CONFIG_PPC_NATIVE=y183183+CONFIG_PPC_OF_BOOT_TRAMPOLINE=y195184# CONFIG_IPIC is not set196185CONFIG_MPIC=y197186# CONFIG_MPIC_WEIRD is not set···227212CONFIG_PPC601_SYNC_FIX=y228213# CONFIG_TAU is not set229214# CONFIG_FSL_ULI1575 is not set215215+# CONFIG_SIMPLE_GPIO is not set230216231217#232218# Kernel options233219#234234-# CONFIG_HIGHMEM is not set220220+CONFIG_HIGHMEM=y235221CONFIG_TICK_ONESHOT=y236222CONFIG_NO_HZ=y237223CONFIG_HIGH_RES_TIMERS=y···255239CONFIG_ARCH_HAS_WALK_MEMORY=y256240CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y257241# CONFIG_KEXEC is not set242242+# CONFIG_CRASH_DUMP is not set258243CONFIG_ARCH_FLATMEM_ENABLE=y259244CONFIG_ARCH_POPULATES_NODE_MAP=y260245CONFIG_SELECT_MEMORY_MODEL=y···267250CONFIG_PAGEFLAGS_EXTENDED=y268251CONFIG_SPLIT_PTLOCK_CPUS=4269252# CONFIG_MIGRATION is not set270270-# CONFIG_RESOURCES_64BIT is not set271253# CONFIG_PHYS_ADDR_T_64BIT is not set272254CONFIG_ZONE_DMA_FLAG=1273255CONFIG_BOUNCE=y274256CONFIG_VIRT_TO_BUS=y275257CONFIG_UNEVICTABLE_LRU=y258258+CONFIG_HAVE_MLOCK=y259259+CONFIG_HAVE_MLOCKED_PAGE_BIT=y260260+CONFIG_PPC_4K_PAGES=y261261+# CONFIG_PPC_16K_PAGES is not set262262+# CONFIG_PPC_64K_PAGES is not set263263+# CONFIG_PPC_256K_PAGES is not set276264CONFIG_FORCE_MAX_ZONEORDER=11277265CONFIG_PROC_DEVICETREE=y278266# CONFIG_CMDLINE_BOOL is not set···310288# CONFIG_PCI_MSI is not set311289# CONFIG_PCI_LEGACY is not set312290# CONFIG_PCI_DEBUG is not set291291+# CONFIG_PCI_STUB is not set292292+# CONFIG_PCI_IOV is not set313293CONFIG_PCCARD=m314294# CONFIG_PCMCIA_DEBUG is not set315295CONFIG_PCMCIA=m···421397CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m422398# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set423399# CONFIG_NETFILTER_XT_TARGET_DSCP is not set400400+CONFIG_NETFILTER_XT_TARGET_HL=m401401+# CONFIG_NETFILTER_XT_TARGET_LED is not set424402CONFIG_NETFILTER_XT_TARGET_MARK=m425403CONFIG_NETFILTER_XT_TARGET_NFLOG=m426404CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m···431405CONFIG_NETFILTER_XT_TARGET_TRACE=m432406CONFIG_NETFILTER_XT_TARGET_TCPMSS=m433407CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m408408+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set434409CONFIG_NETFILTER_XT_MATCH_COMMENT=m435410# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set436411CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m···442415CONFIG_NETFILTER_XT_MATCH_ESP=m443416# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set444417CONFIG_NETFILTER_XT_MATCH_HELPER=m418418+CONFIG_NETFILTER_XT_MATCH_HL=m445419CONFIG_NETFILTER_XT_MATCH_IPRANGE=m446420CONFIG_NETFILTER_XT_MATCH_LENGTH=m447421CONFIG_NETFILTER_XT_MATCH_LIMIT=m···506478CONFIG_IP_NF_ARP_MANGLE=m507479CONFIG_IP_DCCP=m508480CONFIG_INET_DCCP_DIAG=m509509-CONFIG_IP_DCCP_ACKVEC=y510481511482#512483# DCCP CCIDs Configuration (EXPERIMENTAL)513484#514514-CONFIG_IP_DCCP_CCID2=m515485# CONFIG_IP_DCCP_CCID2_DEBUG is not set516516-CONFIG_IP_DCCP_CCID3=m486486+CONFIG_IP_DCCP_CCID3=y517487# CONFIG_IP_DCCP_CCID3_DEBUG is not set518488CONFIG_IP_DCCP_CCID3_RTO=100519519-CONFIG_IP_DCCP_TFRC_LIB=m489489+CONFIG_IP_DCCP_TFRC_LIB=y520490521491#522492# DCCP Kernel Hacking···534508# CONFIG_LAPB is not set535509# CONFIG_ECONET is not set536510# CONFIG_WAN_ROUTER is not set511511+# CONFIG_PHONET is not set537512# CONFIG_NET_SCHED is not set538513CONFIG_NET_CLS_ROUTE=y514514+# CONFIG_DCB is not set539515540516#541517# Network testing542518#543519# CONFIG_NET_PKTGEN is not set520520+# CONFIG_NET_DROP_MONITOR is not set544521# CONFIG_HAMRADIO is not set545522# CONFIG_CAN is not set546523CONFIG_IRDA=m···606577#607578# Bluetooth device drivers608579#609609-CONFIG_BT_HCIUSB=m610610-# CONFIG_BT_HCIUSB_SCO is not set611580# CONFIG_BT_HCIBTUSB is not set612581# CONFIG_BT_HCIUART is not set613582CONFIG_BT_HCIBCM203X=m···617590# CONFIG_BT_HCIBTUART is not set618591# CONFIG_BT_HCIVHCI is not set619592# CONFIG_AF_RXRPC is not set620620-# CONFIG_PHONET is not set621593CONFIG_WIRELESS=y622594CONFIG_CFG80211=m623623-CONFIG_NL80211=y595595+# CONFIG_CFG80211_REG_DEBUG is not set624596CONFIG_WIRELESS_OLD_REGULATORY=y625597CONFIG_WIRELESS_EXT=y626598CONFIG_WIRELESS_EXT_SYSFS=y599599+# CONFIG_LIB80211 is not set627600CONFIG_MAC80211=m628601629602#630603# Rate control algorithm selection631604#632632-CONFIG_MAC80211_RC_PID=y633633-# CONFIG_MAC80211_RC_MINSTREL is not set634634-CONFIG_MAC80211_RC_DEFAULT_PID=y635635-# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set636636-CONFIG_MAC80211_RC_DEFAULT="pid"605605+CONFIG_MAC80211_RC_MINSTREL=y606606+# CONFIG_MAC80211_RC_DEFAULT_PID is not set607607+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y608608+CONFIG_MAC80211_RC_DEFAULT="minstrel"637609# CONFIG_MAC80211_MESH is not set638610CONFIG_MAC80211_LEDS=y611611+# CONFIG_MAC80211_DEBUGFS is not set639612# CONFIG_MAC80211_DEBUG_MENU is not set640640-CONFIG_IEEE80211=m641641-# CONFIG_IEEE80211_DEBUG is not set642642-CONFIG_IEEE80211_CRYPT_WEP=m643643-CONFIG_IEEE80211_CRYPT_CCMP=m644644-CONFIG_IEEE80211_CRYPT_TKIP=m613613+# CONFIG_WIMAX is not set645614# CONFIG_RFKILL is not set646615# CONFIG_NET_9P is not set647616···685662# CONFIG_BLK_DEV_HD is not set686663CONFIG_MISC_DEVICES=y687664# CONFIG_PHANTOM is not set688688-# CONFIG_EEPROM_93CX6 is not set689665# CONFIG_SGI_IOC4 is not set690666# CONFIG_TIFM_CORE is not set667667+# CONFIG_ICS932S401 is not set691668# CONFIG_ENCLOSURE_SERVICES is not set692669# CONFIG_HP_ILO is not set670670+# CONFIG_ISL29003 is not set671671+# CONFIG_C2PORT is not set672672+673673+#674674+# EEPROM support675675+#676676+# CONFIG_EEPROM_AT24 is not set677677+# CONFIG_EEPROM_LEGACY is not set678678+# CONFIG_EEPROM_93CX6 is not set693679CONFIG_HAVE_IDE=y694680CONFIG_IDE=y695681696682#697683# Please see Documentation/ide/ide.txt for help/info on IDE drives698684#685685+CONFIG_IDE_XFER_MODE=y699686CONFIG_IDE_TIMINGS=y700687CONFIG_IDE_ATAPI=y701688# CONFIG_BLK_DEV_IDE_SATA is not set···717684CONFIG_BLK_DEV_IDECD=y718685CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y719686# CONFIG_BLK_DEV_IDETAPE is not set720720-CONFIG_BLK_DEV_IDESCSI=y721687# CONFIG_IDE_TASK_IOCTL is not set722688CONFIG_IDE_PROC_FS=y723689···746714# CONFIG_BLK_DEV_JMICRON is not set747715# CONFIG_BLK_DEV_SC1200 is not set748716# CONFIG_BLK_DEV_PIIX is not set717717+# CONFIG_BLK_DEV_IT8172 is not set749718# CONFIG_BLK_DEV_IT8213 is not set750719# CONFIG_BLK_DEV_IT821X is not set751720# CONFIG_BLK_DEV_NS87415 is not set···761728# CONFIG_BLK_DEV_TC86C001 is not set762729CONFIG_BLK_DEV_IDE_PMAC=y763730CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y764764-CONFIG_BLK_DEV_IDEDMA_PMAC=y765731CONFIG_BLK_DEV_IDEDMA=y766732767733#···804772# CONFIG_SCSI_SRP_ATTRS is not set805773CONFIG_SCSI_LOWLEVEL=y806774# CONFIG_ISCSI_TCP is not set775775+# CONFIG_SCSI_CXGB3_ISCSI is not set807776# CONFIG_BLK_DEV_3W_XXXX_RAID is not set808777# CONFIG_SCSI_3W_9XXX is not set809778# CONFIG_SCSI_ACARD is not set···824791# CONFIG_MEGARAID_NEWGEN is not set825792# CONFIG_MEGARAID_LEGACY is not set826793# CONFIG_MEGARAID_SAS is not set794794+# CONFIG_SCSI_MPT2SAS is not set827795# CONFIG_SCSI_HPTIOP is not set828796# CONFIG_SCSI_BUSLOGIC is not set797797+# CONFIG_LIBFC is not set798798+# CONFIG_LIBFCOE is not set799799+# CONFIG_FCOE is not set829800# CONFIG_SCSI_DMX3191D is not set830801# CONFIG_SCSI_EATA is not set831802# CONFIG_SCSI_FUTURE_DOMAIN is not set···859822# CONFIG_SCSI_SRP is not set860823# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set861824# CONFIG_SCSI_DH is not set825825+# CONFIG_SCSI_OSD_INITIATOR is not set862826# CONFIG_ATA is not set863827CONFIG_MD=y864828CONFIG_BLK_DEV_MD=m···919881# CONFIG_ANSLCD is not set920882CONFIG_PMAC_RACKMETER=m921883CONFIG_NETDEVICES=y884884+CONFIG_COMPAT_NET_DEV_OPS=y922885CONFIG_DUMMY=m923886# CONFIG_BONDING is not set924887# CONFIG_MACVLAN is not set···937898CONFIG_SUNGEM=y938899# CONFIG_CASSINI is not set939900# CONFIG_NET_VENDOR_3COM is not set901901+# CONFIG_ETHOC is not set902902+# CONFIG_DNET is not set940903# CONFIG_NET_TULIP is not set941904# CONFIG_HP100 is not set942905# CONFIG_IBM_NEW_EMAC_ZMII is not set···954913# CONFIG_ADAPTEC_STARFIRE is not set955914# CONFIG_B44 is not set956915# CONFIG_FORCEDETH is not set957957-# CONFIG_EEPRO100 is not set958916# CONFIG_E100 is not set959917# CONFIG_FEALNX is not set960918# CONFIG_NATSEMI is not set···963923# CONFIG_R6040 is not set964924# CONFIG_SIS900 is not set965925# CONFIG_EPIC100 is not set926926+# CONFIG_SMSC9420 is not set966927# CONFIG_SUNDANCE is not set967928# CONFIG_TLAN is not set968929# CONFIG_VIA_RHINE is not set···976935# CONFIG_E1000E is not set977936# CONFIG_IP1000 is not set978937# CONFIG_IGB is not set938938+# CONFIG_IGBVF is not set979939# CONFIG_NS83820 is not set980940# CONFIG_HAMACHI is not set981941# CONFIG_YELLOWFIN is not set···987945# CONFIG_VIA_VELOCITY is not set988946# CONFIG_TIGON3 is not set989947# CONFIG_BNX2 is not set990990-# CONFIG_MV643XX_ETH is not set991948# CONFIG_QLA3XXX is not set992949# CONFIG_ATL1 is not set993950# CONFIG_ATL1E is not set951951+# CONFIG_ATL1C is not set994952# CONFIG_JME is not set995953CONFIG_NETDEV_10000=y996954# CONFIG_CHELSIO_T1 is not set955955+CONFIG_CHELSIO_T3_DEPENDS=y997956# CONFIG_CHELSIO_T3 is not set998957# CONFIG_ENIC is not set999958# CONFIG_IXGBE is not set1000959# CONFIG_IXGB is not set1001960# CONFIG_S2IO is not set961961+# CONFIG_VXGE is not set1002962# CONFIG_MYRI10GE is not set1003963# CONFIG_NETXEN_NIC is not set1004964# CONFIG_NIU is not set···1010966# CONFIG_BNX2X is not set1011967# CONFIG_QLGE is not set1012968# CONFIG_SFC is not set969969+# CONFIG_BE2NET is not set1013970# CONFIG_TR is not set10149711015972#···1019974# CONFIG_WLAN_PRE80211 is not set1020975CONFIG_WLAN_80211=y1021976# CONFIG_PCMCIA_RAYCS is not set10221022-# CONFIG_IPW2100 is not set10231023-# CONFIG_IPW2200 is not set1024977# CONFIG_LIBERTAS is not set1025978# CONFIG_LIBERTAS_THINFIRM is not set1026979# CONFIG_AIRO is not set10271027-CONFIG_HERMES=m10281028-CONFIG_APPLE_AIRPORT=m10291029-# CONFIG_PLX_HERMES is not set10301030-# CONFIG_TMD_HERMES is not set10311031-# CONFIG_NORTEL_HERMES is not set10321032-CONFIG_PCI_HERMES=m10331033-CONFIG_PCMCIA_HERMES=m10341034-# CONFIG_PCMCIA_SPECTRUM is not set1035980# CONFIG_ATMEL is not set981981+# CONFIG_AT76C50X_USB is not set1036982# CONFIG_AIRO_CS is not set1037983# CONFIG_PCMCIA_WL3501 is not set1038984CONFIG_PRISM54=m···1033997# CONFIG_RTL8187 is not set1034998# CONFIG_ADM8211 is not set1035999# CONFIG_MAC80211_HWSIM is not set10001000+# CONFIG_MWL8K is not set10361001CONFIG_P54_COMMON=m10371002# CONFIG_P54_USB is not set10381003# CONFIG_P54_PCI is not set10041004+CONFIG_P54_LEDS=y10391005# CONFIG_ATH5K is not set10401006# CONFIG_ATH9K is not set10411041-# CONFIG_IWLCORE is not set10421042-# CONFIG_IWLWIFI_LEDS is not set10431043-# CONFIG_IWLAGN is not set10441044-# CONFIG_IWL3945 is not set10071007+# CONFIG_AR9170_USB is not set10081008+# CONFIG_IPW2100 is not set10091009+# CONFIG_IPW2200 is not set10101010+# CONFIG_IWLWIFI is not set10451011# CONFIG_HOSTAP is not set10461012CONFIG_B43=m10471013CONFIG_B43_PCI_AUTOSELECT=y···10631025# CONFIG_B43LEGACY_PIO_MODE is not set10641026# CONFIG_ZD1211RW is not set10651027# CONFIG_RT2X00 is not set10281028+CONFIG_HERMES=m10291029+CONFIG_HERMES_CACHE_FW_ON_INIT=y10301030+CONFIG_APPLE_AIRPORT=m10311031+# CONFIG_PLX_HERMES is not set10321032+# CONFIG_TMD_HERMES is not set10331033+# CONFIG_NORTEL_HERMES is not set10341034+CONFIG_PCI_HERMES=m10351035+CONFIG_PCMCIA_HERMES=m10361036+# CONFIG_PCMCIA_SPECTRUM is not set10371037+10381038+#10391039+# Enable WiMAX (Networking options) to see the WiMAX drivers10401040+#1066104110671042#10681043# USB Network Adapters···10871036CONFIG_USB_USBNET=m10881037CONFIG_USB_NET_AX8817X=m10891038CONFIG_USB_NET_CDCETHER=m10391039+# CONFIG_USB_NET_CDC_EEM is not set10901040# CONFIG_USB_NET_DM9601 is not set10911041# CONFIG_USB_NET_SMSC95XX is not set10921042# CONFIG_USB_NET_GL620A is not set···11511099CONFIG_INPUT_MOUSE=y11521100# CONFIG_MOUSE_PS2 is not set11531101# CONFIG_MOUSE_SERIAL is not set11541154-# CONFIG_MOUSE_APPLETOUCH is not set11021102+CONFIG_MOUSE_APPLETOUCH=y11551103# CONFIG_MOUSE_BCM5974 is not set11561104# CONFIG_MOUSE_VSXXXAA is not set11571105# CONFIG_INPUT_JOYSTICK is not set···12021150# CONFIG_SERIAL_JSM is not set12031151# CONFIG_SERIAL_OF_PLATFORM is not set12041152CONFIG_UNIX98_PTYS=y11531153+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set12051154CONFIG_LEGACY_PTYS=y12061155CONFIG_LEGACY_PTY_COUNT=25611561156+# CONFIG_HVC_UDBG is not set12071157# CONFIG_IPMI_HANDLER is not set12081158CONFIG_HW_RANDOM=m11591159+# CONFIG_HW_RANDOM_TIMERIOMEM is not set12091160CONFIG_NVRAM=y12101161CONFIG_GEN_RTC=y12111162# CONFIG_GEN_RTC_X is not set···12871232# Miscellaneous I2C Chip support12881233#12891234# CONFIG_DS1682 is not set12901290-# CONFIG_EEPROM_AT24 is not set12911291-# CONFIG_EEPROM_LEGACY is not set12921235# CONFIG_SENSORS_PCF8574 is not set12931236# CONFIG_PCF8575 is not set12941237# CONFIG_SENSORS_PCA9539 is not set12951295-# CONFIG_SENSORS_PCF8591 is not set12961238# CONFIG_SENSORS_MAX6875 is not set12971239# CONFIG_SENSORS_TSL2550 is not set12981240# CONFIG_I2C_DEBUG_CORE is not set···13111259# CONFIG_THERMAL is not set13121260# CONFIG_THERMAL_HWMON is not set13131261# CONFIG_WATCHDOG is not set12621262+CONFIG_SSB_POSSIBLE=y1314126313151264#13161265# Sonics Silicon Backplane13171266#13181318-CONFIG_SSB_POSSIBLE=y13191267CONFIG_SSB=m13201268CONFIG_SSB_SPROM=y13211269CONFIG_SSB_PCIHOST_POSSIBLE=y···13331281# CONFIG_MFD_CORE is not set13341282# CONFIG_MFD_SM501 is not set13351283# CONFIG_HTC_PASIC3 is not set12841284+# CONFIG_TWL4030_CORE is not set13361285# CONFIG_MFD_TMIO is not set13371286# CONFIG_PMIC_DA903X is not set13381287# CONFIG_MFD_WM8400 is not set13391288# CONFIG_MFD_WM8350_I2C is not set13401340-13411341-#13421342-# Voltage and Current regulators13431343-#12891289+# CONFIG_MFD_PCF50633 is not set13441290# CONFIG_REGULATOR is not set13451345-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set13461346-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set13471347-# CONFIG_REGULATOR_BQ24022 is not set1348129113491292#13501293# Multimedia devices···14371390# CONFIG_FB_KYRO is not set14381391CONFIG_FB_3DFX=y14391392# CONFIG_FB_3DFX_ACCEL is not set13931393+CONFIG_FB_3DFX_I2C=y14401394# CONFIG_FB_VOODOO1 is not set14411395# CONFIG_FB_VT8623 is not set14421396# CONFIG_FB_TRIDENT is not set···14471399# CONFIG_FB_IBM_GXT4500 is not set14481400# CONFIG_FB_VIRTUAL is not set14491401# CONFIG_FB_METRONOME is not set14021402+# CONFIG_FB_MB862XX is not set14031403+# CONFIG_FB_BROADSHEET is not set14501404CONFIG_BACKLIGHT_LCD_SUPPORT=y14511405CONFIG_LCD_CLASS_DEVICE=m14521406# CONFIG_LCD_ILI9320 is not set14531407# CONFIG_LCD_PLATFORM is not set14541408CONFIG_BACKLIGHT_CLASS_DEVICE=y14551455-# CONFIG_BACKLIGHT_CORGI is not set14091409+CONFIG_BACKLIGHT_GENERIC=y1456141014571411#14581412# Display device support···14941444CONFIG_SND_PCM_OSS=m14951445CONFIG_SND_PCM_OSS_PLUGINS=y14961446CONFIG_SND_SEQUENCER_OSS=y14471447+# CONFIG_SND_HRTIMER is not set14971448# CONFIG_SND_DYNAMIC_MINORS is not set14981449CONFIG_SND_SUPPORT_OLD_API=y14991450CONFIG_SND_VERBOSE_PROCFS=y15001451# CONFIG_SND_VERBOSE_PRINTK is not set15011452# CONFIG_SND_DEBUG is not set14531453+CONFIG_SND_VMASTER=y15021454CONFIG_SND_DRIVERS=y15031455CONFIG_SND_DUMMY=m15041456# CONFIG_SND_VIRMIDI is not set···15381486# CONFIG_SND_INDIGO is not set15391487# CONFIG_SND_INDIGOIO is not set15401488# CONFIG_SND_INDIGODJ is not set14891489+# CONFIG_SND_INDIGOIOX is not set14901490+# CONFIG_SND_INDIGODJX is not set15411491# CONFIG_SND_EMU10K1 is not set15421492# CONFIG_SND_EMU10K1X is not set15431493# CONFIG_SND_ENS1370 is not set···16051551#16061552# Special HID drivers16071553#16081608-CONFIG_HID_COMPAT=y16091554CONFIG_HID_A4TECH=y16101555CONFIG_HID_APPLE=y16111556CONFIG_HID_BELKIN=y16121612-CONFIG_HID_BRIGHT=y16131557CONFIG_HID_CHERRY=y16141558CONFIG_HID_CHICONY=y16151559CONFIG_HID_CYPRESS=y16161616-CONFIG_HID_DELL=y15601560+# CONFIG_DRAGONRISE_FF is not set16171561CONFIG_HID_EZKEY=y15621562+CONFIG_HID_KYE=y16181563CONFIG_HID_GYRATION=y15641564+CONFIG_HID_KENSINGTON=y16191565CONFIG_HID_LOGITECH=y16201566# CONFIG_LOGITECH_FF is not set16211567# CONFIG_LOGIRUMBLEPAD2_FF is not set16221568CONFIG_HID_MICROSOFT=y16231569CONFIG_HID_MONTEREY=y15701570+CONFIG_HID_NTRIG=y16241571CONFIG_HID_PANTHERLORD=y16251572# CONFIG_PANTHERLORD_FF is not set16261573CONFIG_HID_PETALYNX=y16271574CONFIG_HID_SAMSUNG=y16281575CONFIG_HID_SONY=y16291576CONFIG_HID_SUNPLUS=y15771577+# CONFIG_GREENASIA_FF is not set15781578+CONFIG_HID_TOPSEED=y16301579# CONFIG_THRUSTMASTER_FF is not set16311580# CONFIG_ZEROPLUS_FF is not set16321581CONFIG_USB_SUPPORT=y···16601603CONFIG_USB_EHCI_ROOT_HUB_TT=y16611604# CONFIG_USB_EHCI_TT_NEWSCHED is not set16621605# CONFIG_USB_EHCI_HCD_PPC_OF is not set16061606+# CONFIG_USB_OXU210HP_HCD is not set16631607# CONFIG_USB_ISP116X_HCD is not set16641608# CONFIG_USB_ISP1760_HCD is not set16651609CONFIG_USB_OHCI_HCD=y···16831625# CONFIG_USB_TMC is not set1684162616851627#16861686-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'16281628+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may16871629#1688163016891631#16901690-# may also be needed; see USB_STORAGE Help for more information16321632+# also be needed; see USB_STORAGE Help for more info16911633#16921634CONFIG_USB_STORAGE=m16931635# CONFIG_USB_STORAGE_DEBUG is not set16941636# CONFIG_USB_STORAGE_DATAFAB is not set16951637# CONFIG_USB_STORAGE_FREECOM is not set16961638# CONFIG_USB_STORAGE_ISD200 is not set16971697-# CONFIG_USB_STORAGE_DPCM is not set16981639# CONFIG_USB_STORAGE_USBAT is not set16991640# CONFIG_USB_STORAGE_SDDR09 is not set17001641# CONFIG_USB_STORAGE_SDDR55 is not set17011642# CONFIG_USB_STORAGE_JUMPSHOT is not set17021643# CONFIG_USB_STORAGE_ALAUDA is not set17031703-CONFIG_USB_STORAGE_ONETOUCH=y16441644+CONFIG_USB_STORAGE_ONETOUCH=m17041645# CONFIG_USB_STORAGE_KARMA is not set17051646# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set17061647# CONFIG_USB_LIBUSUAL is not set···17221665# CONFIG_USB_SERIAL_CH341 is not set17231666# CONFIG_USB_SERIAL_WHITEHEAT is not set17241667# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set17251725-# CONFIG_USB_SERIAL_CP2101 is not set16681668+# CONFIG_USB_SERIAL_CP210X is not set17261669# CONFIG_USB_SERIAL_CYPRESS_M8 is not set17271670# CONFIG_USB_SERIAL_EMPEG is not set17281671# CONFIG_USB_SERIAL_FTDI_SIO is not set···17581701# CONFIG_USB_SERIAL_NAVMAN is not set17591702# CONFIG_USB_SERIAL_PL2303 is not set17601703# CONFIG_USB_SERIAL_OTI6858 is not set17041704+# CONFIG_USB_SERIAL_QUALCOMM is not set17611705# CONFIG_USB_SERIAL_SPCP8X5 is not set17621706# CONFIG_USB_SERIAL_HP4X is not set17631707# CONFIG_USB_SERIAL_SAFE is not set17081708+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set17641709# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set17101710+# CONFIG_USB_SERIAL_SYMBOL is not set17651711# CONFIG_USB_SERIAL_TI is not set17661712# CONFIG_USB_SERIAL_CYBERJACK is not set17671713# CONFIG_USB_SERIAL_XIRCOM is not set17681714# CONFIG_USB_SERIAL_OPTION is not set17691715# CONFIG_USB_SERIAL_OMNINET is not set17161716+# CONFIG_USB_SERIAL_OPTICON is not set17701717# CONFIG_USB_SERIAL_DEBUG is not set1771171817721719#···17871726# CONFIG_USB_LED is not set17881727# CONFIG_USB_CYPRESS_CY7C63 is not set17891728# CONFIG_USB_CYTHERM is not set17901790-# CONFIG_USB_PHIDGET is not set17911729# CONFIG_USB_IDMOUSE is not set17921730# CONFIG_USB_FTDI_ELAN is not set17931731CONFIG_USB_APPLEDISPLAY=m···17981738# CONFIG_USB_ISIGHTFW is not set17991739# CONFIG_USB_VST is not set18001740# CONFIG_USB_GADGET is not set17411741+17421742+#17431743+# OTG and related infrastructure17441744+#17451745+# CONFIG_NOP_USB_XCEIV is not set18011746# CONFIG_UWB is not set18021747# CONFIG_MMC is not set18031748# CONFIG_MEMSTICK is not set···18131748# LED drivers18141749#18151750# CONFIG_LEDS_PCA9532 is not set17511751+# CONFIG_LEDS_LP5521 is not set18161752# CONFIG_LEDS_PCA955X is not set17531753+# CONFIG_LEDS_BD2802 is not set1817175418181755#18191756# LED Triggers···18261759# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set18271760# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set18281761CONFIG_LEDS_TRIGGER_DEFAULT_ON=y17621762+17631763+#17641764+# iptables trigger is under Netfilter config (LED target)17651765+#18291766# CONFIG_ACCESSIBILITY is not set18301767# CONFIG_INFINIBAND is not set18311768# CONFIG_EDAC is not set18321769# CONFIG_RTC_CLASS is not set18331770# CONFIG_DMADEVICES is not set17711771+# CONFIG_AUXDISPLAY is not set18341772# CONFIG_UIO is not set18351773# CONFIG_STAGING is not set18361774···18461774# CONFIG_EXT2_FS_XATTR is not set18471775# CONFIG_EXT2_FS_XIP is not set18481776CONFIG_EXT3_FS=y17771777+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set18491778CONFIG_EXT3_FS_XATTR=y18501779CONFIG_EXT3_FS_POSIX_ACL=y18511780# CONFIG_EXT3_FS_SECURITY is not set···18561783# CONFIG_EXT4_FS_POSIX_ACL is not set18571784# CONFIG_EXT4_FS_SECURITY is not set18581785CONFIG_JBD=y17861786+# CONFIG_JBD_DEBUG is not set18591787CONFIG_JBD2=y17881788+# CONFIG_JBD2_DEBUG is not set18601789CONFIG_FS_MBCACHE=y18611790# CONFIG_REISERFS_FS is not set18621791# CONFIG_JFS_FS is not set···18671792# CONFIG_XFS_FS is not set18681793# CONFIG_GFS2_FS is not set18691794# CONFIG_OCFS2_FS is not set17951795+# CONFIG_BTRFS_FS is not set18701796CONFIG_DNOTIFY=y18711797CONFIG_INOTIFY=y18721798CONFIG_INOTIFY_USER=y···18751799# CONFIG_AUTOFS_FS is not set18761800CONFIG_AUTOFS4_FS=m18771801CONFIG_FUSE_FS=m18021802+18031803+#18041804+# Caches18051805+#18061806+# CONFIG_FSCACHE is not set1878180718791808#18801809# CD-ROM/DVD Filesystems···19121831# CONFIG_TMPFS_POSIX_ACL is not set19131832# CONFIG_HUGETLB_PAGE is not set19141833# CONFIG_CONFIGFS_FS is not set19151915-19161916-#19171917-# Miscellaneous filesystems19181918-#18341834+CONFIG_MISC_FILESYSTEMS=y19191835# CONFIG_ADFS_FS is not set19201836# CONFIG_AFFS_FS is not set19211837CONFIG_HFS_FS=m···19211843# CONFIG_BFS_FS is not set19221844# CONFIG_EFS_FS is not set19231845# CONFIG_CRAMFS is not set18461846+# CONFIG_SQUASHFS is not set19241847# CONFIG_VXFS_FS is not set19251848# CONFIG_MINIX_FS is not set19261849# CONFIG_OMFS_FS is not set···19301851# CONFIG_ROMFS_FS is not set19311852# CONFIG_SYSV_FS is not set19321853# CONFIG_UFS_FS is not set18541854+# CONFIG_NILFS2_FS is not set19331855CONFIG_NETWORK_FILESYSTEMS=y19341856CONFIG_NFS_FS=y19351857CONFIG_NFS_V3=y···19481868CONFIG_NFS_COMMON=y19491869CONFIG_SUNRPC=y19501870CONFIG_SUNRPC_GSS=y19511951-# CONFIG_SUNRPC_REGISTER_V4 is not set19521871CONFIG_RPCSEC_GSS_KRB5=y19531872# CONFIG_RPCSEC_GSS_SPKM3 is not set19541873CONFIG_SMB_FS=m···20191940# CONFIG_NLS_KOI8_U is not set20201941CONFIG_NLS_UTF8=m20211942# CONFIG_DLM is not set19431943+CONFIG_BINARY_PRINTF=y2022194420231945#20241946# Library routines20251947#20261948CONFIG_BITREVERSE=y19491949+CONFIG_GENERIC_FIND_LAST_BIT=y20271950CONFIG_CRC_CCITT=y20281951CONFIG_CRC16=y20291952CONFIG_CRC_T10DIF=y···20351954CONFIG_LIBCRC32C=m20361955CONFIG_ZLIB_INFLATE=y20371956CONFIG_ZLIB_DEFLATE=y19571957+CONFIG_DECOMPRESS_GZIP=y19581958+CONFIG_DECOMPRESS_BZIP2=y19591959+CONFIG_DECOMPRESS_LZMA=y20381960CONFIG_TEXTSEARCH=y20391961CONFIG_TEXTSEARCH_KMP=m20401962CONFIG_TEXTSEARCH_BM=m20411963CONFIG_TEXTSEARCH_FSM=m20422042-CONFIG_PLIST=y20431964CONFIG_HAS_IOMEM=y20441965CONFIG_HAS_IOPORT=y20451966CONFIG_HAS_DMA=y20461967CONFIG_HAVE_LMB=y19681968+CONFIG_NLATTR=y2047196920481970#20491971# Kernel hacking···20571973CONFIG_FRAME_WARN=102420581974CONFIG_MAGIC_SYSRQ=y20591975# CONFIG_UNUSED_SYMBOLS is not set20602060-# CONFIG_DEBUG_FS is not set19761976+CONFIG_DEBUG_FS=y20611977# CONFIG_HEADERS_CHECK is not set20621978CONFIG_DEBUG_KERNEL=y20631979# CONFIG_DEBUG_SHIRQ is not set20641980CONFIG_DETECT_SOFTLOCKUP=y20651981# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set20661982CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=019831983+CONFIG_DETECT_HUNG_TASK=y19841984+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set19851985+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=020671986CONFIG_SCHED_DEBUG=y20681987CONFIG_SCHEDSTATS=y20691988# CONFIG_TIMER_STATS is not set···20811994# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set20821995CONFIG_STACKTRACE=y20831996# CONFIG_DEBUG_KOBJECT is not set19971997+# CONFIG_DEBUG_HIGHMEM is not set20841998CONFIG_DEBUG_BUGVERBOSE=y20851999# CONFIG_DEBUG_INFO is not set20862000# CONFIG_DEBUG_VM is not set···20892001CONFIG_DEBUG_MEMORY_INIT=y20902002# CONFIG_DEBUG_LIST is not set20912003# CONFIG_DEBUG_SG is not set20042004+# CONFIG_DEBUG_NOTIFIERS is not set20922005# CONFIG_BOOT_PRINTK_DELAY is not set20932006# CONFIG_RCU_TORTURE_TEST is not set20942007# CONFIG_RCU_CPU_STALL_DETECTOR is not set···20982009# CONFIG_FAULT_INJECTION is not set20992010CONFIG_LATENCYTOP=y21002011CONFIG_SYSCTL_SYSCALL_CHECK=y20122012+CONFIG_NOP_TRACER=y21012013CONFIG_HAVE_FUNCTION_TRACER=y20142014+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y20152015+CONFIG_HAVE_DYNAMIC_FTRACE=y20162016+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y20172017+CONFIG_RING_BUFFER=y20182018+CONFIG_TRACING=y20192019+CONFIG_TRACING_SUPPORT=y2102202021032021#21042022# Tracers···21132017# CONFIG_FUNCTION_TRACER is not set21142018# CONFIG_SCHED_TRACER is not set21152019# CONFIG_CONTEXT_SWITCH_TRACER is not set20202020+# CONFIG_EVENT_TRACER is not set21162021# CONFIG_BOOT_TRACER is not set20222022+# CONFIG_TRACE_BRANCH_PROFILING is not set21172023# CONFIG_STACK_TRACER is not set21182118-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set20242024+# CONFIG_KMEMTRACE is not set20252025+# CONFIG_WORKQUEUE_TRACER is not set20262026+# CONFIG_BLK_DEV_IO_TRACE is not set20272027+# CONFIG_FTRACE_STARTUP_TEST is not set20282028+# CONFIG_DYNAMIC_DEBUG is not set21192029# CONFIG_SAMPLES is not set21202030CONFIG_HAVE_ARCH_KGDB=y21212031# CONFIG_KGDB is not set20322032+CONFIG_PRINT_STACK_DEPTH=6421222033# CONFIG_DEBUG_STACKOVERFLOW is not set21232034# CONFIG_DEBUG_STACK_USAGE is not set21242035# CONFIG_CODE_PATCHING_SELFTEST is not set···21362033CONFIG_XMON_DISASSEMBLY=y21372034CONFIG_DEBUGGER=y21382035CONFIG_IRQSTACKS=y20362036+# CONFIG_VIRQ_DEBUG is not set21392037# CONFIG_BDI_SWITCH is not set21402038CONFIG_BOOTX_TEXT=y21412039# CONFIG_PPC_EARLY_DEBUG is not set···21552051#21562052# CONFIG_CRYPTO_FIPS is not set21572053CONFIG_CRYPTO_ALGAPI=y20542054+CONFIG_CRYPTO_ALGAPI2=y21582055CONFIG_CRYPTO_AEAD=y20562056+CONFIG_CRYPTO_AEAD2=y21592057CONFIG_CRYPTO_BLKCIPHER=y20582058+CONFIG_CRYPTO_BLKCIPHER2=y21602059CONFIG_CRYPTO_HASH=y21612161-CONFIG_CRYPTO_RNG=y20602060+CONFIG_CRYPTO_HASH2=y20612061+CONFIG_CRYPTO_RNG2=y20622062+CONFIG_CRYPTO_PCOMP=y21622063CONFIG_CRYPTO_MANAGER=y20642064+CONFIG_CRYPTO_MANAGER2=y21632065# CONFIG_CRYPTO_GF128MUL is not set21642066CONFIG_CRYPTO_NULL=m20672067+CONFIG_CRYPTO_WORKQUEUE=y21652068# CONFIG_CRYPTO_CRYPTD is not set21662069CONFIG_CRYPTO_AUTHENC=y21672070# CONFIG_CRYPTO_TEST is not set···22382127# Compression22392128#22402129CONFIG_CRYPTO_DEFLATE=m21302130+# CONFIG_CRYPTO_ZLIB is not set22412131# CONFIG_CRYPTO_LZO is not set2242213222432133#
+4-2
arch/powerpc/include/asm/dma-mapping.h
···2626 * allocate the space "normally" and use the cache management functions2727 * to ensure it is consistent.2828 */2929-extern void *__dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp);2929+struct device;3030+extern void *__dma_alloc_coherent(struct device *dev, size_t size,3131+ dma_addr_t *handle, gfp_t gfp);3032extern void __dma_free_coherent(size_t size, void *vaddr);3133extern void __dma_sync(void *vaddr, size_t size, int direction);3234extern void __dma_sync_page(struct page *page, unsigned long offset,···3937 * Cache coherent cores.4038 */41394242-#define __dma_alloc_coherent(gfp, size, handle) NULL4040+#define __dma_alloc_coherent(dev, gfp, size, handle) NULL4341#define __dma_free_coherent(size, addr) ((void)0)4442#define __dma_sync(addr, size, rw) ((void)0)4543#define __dma_sync_page(pg, off, sz, rw) ((void)0)
+2-2
arch/powerpc/include/asm/fixmap.h
···1414#ifndef _ASM_FIXMAP_H1515#define _ASM_FIXMAP_H16161717-extern unsigned long FIXADDR_TOP;1818-1917#ifndef __ASSEMBLY__2018#include <linux/kernel.h>2119#include <asm/page.h>···2123#include <linux/threads.h>2224#include <asm/kmap_types.h>2325#endif2626+2727+#define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE))24282529/*2630 * Here we define all the compile-time 'special' virtual
+24-2
arch/powerpc/include/asm/pgtable-ppc32.h
···10101111extern unsigned long va_to_phys(unsigned long address);1212extern pte_t *va_to_pte(unsigned long address);1313-extern unsigned long ioremap_bot, ioremap_base;1313+extern unsigned long ioremap_bot;14141515#ifdef CONFIG_44x1616extern int icache_44x_need_flush;···5656 printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))57575858/*5959+ * This is the bottom of the PKMAP area with HIGHMEM or an arbitrary6060+ * value (for now) on others, from where we can start layout kernel6161+ * virtual space that goes below PKMAP and FIXMAP6262+ */6363+#ifdef CONFIG_HIGHMEM6464+#define KVIRT_TOP PKMAP_BASE6565+#else6666+#define KVIRT_TOP (0xfe000000UL) /* for now, could be FIXMAP_BASE ? */6767+#endif6868+6969+/*7070+ * ioremap_bot starts at that address. Early ioremaps move down from there,7171+ * until mem_init() at which point this becomes the top of the vmalloc7272+ * and ioremap space7373+ */7474+#ifdef CONFIG_NOT_COHERENT_CACHE7575+#define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK)7676+#else7777+#define IOREMAP_TOP KVIRT_TOP7878+#endif7979+8080+/*5981 * Just any arbitrary offset to the start of the vmalloc VM area: the6060- * current 64MB value just means that there will be a 64MB "hole" after the8282+ * current 16MB value just means that there will be a 64MB "hole" after the6183 * physical memory until the kernel virtual memory starts. That means that6284 * any out-of-bounds memory accesses will hopefully be caught.6385 * The vmalloc() routines leaves a hole of 4kB between each vmalloced
+1-1
arch/powerpc/kernel/dma.c
···3232{3333 void *ret;3434#ifdef CONFIG_NOT_COHERENT_CACHE3535- ret = __dma_alloc_coherent(size, dma_handle, flag);3535+ ret = __dma_alloc_coherent(dev, size, dma_handle, flag);3636 if (ret == NULL)3737 return NULL;3838 *dma_handle += get_dma_direct_offset(dev);
···11-/*22- * PowerPC version derived from arch/arm/mm/consistent.c33- * Copyright (C) 2001 Dan Malek (dmalek@jlc.net)44- *55- * Copyright (C) 2000 Russell King66- *77- * Consistent memory allocators. Used for DMA devices that want to88- * share uncached memory with the processor core. The function return99- * is the virtual address and 'dma_handle' is the physical address.1010- * Mostly stolen from the ARM port, with some changes for PowerPC.1111- * -- Dan1212- *1313- * Reorganized to get rid of the arch-specific consistent_* functions1414- * and provide non-coherent implementations for the DMA API. -Matt1515- *1616- * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent()1717- * implementation. This is pulled straight from ARM and barely1818- * modified. -Matt1919- *2020- * This program is free software; you can redistribute it and/or modify2121- * it under the terms of the GNU General Public License version 2 as2222- * published by the Free Software Foundation.2323- */2424-2525-#include <linux/sched.h>2626-#include <linux/kernel.h>2727-#include <linux/errno.h>2828-#include <linux/string.h>2929-#include <linux/types.h>3030-#include <linux/highmem.h>3131-#include <linux/dma-mapping.h>3232-#include <linux/vmalloc.h>3333-3434-#include <asm/tlbflush.h>3535-3636-/*3737- * Allocate DMA-coherent memory space and return both the kernel remapped3838- * virtual and bus address for that space.3939- */4040-void *4141-__dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp)4242-{4343- struct page *page;4444- unsigned long order;4545- int i;4646- unsigned int nr_pages = PAGE_ALIGN(size)>>PAGE_SHIFT;4747- unsigned int array_size = nr_pages * sizeof(struct page *);4848- struct page **pages;4949- struct page *end;5050- u64 mask = 0x00ffffff, limit; /* ISA default */5151- struct vm_struct *area;5252-5353- BUG_ON(!mem_init_done);5454- size = PAGE_ALIGN(size);5555- limit = (mask + 1) & ~mask;5656- if (limit && size >= limit) {5757- printk(KERN_WARNING "coherent allocation too big (requested "5858- "%#x mask %#Lx)\n", size, mask);5959- return NULL;6060- }6161-6262- order = get_order(size);6363-6464- if (mask != 0xffffffff)6565- gfp |= GFP_DMA;6666-6767- page = alloc_pages(gfp, order);6868- if (!page)6969- goto no_page;7070-7171- end = page + (1 << order);7272-7373- /*7474- * Invalidate any data that might be lurking in the7575- * kernel direct-mapped region for device DMA.7676- */7777- {7878- unsigned long kaddr = (unsigned long)page_address(page);7979- memset(page_address(page), 0, size);8080- flush_dcache_range(kaddr, kaddr + size);8181- }8282-8383- split_page(page, order);8484-8585- /*8686- * Set the "dma handle"8787- */8888- *handle = page_to_phys(page);8989-9090- area = get_vm_area_caller(size, VM_IOREMAP,9191- __builtin_return_address(1));9292- if (!area)9393- goto out_free_pages;9494-9595- if (array_size > PAGE_SIZE) {9696- pages = vmalloc(array_size);9797- area->flags |= VM_VPAGES;9898- } else {9999- pages = kmalloc(array_size, GFP_KERNEL);100100- }101101- if (!pages)102102- goto out_free_area;103103-104104- area->pages = pages;105105- area->nr_pages = nr_pages;106106-107107- for (i = 0; i < nr_pages; i++)108108- pages[i] = page + i;109109-110110- if (map_vm_area(area, pgprot_noncached(PAGE_KERNEL), &pages))111111- goto out_unmap;112112-113113- /*114114- * Free the otherwise unused pages.115115- */116116- page += nr_pages;117117- while (page < end) {118118- __free_page(page);119119- page++;120120- }121121-122122- return area->addr;123123-out_unmap:124124- vunmap(area->addr);125125- if (array_size > PAGE_SIZE)126126- vfree(pages);127127- else128128- kfree(pages);129129- goto out_free_pages;130130-out_free_area:131131- free_vm_area(area);132132-out_free_pages:133133- if (page)134134- __free_pages(page, order);135135-no_page:136136- return NULL;137137-}138138-EXPORT_SYMBOL(__dma_alloc_coherent);139139-140140-/*141141- * free a page as defined by the above mapping.142142- */143143-void __dma_free_coherent(size_t size, void *vaddr)144144-{145145- vfree(vaddr);146146-147147-}148148-EXPORT_SYMBOL(__dma_free_coherent);149149-150150-/*151151- * make an area consistent.152152- */153153-void __dma_sync(void *vaddr, size_t size, int direction)154154-{155155- unsigned long start = (unsigned long)vaddr;156156- unsigned long end = start + size;157157-158158- switch (direction) {159159- case DMA_NONE:160160- BUG();161161- case DMA_FROM_DEVICE:162162- /*163163- * invalidate only when cache-line aligned otherwise there is164164- * the potential for discarding uncommitted data from the cache165165- */166166- if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1)))167167- flush_dcache_range(start, end);168168- else169169- invalidate_dcache_range(start, end);170170- break;171171- case DMA_TO_DEVICE: /* writeback only */172172- clean_dcache_range(start, end);173173- break;174174- case DMA_BIDIRECTIONAL: /* writeback and invalidate */175175- flush_dcache_range(start, end);176176- break;177177- }178178-}179179-EXPORT_SYMBOL(__dma_sync);180180-181181-#ifdef CONFIG_HIGHMEM182182-/*183183- * __dma_sync_page() implementation for systems using highmem.184184- * In this case, each page of a buffer must be kmapped/kunmapped185185- * in order to have a virtual address for __dma_sync(). This must186186- * not sleep so kmap_atomic()/kunmap_atomic() are used.187187- *188188- * Note: yes, it is possible and correct to have a buffer extend189189- * beyond the first page.190190- */191191-static inline void __dma_sync_page_highmem(struct page *page,192192- unsigned long offset, size_t size, int direction)193193-{194194- size_t seg_size = min((size_t)(PAGE_SIZE - offset), size);195195- size_t cur_size = seg_size;196196- unsigned long flags, start, seg_offset = offset;197197- int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE;198198- int seg_nr = 0;199199-200200- local_irq_save(flags);201201-202202- do {203203- start = (unsigned long)kmap_atomic(page + seg_nr,204204- KM_PPC_SYNC_PAGE) + seg_offset;205205-206206- /* Sync this buffer segment */207207- __dma_sync((void *)start, seg_size, direction);208208- kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE);209209- seg_nr++;210210-211211- /* Calculate next buffer segment size */212212- seg_size = min((size_t)PAGE_SIZE, size - cur_size);213213-214214- /* Add the segment size to our running total */215215- cur_size += seg_size;216216- seg_offset = 0;217217- } while (seg_nr < nr_segs);218218-219219- local_irq_restore(flags);220220-}221221-#endif /* CONFIG_HIGHMEM */222222-223223-/*224224- * __dma_sync_page makes memory consistent. identical to __dma_sync, but225225- * takes a struct page instead of a virtual address226226- */227227-void __dma_sync_page(struct page *page, unsigned long offset,228228- size_t size, int direction)229229-{230230-#ifdef CONFIG_HIGHMEM231231- __dma_sync_page_highmem(page, offset, size, direction);232232-#else233233- unsigned long start = (unsigned long)page_address(page) + offset;234234- __dma_sync((void *)start, size, direction);235235-#endif236236-}237237-EXPORT_SYMBOL(__dma_sync_page);
···11+/*22+ * PowerPC version derived from arch/arm/mm/consistent.c33+ * Copyright (C) 2001 Dan Malek (dmalek@jlc.net)44+ *55+ * Copyright (C) 2000 Russell King66+ *77+ * Consistent memory allocators. Used for DMA devices that want to88+ * share uncached memory with the processor core. The function return99+ * is the virtual address and 'dma_handle' is the physical address.1010+ * Mostly stolen from the ARM port, with some changes for PowerPC.1111+ * -- Dan1212+ *1313+ * Reorganized to get rid of the arch-specific consistent_* functions1414+ * and provide non-coherent implementations for the DMA API. -Matt1515+ *1616+ * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent()1717+ * implementation. This is pulled straight from ARM and barely1818+ * modified. -Matt1919+ *2020+ * This program is free software; you can redistribute it and/or modify2121+ * it under the terms of the GNU General Public License version 2 as2222+ * published by the Free Software Foundation.2323+ */2424+2525+#include <linux/sched.h>2626+#include <linux/kernel.h>2727+#include <linux/errno.h>2828+#include <linux/string.h>2929+#include <linux/types.h>3030+#include <linux/highmem.h>3131+#include <linux/dma-mapping.h>3232+3333+#include <asm/tlbflush.h>3434+3535+#include "mmu_decl.h"3636+3737+/*3838+ * This address range defaults to a value that is safe for all3939+ * platforms which currently set CONFIG_NOT_COHERENT_CACHE. It4040+ * can be further configured for specific applications under4141+ * the "Advanced Setup" menu. -Matt4242+ */4343+#define CONSISTENT_BASE (IOREMAP_TOP)4444+#define CONSISTENT_END (CONSISTENT_BASE + CONFIG_CONSISTENT_SIZE)4545+#define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT)4646+4747+/*4848+ * This is the page table (2MB) covering uncached, DMA consistent allocations4949+ */5050+static DEFINE_SPINLOCK(consistent_lock);5151+5252+/*5353+ * VM region handling support.5454+ *5555+ * This should become something generic, handling VM region allocations for5656+ * vmalloc and similar (ioremap, module space, etc).5757+ *5858+ * I envisage vmalloc()'s supporting vm_struct becoming:5959+ *6060+ * struct vm_struct {6161+ * struct vm_region region;6262+ * unsigned long flags;6363+ * struct page **pages;6464+ * unsigned int nr_pages;6565+ * unsigned long phys_addr;6666+ * };6767+ *6868+ * get_vm_area() would then call vm_region_alloc with an appropriate6969+ * struct vm_region head (eg):7070+ *7171+ * struct vm_region vmalloc_head = {7272+ * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list),7373+ * .vm_start = VMALLOC_START,7474+ * .vm_end = VMALLOC_END,7575+ * };7676+ *7777+ * However, vmalloc_head.vm_start is variable (typically, it is dependent on7878+ * the amount of RAM found at boot time.) I would imagine that get_vm_area()7979+ * would have to initialise this each time prior to calling vm_region_alloc().8080+ */8181+struct ppc_vm_region {8282+ struct list_head vm_list;8383+ unsigned long vm_start;8484+ unsigned long vm_end;8585+};8686+8787+static struct ppc_vm_region consistent_head = {8888+ .vm_list = LIST_HEAD_INIT(consistent_head.vm_list),8989+ .vm_start = CONSISTENT_BASE,9090+ .vm_end = CONSISTENT_END,9191+};9292+9393+static struct ppc_vm_region *9494+ppc_vm_region_alloc(struct ppc_vm_region *head, size_t size, gfp_t gfp)9595+{9696+ unsigned long addr = head->vm_start, end = head->vm_end - size;9797+ unsigned long flags;9898+ struct ppc_vm_region *c, *new;9999+100100+ new = kmalloc(sizeof(struct ppc_vm_region), gfp);101101+ if (!new)102102+ goto out;103103+104104+ spin_lock_irqsave(&consistent_lock, flags);105105+106106+ list_for_each_entry(c, &head->vm_list, vm_list) {107107+ if ((addr + size) < addr)108108+ goto nospc;109109+ if ((addr + size) <= c->vm_start)110110+ goto found;111111+ addr = c->vm_end;112112+ if (addr > end)113113+ goto nospc;114114+ }115115+116116+ found:117117+ /*118118+ * Insert this entry _before_ the one we found.119119+ */120120+ list_add_tail(&new->vm_list, &c->vm_list);121121+ new->vm_start = addr;122122+ new->vm_end = addr + size;123123+124124+ spin_unlock_irqrestore(&consistent_lock, flags);125125+ return new;126126+127127+ nospc:128128+ spin_unlock_irqrestore(&consistent_lock, flags);129129+ kfree(new);130130+ out:131131+ return NULL;132132+}133133+134134+static struct ppc_vm_region *ppc_vm_region_find(struct ppc_vm_region *head, unsigned long addr)135135+{136136+ struct ppc_vm_region *c;137137+138138+ list_for_each_entry(c, &head->vm_list, vm_list) {139139+ if (c->vm_start == addr)140140+ goto out;141141+ }142142+ c = NULL;143143+ out:144144+ return c;145145+}146146+147147+/*148148+ * Allocate DMA-coherent memory space and return both the kernel remapped149149+ * virtual and bus address for that space.150150+ */151151+void *152152+__dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)153153+{154154+ struct page *page;155155+ struct ppc_vm_region *c;156156+ unsigned long order;157157+ u64 mask = ISA_DMA_THRESHOLD, limit;158158+159159+ if (dev) {160160+ mask = dev->coherent_dma_mask;161161+162162+ /*163163+ * Sanity check the DMA mask - it must be non-zero, and164164+ * must be able to be satisfied by a DMA allocation.165165+ */166166+ if (mask == 0) {167167+ dev_warn(dev, "coherent DMA mask is unset\n");168168+ goto no_page;169169+ }170170+171171+ if ((~mask) & ISA_DMA_THRESHOLD) {172172+ dev_warn(dev, "coherent DMA mask %#llx is smaller "173173+ "than system GFP_DMA mask %#llx\n",174174+ mask, (unsigned long long)ISA_DMA_THRESHOLD);175175+ goto no_page;176176+ }177177+ }178178+179179+180180+ size = PAGE_ALIGN(size);181181+ limit = (mask + 1) & ~mask;182182+ if ((limit && size >= limit) ||183183+ size >= (CONSISTENT_END - CONSISTENT_BASE)) {184184+ printk(KERN_WARNING "coherent allocation too big (requested %#x mask %#Lx)\n",185185+ size, mask);186186+ return NULL;187187+ }188188+189189+ order = get_order(size);190190+191191+ /* Might be useful if we ever have a real legacy DMA zone... */192192+ if (mask != 0xffffffff)193193+ gfp |= GFP_DMA;194194+195195+ page = alloc_pages(gfp, order);196196+ if (!page)197197+ goto no_page;198198+199199+ /*200200+ * Invalidate any data that might be lurking in the201201+ * kernel direct-mapped region for device DMA.202202+ */203203+ {204204+ unsigned long kaddr = (unsigned long)page_address(page);205205+ memset(page_address(page), 0, size);206206+ flush_dcache_range(kaddr, kaddr + size);207207+ }208208+209209+ /*210210+ * Allocate a virtual address in the consistent mapping region.211211+ */212212+ c = ppc_vm_region_alloc(&consistent_head, size,213213+ gfp & ~(__GFP_DMA | __GFP_HIGHMEM));214214+ if (c) {215215+ unsigned long vaddr = c->vm_start;216216+ struct page *end = page + (1 << order);217217+218218+ split_page(page, order);219219+220220+ /*221221+ * Set the "dma handle"222222+ */223223+ *handle = page_to_phys(page);224224+225225+ do {226226+ SetPageReserved(page);227227+ map_page(vaddr, page_to_phys(page),228228+ pgprot_noncached(PAGE_KERNEL));229229+ page++;230230+ vaddr += PAGE_SIZE;231231+ } while (size -= PAGE_SIZE);232232+233233+ /*234234+ * Free the otherwise unused pages.235235+ */236236+ while (page < end) {237237+ __free_page(page);238238+ page++;239239+ }240240+241241+ return (void *)c->vm_start;242242+ }243243+244244+ if (page)245245+ __free_pages(page, order);246246+ no_page:247247+ return NULL;248248+}249249+EXPORT_SYMBOL(__dma_alloc_coherent);250250+251251+/*252252+ * free a page as defined by the above mapping.253253+ */254254+void __dma_free_coherent(size_t size, void *vaddr)255255+{256256+ struct ppc_vm_region *c;257257+ unsigned long flags, addr;258258+259259+ size = PAGE_ALIGN(size);260260+261261+ spin_lock_irqsave(&consistent_lock, flags);262262+263263+ c = ppc_vm_region_find(&consistent_head, (unsigned long)vaddr);264264+ if (!c)265265+ goto no_area;266266+267267+ if ((c->vm_end - c->vm_start) != size) {268268+ printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n",269269+ __func__, c->vm_end - c->vm_start, size);270270+ dump_stack();271271+ size = c->vm_end - c->vm_start;272272+ }273273+274274+ addr = c->vm_start;275275+ do {276276+ pte_t *ptep;277277+ unsigned long pfn;278278+279279+ ptep = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(addr),280280+ addr),281281+ addr),282282+ addr);283283+ if (!pte_none(*ptep) && pte_present(*ptep)) {284284+ pfn = pte_pfn(*ptep);285285+ pte_clear(&init_mm, addr, ptep);286286+ if (pfn_valid(pfn)) {287287+ struct page *page = pfn_to_page(pfn);288288+289289+ ClearPageReserved(page);290290+ __free_page(page);291291+ }292292+ }293293+ addr += PAGE_SIZE;294294+ } while (size -= PAGE_SIZE);295295+296296+ flush_tlb_kernel_range(c->vm_start, c->vm_end);297297+298298+ list_del(&c->vm_list);299299+300300+ spin_unlock_irqrestore(&consistent_lock, flags);301301+302302+ kfree(c);303303+ return;304304+305305+ no_area:306306+ spin_unlock_irqrestore(&consistent_lock, flags);307307+ printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n",308308+ __func__, vaddr);309309+ dump_stack();310310+}311311+EXPORT_SYMBOL(__dma_free_coherent);312312+313313+/*314314+ * make an area consistent.315315+ */316316+void __dma_sync(void *vaddr, size_t size, int direction)317317+{318318+ unsigned long start = (unsigned long)vaddr;319319+ unsigned long end = start + size;320320+321321+ switch (direction) {322322+ case DMA_NONE:323323+ BUG();324324+ case DMA_FROM_DEVICE:325325+ /*326326+ * invalidate only when cache-line aligned otherwise there is327327+ * the potential for discarding uncommitted data from the cache328328+ */329329+ if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1)))330330+ flush_dcache_range(start, end);331331+ else332332+ invalidate_dcache_range(start, end);333333+ break;334334+ case DMA_TO_DEVICE: /* writeback only */335335+ clean_dcache_range(start, end);336336+ break;337337+ case DMA_BIDIRECTIONAL: /* writeback and invalidate */338338+ flush_dcache_range(start, end);339339+ break;340340+ }341341+}342342+EXPORT_SYMBOL(__dma_sync);343343+344344+#ifdef CONFIG_HIGHMEM345345+/*346346+ * __dma_sync_page() implementation for systems using highmem.347347+ * In this case, each page of a buffer must be kmapped/kunmapped348348+ * in order to have a virtual address for __dma_sync(). This must349349+ * not sleep so kmap_atomic()/kunmap_atomic() are used.350350+ *351351+ * Note: yes, it is possible and correct to have a buffer extend352352+ * beyond the first page.353353+ */354354+static inline void __dma_sync_page_highmem(struct page *page,355355+ unsigned long offset, size_t size, int direction)356356+{357357+ size_t seg_size = min((size_t)(PAGE_SIZE - offset), size);358358+ size_t cur_size = seg_size;359359+ unsigned long flags, start, seg_offset = offset;360360+ int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE;361361+ int seg_nr = 0;362362+363363+ local_irq_save(flags);364364+365365+ do {366366+ start = (unsigned long)kmap_atomic(page + seg_nr,367367+ KM_PPC_SYNC_PAGE) + seg_offset;368368+369369+ /* Sync this buffer segment */370370+ __dma_sync((void *)start, seg_size, direction);371371+ kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE);372372+ seg_nr++;373373+374374+ /* Calculate next buffer segment size */375375+ seg_size = min((size_t)PAGE_SIZE, size - cur_size);376376+377377+ /* Add the segment size to our running total */378378+ cur_size += seg_size;379379+ seg_offset = 0;380380+ } while (seg_nr < nr_segs);381381+382382+ local_irq_restore(flags);383383+}384384+#endif /* CONFIG_HIGHMEM */385385+386386+/*387387+ * __dma_sync_page makes memory consistent. identical to __dma_sync, but388388+ * takes a struct page instead of a virtual address389389+ */390390+void __dma_sync_page(struct page *page, unsigned long offset,391391+ size_t size, int direction)392392+{393393+#ifdef CONFIG_HIGHMEM394394+ __dma_sync_page_highmem(page, offset, size, direction);395395+#else396396+ unsigned long start = (unsigned long)page_address(page) + offset;397397+ __dma_sync((void *)start, size, direction);398398+#endif399399+}400400+EXPORT_SYMBOL(__dma_sync_page);
+2-6
arch/powerpc/mm/init_32.c
···168168 ppc_md.progress("MMU:mapin", 0x301);169169 mapin_ram();170170171171-#ifdef CONFIG_HIGHMEM172172- ioremap_base = PKMAP_BASE;173173-#else174174- ioremap_base = 0xfe000000UL; /* for now, could be 0xfffff000 */175175-#endif /* CONFIG_HIGHMEM */176176- ioremap_bot = ioremap_base;171171+ /* Initialize early top-down ioremap allocator */172172+ ioremap_bot = IOREMAP_TOP;177173178174 /* Map in I/O resources */179175 if (ppc_md.progress)
···127127128128 pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm);129129130130- /* Mark this mm has having no context anymore */131131- mm->context.id = MMU_NO_CONTEXT;132132-133130 /* Flush the TLB for that context */134131 local_flush_tlb_mm(mm);132132+133133+ /* Mark this mm has having no context anymore */134134+ mm->context.id = MMU_NO_CONTEXT;135135136136 /* XXX This clear should ultimately be part of local_flush_tlb_mm */137137 __clear_bit(id, stale_map[cpu]);
-2
arch/powerpc/mm/pgtable_32.c
···399399#endif /* CONFIG_DEBUG_PAGEALLOC */400400401401static int fixmaps;402402-unsigned long FIXADDR_TOP = (-PAGE_SIZE);403403-EXPORT_SYMBOL(FIXADDR_TOP);404402405403void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags)406404{
···504504 if (sym->st_shndx == SHN_ABS) {505505 continue;506506 }507507- if (r_type == R_386_PC32) {508508- /* PC relative relocations don't need to be adjusted */507507+ if (r_type == R_386_NONE || r_type == R_386_PC32) {508508+ /*509509+ * NONE can be ignored and and PC relative510510+ * relocations don't need to be adjusted.511511+ */509512 }510513 else if (r_type == R_386_32) {511514 /* Visit relocations that need to be adjusted */
+13-16
arch/x86/boot/memory.c
···17171818#define SMAP 0x534d4150 /* ASCII "SMAP" */19192020-struct e820_ext_entry {2121- struct e820entry std;2222- u32 ext_flags;2323-} __attribute__((packed));2424-2520static int detect_memory_e820(void)2621{2722 int count = 0;···2429 u32 size, id, edi;2530 u8 err;2631 struct e820entry *desc = boot_params.e820_map;2727- static struct e820_ext_entry buf; /* static so it is zeroed */3232+ static struct e820entry buf; /* static so it is zeroed */28332934 /*3030- * Set this here so that if the BIOS doesn't change this field3131- * but still doesn't change %ecx, we're still okay...3535+ * Note: at least one BIOS is known which assumes that the3636+ * buffer pointed to by one e820 call is the same one as3737+ * the previous call, and only changes modified fields. Therefore,3838+ * we use a temporary buffer and copy the results entry by entry.3939+ *4040+ * This routine deliberately does not try to account for4141+ * ACPI 3+ extended attributes. This is because there are4242+ * BIOSes in the field which report zero for the valid bit for4343+ * all ranges, and we don't currently make any use of the4444+ * other attribute bits. Revisit this if we see the extended4545+ * attribute bits deployed in a meaningful way in the future.3246 */3333- buf.ext_flags = 1;34473548 do {3649 size = sizeof buf;···6966 break;7067 }71687272- /* ACPI 3.0 added the extended flags support. If bit 07373- in the extended flags is zero, we're supposed to simply7474- ignore the entry -- a backwards incompatible change! */7575- if (size > 20 && !(buf.ext_flags & 1))7676- continue;7777-7878- *desc++ = buf.std;6969+ *desc++ = buf;7970 count++;8071 } while (next && count < ARRAY_SIZE(boot_params.e820_map));8172
+7
arch/x86/kernel/cpu/common.c
···114114} };115115EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);116116117117+static int __init x86_xsave_setup(char *s)118118+{119119+ setup_clear_cpu_cap(X86_FEATURE_XSAVE);120120+ return 1;121121+}122122+__setup("noxsave", x86_xsave_setup);123123+117124#ifdef CONFIG_X86_32118125static int cachesize_override __cpuinitdata = -1;119126static int disable_x86_serial_nr __cpuinitdata = 1;
+2-2
arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
···693693 if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE &&694694 policy->cpuinfo.transition_latency > 20 * 1000) {695695 policy->cpuinfo.transition_latency = 20 * 1000;696696- printk_once(KERN_INFO "Capping off P-state tranision"697697- " latency at 20 uS\n");696696+ printk_once(KERN_INFO697697+ "P-state transition latency capped at 20 uS\n");698698 }699699700700 /* table init */
+1
arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
···168168 case 0x0E: /* Core */169169 case 0x0F: /* Core Duo */170170 case 0x16: /* Celeron Core */171171+ case 0x1C: /* Atom */171172 p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;172173 return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE);173174 case 0x0D: /* Pentium M (Dothan) */
+2
arch/x86/kernel/cpu/cpufreq/powernow-k7.c
···168168 return 1;169169}170170171171+#ifdef CONFIG_X86_POWERNOW_K7_ACPI171172static void invalidate_entry(unsigned int entry)172173{173174 powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID;174175}176176+#endif175177176178static int get_ranges(unsigned char *pst)177179{
+26-16
arch/x86/kernel/cpu/cpufreq/powernow-k8.c
···649649 data->batps);650650}651651652652+static u32 freq_from_fid_did(u32 fid, u32 did)653653+{654654+ u32 mhz = 0;655655+656656+ if (boot_cpu_data.x86 == 0x10)657657+ mhz = (100 * (fid + 0x10)) >> did;658658+ else if (boot_cpu_data.x86 == 0x11)659659+ mhz = (100 * (fid + 8)) >> did;660660+ else661661+ BUG();662662+663663+ return mhz * 1000;664664+}665665+652666static int fill_powernow_table(struct powernow_k8_data *data,653667 struct pst_s *pst, u8 maxvid)654668{···937923938924 powernow_table[i].index = index;939925940940- powernow_table[i].frequency =941941- data->acpi_data.states[i].core_frequency * 1000;926926+ /* Frequency may be rounded for these */927927+ if (boot_cpu_data.x86 == 0x10 || boot_cpu_data.x86 == 0x11) {928928+ powernow_table[i].frequency =929929+ freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7);930930+ } else931931+ powernow_table[i].frequency =932932+ data->acpi_data.states[i].core_frequency * 1000;942933 }943934 return 0;944935}···12341215 return cpufreq_frequency_table_verify(pol, data->powernow_table);12351216}1236121712181218+static const char ACPI_PSS_BIOS_BUG_MSG[] =12191219+ KERN_ERR FW_BUG PFX "No compatible ACPI _PSS objects found.\n"12201220+ KERN_ERR FW_BUG PFX "Try again with latest BIOS.\n";12211221+12371222/* per CPU init entry point to the driver */12381223static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)12391224{12401225 struct powernow_k8_data *data;12411226 cpumask_t oldmask;12421227 int rc;12431243- static int print_once;1244122812451229 if (!cpu_online(pol->cpu))12461230 return -ENODEV;···12661244 * an UP version, and is deprecated by AMD.12671245 */12681246 if (num_online_cpus() != 1) {12691269- /*12701270- * Replace this one with print_once as soon as such a12711271- * thing gets introduced12721272- */12731273- if (!print_once) {12741274- WARN_ONCE(1, KERN_ERR FW_BUG PFX "Your BIOS "12751275- "does not provide ACPI _PSS objects "12761276- "in a way that Linux understands. "12771277- "Please report this to the Linux ACPI"12781278- " maintainers and complain to your "12791279- "BIOS vendor.\n");12801280- print_once++;12811281- }12471247+ printk_once(ACPI_PSS_BIOS_BUG_MSG);12821248 goto err_out;12831249 }12841250 if (pol->cpu != 0) {
···160160 /*161161 * If large page isn't supported, there's no benefit in doing162162 * this. Also, on non-NUMA, embedding is better.163163+ *164164+ * NOTE: disabled for now.163165 */164164- if (!cpu_has_pse || !pcpu_need_numa())166166+ if (true || !cpu_has_pse || !pcpu_need_numa())165167 return -EINVAL;166168167169 /*
···2626 unsigned long sbase = saddr & PUD_MASK;2727 unsigned long s_end = sbase + PUD_SIZE;28282929+ /* Allow segments to share if only one is marked locked */3030+ unsigned long vm_flags = vma->vm_flags & ~VM_LOCKED;3131+ unsigned long svm_flags = svma->vm_flags & ~VM_LOCKED;3232+2933 /*3034 * match the virtual addresses, permission and the alignment of the3135 * page table page.3236 */3337 if (pmd_index(addr) != pmd_index(saddr) ||3434- vma->vm_flags != svma->vm_flags ||3838+ vm_flags != svm_flags ||3539 sbase < svma->vm_start || svma->vm_end < s_end)3640 return 0;3741
+4-9
arch/x86/mm/pageattr.c
···153153 */154154 __flush_tlb_all();155155156156- if (cache && boot_cpu_data.x86_model >= 4)156156+ if (cache && boot_cpu_data.x86 >= 4)157157 wbinvd();158158}159159···208208 int in_flags, struct page **pages)209209{210210 unsigned int i, level;211211+ unsigned long do_wbinvd = cache && numpages >= 1024; /* 4M threshold */211212212213 BUG_ON(irqs_disabled());213214214214- on_each_cpu(__cpa_flush_range, NULL, 1);215215+ on_each_cpu(__cpa_flush_all, (void *) do_wbinvd, 1);215216216216- if (!cache)217217+ if (!cache || do_wbinvd)217218 return;218219219219- /* 4M threshold */220220- if (numpages >= 1024) {221221- if (boot_cpu_data.x86_model >= 4)222222- wbinvd();223223- return;224224- }225220 /*226221 * We only need to flush on one CPU,227222 * clflush is a MESI-coherent instruction that
+4-3
crypto/ahash.c
···8282 if (err)8383 return err;84848585- walk->offset = 0;8686-8787- if (nbytes)8585+ if (nbytes) {8686+ walk->offset = 0;8787+ walk->pg++;8888 return hash_walk_next(walk);8989+ }89909091 if (!walk->total)9192 return 0;
+6-18
drivers/acpi/pci_bind.c
···116116 struct acpi_pci_data *pdata;117117 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };118118 acpi_handle handle;119119- struct pci_dev *dev;120120- struct pci_bus *bus;121121-122119123120 if (!device || !device->parent)124121 return -EINVAL;···173176 * Locate matching device in PCI namespace. If it doesn't exist174177 * this typically means that the device isn't currently inserted175178 * (e.g. docking station, port replicator, etc.).176176- * We cannot simply search the global pci device list, since177177- * PCI devices are added to the global pci list when the root178178- * bridge start ops are run, which may not have happened yet.179179 */180180- bus = pci_find_bus(data->id.segment, data->id.bus);181181- if (bus) {182182- list_for_each_entry(dev, &bus->devices, bus_list) {183183- if (dev->devfn == PCI_DEVFN(data->id.device,184184- data->id.function)) {185185- data->dev = dev;186186- break;187187- }188188- }189189- }180180+ data->dev = pci_get_slot(pdata->bus,181181+ PCI_DEVFN(data->id.device, data->id.function));190182 if (!data->dev) {191183 ACPI_DEBUG_PRINT((ACPI_DB_INFO,192184 "Device %04x:%02x:%02x.%d not present in PCI namespace\n",···245259246260 end:247261 kfree(buffer.pointer);248248- if (result)262262+ if (result) {263263+ pci_dev_put(data->dev);249264 kfree(data);250250-265265+ }251266 return result;252267}253268···290303 if (data->dev->subordinate) {291304 acpi_pci_irq_del_prt(data->id.segment, data->bus->number);292305 }306306+ pci_dev_put(data->dev);293307 kfree(data);294308295309 end:
+7-1
drivers/acpi/processor_idle.c
···148148 if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))149149 return;150150151151+ if (boot_cpu_has(X86_FEATURE_AMDC1E))152152+ type = ACPI_STATE_C1;153153+151154 /*152155 * Check, if one of the previous states already marked the lapic153156 * unstable···614611 switch (cx->type) {615612 case ACPI_STATE_C1:616613 cx->valid = 1;614614+ acpi_timer_check_state(i, pr, cx);617615 break;618616619617 case ACPI_STATE_C2:···834830835831 /* Do not access any ACPI IO ports in suspend path */836832 if (acpi_idle_suspend) {837837- acpi_safe_halt();838833 local_irq_enable();834834+ cpu_relax();839835 return 0;840836 }841837838838+ acpi_state_timer_broadcast(pr, cx, 1);842839 kt1 = ktime_get_real();843840 acpi_idle_do_entry(cx);844841 kt2 = ktime_get_real();···847842848843 local_irq_enable();849844 cx->usage++;845845+ acpi_state_timer_broadcast(pr, cx, 0);850846851847 return idle_time;852848}
+9-3
drivers/acpi/processor_perflib.c
···309309 (u32) px->bus_master_latency,310310 (u32) px->control, (u32) px->status));311311312312- if (!px->core_frequency) {313313- printk(KERN_ERR PREFIX314314- "Invalid _PSS data: freq is zero\n");312312+ /*313313+ * Check that ACPI's u64 MHz will be valid as u32 KHz in cpufreq314314+ */315315+ if (!px->core_frequency ||316316+ ((u32)(px->core_frequency * 1000) !=317317+ (px->core_frequency * 1000))) {318318+ printk(KERN_ERR FW_BUG PREFIX319319+ "Invalid BIOS _PSS frequency: 0x%llx MHz\n",320320+ px->core_frequency);315321 result = -EFAULT;316322 kfree(pr->performance->states);317323 goto end;
+1-1
drivers/acpi/processor_throttling.c
···840840 state = acpi_get_throttling_state(pr, value);841841 if (state == -1) {842842 ACPI_WARNING((AE_INFO,843843- "Invalid throttling state, reset\n"));843843+ "Invalid throttling state, reset"));844844 state = 0;845845 ret = acpi_processor_set_throttling(pr, state);846846 if (ret)
···357357{358358 struct device *dev;359359360360+ mutex_lock(&dpm_list_mtx);360361 list_for_each_entry(dev, &dpm_list, power.entry)361362 if (dev->power.status > DPM_OFF) {362363 int error;···367366 if (error)368367 pm_dev_err(dev, state, " early", error);369368 }369369+ mutex_unlock(&dpm_list_mtx);370370}371371372372/**···616614 int error = 0;617615618616 suspend_device_irqs();617617+ mutex_lock(&dpm_list_mtx);619618 list_for_each_entry_reverse(dev, &dpm_list, power.entry) {620619 error = suspend_device_noirq(dev, state);621620 if (error) {···625622 }626623 dev->power.status = DPM_OFF_IRQ;627624 }625625+ mutex_unlock(&dpm_list_mtx);628626 if (error)629627 device_power_up(resume_event(state));630628 return error;
+2-2
drivers/cpufreq/cpufreq.c
···10701070 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);10711071#endif1072107210731073+ unlock_policy_rwsem_write(cpu);10741074+10731075 if (cpufreq_driver->target)10741076 __cpufreq_governor(data, CPUFREQ_GOV_STOP);10751075-10761076- unlock_policy_rwsem_write(cpu);1077107710781078 kobject_put(&data->kobj);10791079
+4-1
drivers/cpufreq/cpufreq_conservative.c
···9191 * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then9292 * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock9393 * is recursive for the same process. -Venki9494+ * DEADLOCK ALERT! (2) : do_dbs_timer() must not take the dbs_mutex, because it9595+ * would deadlock with cancel_delayed_work_sync(), which is needed for proper9696+ * raceless workqueue teardown.9497 */9598static DEFINE_MUTEX(dbs_mutex);9699···545542static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info)546543{547544 dbs_info->enable = 0;548548- cancel_delayed_work(&dbs_info->work);545545+ cancel_delayed_work_sync(&dbs_info->work);549546}550547551548static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
+4-1
drivers/cpufreq/cpufreq_ondemand.c
···9898 * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then9999 * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock100100 * is recursive for the same process. -Venki101101+ * DEADLOCK ALERT! (2) : do_dbs_timer() must not take the dbs_mutex, because it102102+ * would deadlock with cancel_delayed_work_sync(), which is needed for proper103103+ * raceless workqueue teardown.101104 */102105static DEFINE_MUTEX(dbs_mutex);103106···565562static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info)566563{567564 dbs_info->enable = 0;568568- cancel_delayed_work(&dbs_info->work);565565+ cancel_delayed_work_sync(&dbs_info->work);569566}570567571568static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
+47-24
drivers/dma/fsldma.c
···179179static void set_ld_eol(struct fsl_dma_chan *fsl_chan,180180 struct fsl_desc_sw *desc)181181{182182+ u64 snoop_bits;183183+184184+ snoop_bits = ((fsl_chan->feature & FSL_DMA_IP_MASK) == FSL_DMA_IP_83XX)185185+ ? FSL_DMA_SNEN : 0;186186+182187 desc->hw.next_ln_addr = CPU_TO_DMA(fsl_chan,183183- DMA_TO_CPU(fsl_chan, desc->hw.next_ln_addr, 64) | FSL_DMA_EOL,184184- 64);188188+ DMA_TO_CPU(fsl_chan, desc->hw.next_ln_addr, 64) | FSL_DMA_EOL189189+ | snoop_bits, 64);185190}186191187192static void append_ld_queue(struct fsl_dma_chan *fsl_chan,···318313319314static dma_cookie_t fsl_dma_tx_submit(struct dma_async_tx_descriptor *tx)320315{321321- struct fsl_desc_sw *desc = tx_to_fsl_desc(tx);322316 struct fsl_dma_chan *fsl_chan = to_fsl_chan(tx->chan);317317+ struct fsl_desc_sw *desc;323318 unsigned long flags;324319 dma_cookie_t cookie;325320···327322 spin_lock_irqsave(&fsl_chan->desc_lock, flags);328323329324 cookie = fsl_chan->common.cookie;330330- cookie++;331331- if (cookie < 0)332332- cookie = 1;333333- desc->async_tx.cookie = cookie;334334- fsl_chan->common.cookie = desc->async_tx.cookie;325325+ list_for_each_entry(desc, &tx->tx_list, node) {326326+ cookie++;327327+ if (cookie < 0)328328+ cookie = 1;335329336336- append_ld_queue(fsl_chan, desc);337337- list_splice_init(&desc->async_tx.tx_list, fsl_chan->ld_queue.prev);330330+ desc->async_tx.cookie = cookie;331331+ }332332+333333+ fsl_chan->common.cookie = cookie;334334+ append_ld_queue(fsl_chan, tx_to_fsl_desc(tx));335335+ list_splice_init(&tx->tx_list, fsl_chan->ld_queue.prev);338336339337 spin_unlock_irqrestore(&fsl_chan->desc_lock, flags);340338···462454{463455 struct fsl_dma_chan *fsl_chan;464456 struct fsl_desc_sw *first = NULL, *prev = NULL, *new;457457+ struct list_head *list;465458 size_t copy;466466- LIST_HEAD(link_chain);467459468460 if (!chan)469461 return NULL;···480472 if (!new) {481473 dev_err(fsl_chan->dev,482474 "No free memory for link descriptor\n");483483- return NULL;475475+ goto fail;484476 }485477#ifdef FSL_DMA_LD_DEBUG486478 dev_dbg(fsl_chan->dev, "new link desc alloc %p\n", new);···515507 /* Set End-of-link to the last link descriptor of new list*/516508 set_ld_eol(fsl_chan, new);517509518518- return first ? &first->async_tx : NULL;510510+ return &first->async_tx;511511+512512+fail:513513+ if (!first)514514+ return NULL;515515+516516+ list = &first->async_tx.tx_list;517517+ list_for_each_entry_safe_reverse(new, prev, list, node) {518518+ list_del(&new->node);519519+ dma_pool_free(fsl_chan->desc_pool, new, new->async_tx.phys);520520+ }521521+522522+ return NULL;519523}520524521525/**···618598 dma_addr_t next_dest_addr;619599 unsigned long flags;620600601601+ spin_lock_irqsave(&fsl_chan->desc_lock, flags);602602+621603 if (!dma_is_idle(fsl_chan))622622- return;604604+ goto out_unlock;623605624606 dma_halt(fsl_chan);625607626608 /* If there are some link descriptors627609 * not transfered in queue. We need to start it.628610 */629629- spin_lock_irqsave(&fsl_chan->desc_lock, flags);630611631612 /* Find the first un-transfer desciptor */632613 for (ld_node = fsl_chan->ld_queue.next;···638617 fsl_chan->common.cookie) == DMA_SUCCESS);639618 ld_node = ld_node->next);640619641641- spin_unlock_irqrestore(&fsl_chan->desc_lock, flags);642642-643620 if (ld_node != &fsl_chan->ld_queue) {644621 /* Get the ld start address from ld_queue */645622 next_dest_addr = to_fsl_desc(ld_node)->async_tx.phys;646646- dev_dbg(fsl_chan->dev, "xfer LDs staring from %p\n",647647- (void *)next_dest_addr);623623+ dev_dbg(fsl_chan->dev, "xfer LDs staring from 0x%llx\n",624624+ (unsigned long long)next_dest_addr);648625 set_cdar(fsl_chan, next_dest_addr);649626 dma_start(fsl_chan);650627 } else {651628 set_cdar(fsl_chan, 0);652629 set_ndar(fsl_chan, 0);653630 }631631+632632+out_unlock:633633+ spin_unlock_irqrestore(&fsl_chan->desc_lock, flags);654634}655635656636/**···756734 */757735 if (stat & FSL_DMA_SR_EOSI) {758736 dev_dbg(fsl_chan->dev, "event: End-of-segments INT\n");759759- dev_dbg(fsl_chan->dev, "event: clndar %p, nlndar %p\n",760760- (void *)get_cdar(fsl_chan), (void *)get_ndar(fsl_chan));737737+ dev_dbg(fsl_chan->dev, "event: clndar 0x%llx, nlndar 0x%llx\n",738738+ (unsigned long long)get_cdar(fsl_chan),739739+ (unsigned long long)get_ndar(fsl_chan));761740 stat &= ~FSL_DMA_SR_EOSI;762741 update_cookie = 1;763742 }···853830 new_fsl_chan->reg.end - new_fsl_chan->reg.start + 1);854831855832 new_fsl_chan->id = ((new_fsl_chan->reg.start - 0x100) & 0xfff) >> 7;856856- if (new_fsl_chan->id > FSL_DMA_MAX_CHANS_PER_DEVICE) {833833+ if (new_fsl_chan->id >= FSL_DMA_MAX_CHANS_PER_DEVICE) {857834 dev_err(fdev->dev, "There is no %d channel!\n",858835 new_fsl_chan->id);859836 err = -EINVAL;···948925 }949926950927 dev_info(&dev->dev, "Probe the Freescale DMA driver for %s "951951- "controller at %p...\n",952952- match->compatible, (void *)fdev->reg.start);928928+ "controller at 0x%llx...\n",929929+ match->compatible, (unsigned long long)fdev->reg.start);953930 fdev->reg_base = ioremap(fdev->reg.start, fdev->reg.end954931 - fdev->reg.start + 1);955932
···192192193193config EDAC_AMD8131194194 tristate "AMD8131 HyperTransport PCI-X Tunnel"195195- depends on EDAC_MM_EDAC && PCI195195+ depends on EDAC_MM_EDAC && PCI && PPC_MAPLE196196 help197197 Support for error detection and correction on the198198 AMD8131 HyperTransport PCI-X Tunnel chip.199199+ Note, add more Kconfig dependency if it's adopted200200+ on some machine other than Maple.199201200202config EDAC_AMD8111201203 tristate "AMD8111 HyperTransport I/O Hub"202202- depends on EDAC_MM_EDAC && PCI204204+ depends on EDAC_MM_EDAC && PCI && PPC_MAPLE203205 help204206 Support for error detection and correction on the205207 AMD8111 HyperTransport I/O Hub chip.208208+ Note, add more Kconfig dependency if it's adopted209209+ on some machine other than Maple.206210207211endif # EDAC
···6767 will load the correct one.68686969config DRM_I9157070+ tristate "i915 driver"7071 select FB_CFB_FILLRECT7172 select FB_CFB_COPYAREA7273 select FB_CFB_IMAGEBLIT7374 select FB7475 select FRAMEBUFFER_CONSOLE if !EMBEDDED7575- tristate "i915 driver"7676+ # i915 depends on ACPI_VIDEO when ACPI is enabled7777+ # but for select to work, need to select ACPI_VIDEO's dependencies, ick7878+ select VIDEO_OUTPUT_CONTROL if ACPI7979+ select BACKLIGHT_CLASS_DEVICE if ACPI8080+ select INPUT if ACPI8181+ select ACPI_VIDEO if ACPI7682 help7783 Choose this option if you have a system that has Intel 830M, 845G,7884 852GM, 855GM 865G or 915G integrated graphics. If M is selected, the···9084config DRM_I915_KMS9185 bool "Enable modesetting on intel by default"9286 depends on DRM_I9159393- # i915 KMS depends on ACPI_VIDEO when ACPI is enabled9494- # but for select to work, need to select ACPI_VIDEO's dependencies, ick9595- select VIDEO_OUTPUT_CONTROL if ACPI9696- select BACKLIGHT_CLASS_DEVICE if ACPI9797- select INPUT if ACPI9898- select ACPI_VIDEO if ACPI9987 help10088 Choose this option if you want kernel modesetting enabled by default,10189 and you have a new enough userspace to support this. Running old
+2-1
drivers/gpu/drm/i915/i915_drv.h
···180180 int backlight_duty_cycle; /* restore backlight to this value */181181 bool panel_wants_dither;182182 struct drm_display_mode *panel_fixed_mode;183183- struct drm_display_mode *vbt_mode; /* if any */183183+ struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */184184+ struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */184185185186 /* Feature bits from the VBIOS */186187 unsigned int int_tv_support:1;
+38-27
drivers/gpu/drm/i915/i915_gem.c
···349349 last_data_page = (data_ptr + args->size - 1) / PAGE_SIZE;350350 num_pages = last_data_page - first_data_page + 1;351351352352- user_pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL);352352+ user_pages = drm_calloc_large(num_pages, sizeof(struct page *));353353 if (user_pages == NULL)354354 return -ENOMEM;355355···429429 SetPageDirty(user_pages[i]);430430 page_cache_release(user_pages[i]);431431 }432432- kfree(user_pages);432432+ drm_free_large(user_pages);433433434434 return ret;435435}···649649 last_data_page = (data_ptr + args->size - 1) / PAGE_SIZE;650650 num_pages = last_data_page - first_data_page + 1;651651652652- user_pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL);652652+ user_pages = drm_calloc_large(num_pages, sizeof(struct page *));653653 if (user_pages == NULL)654654 return -ENOMEM;655655···719719out_unpin_pages:720720 for (i = 0; i < pinned_pages; i++)721721 page_cache_release(user_pages[i]);722722- kfree(user_pages);722722+ drm_free_large(user_pages);723723724724 return ret;725725}···824824 last_data_page = (data_ptr + args->size - 1) / PAGE_SIZE;825825 num_pages = last_data_page - first_data_page + 1;826826827827- user_pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL);827827+ user_pages = drm_calloc_large(num_pages, sizeof(struct page *));828828 if (user_pages == NULL)829829 return -ENOMEM;830830···902902fail_put_user_pages:903903 for (i = 0; i < pinned_pages; i++)904904 page_cache_release(user_pages[i]);905905- kfree(user_pages);905905+ drm_free_large(user_pages);906906907907 return ret;908908}···11451145 mutex_unlock(&dev->struct_mutex);11461146 return VM_FAULT_SIGBUS;11471147 }11481148- list_add(&obj_priv->list, &dev_priv->mm.inactive_list);11481148+11491149+ ret = i915_gem_object_set_to_gtt_domain(obj, write);11501150+ if (ret) {11511151+ mutex_unlock(&dev->struct_mutex);11521152+ return VM_FAULT_SIGBUS;11531153+ }11541154+11551155+ list_add_tail(&obj_priv->list, &dev_priv->mm.inactive_list);11491156 }1150115711511158 /* Need a new fence register? */···13821375 mutex_unlock(&dev->struct_mutex);13831376 return ret;13841377 }13851385- list_add(&obj_priv->list, &dev_priv->mm.inactive_list);13781378+ list_add_tail(&obj_priv->list, &dev_priv->mm.inactive_list);13861379 }1387138013881381 drm_gem_object_unreference(obj);···14151408 }14161409 obj_priv->dirty = 0;1417141014181418- drm_free(obj_priv->pages,14191419- page_count * sizeof(struct page *),14201420- DRM_MEM_DRIVER);14111411+ drm_free_large(obj_priv->pages);14211412 obj_priv->pages = NULL;14221413}14231414···20292024 */20302025 page_count = obj->size / PAGE_SIZE;20312026 BUG_ON(obj_priv->pages != NULL);20322032- obj_priv->pages = drm_calloc(page_count, sizeof(struct page *),20332033- DRM_MEM_DRIVER);20272027+ obj_priv->pages = drm_calloc_large(page_count, sizeof(struct page *));20342028 if (obj_priv->pages == NULL) {20352029 DRM_ERROR("Faled to allocate page list\n");20362030 obj_priv->pages_refcount--;···21352131 return;21362132 }2137213321382138- pitch_val = (obj_priv->stride / 128) - 1;21392139- WARN_ON(pitch_val & ~0x0000000f);21342134+ pitch_val = obj_priv->stride / 128;21352135+ pitch_val = ffs(pitch_val) - 1;21362136+ WARN_ON(pitch_val > I830_FENCE_MAX_PITCH_VAL);21372137+21402138 val = obj_priv->gtt_offset;21412139 if (obj_priv->tiling_mode == I915_TILING_Y)21422140 val |= 1 << I830_FENCE_TILING_Y_SHIFT;···24292423 */24302424 if (obj_priv->pages == NULL)24312425 return;24262426+24272427+ /* XXX: The 865 in particular appears to be weird in how it handles24282428+ * cache flushing. We haven't figured it out, but the24292429+ * clflush+agp_chipset_flush doesn't appear to successfully get the24302430+ * data visible to the PGU, while wbinvd + agp_chipset_flush does.24312431+ */24322432+ if (IS_I865G(obj->dev)) {24332433+ wbinvd();24342434+ return;24352435+ }2432243624332437 drm_clflush_pages(obj_priv->pages, obj->size / PAGE_SIZE);24342438}···31273111 reloc_count += exec_list[i].relocation_count;31283112 }3129311331303130- *relocs = drm_calloc(reloc_count, sizeof(**relocs), DRM_MEM_DRIVER);31143114+ *relocs = drm_calloc_large(reloc_count, sizeof(**relocs));31313115 if (*relocs == NULL)31323116 return -ENOMEM;31333117···31413125 exec_list[i].relocation_count *31423126 sizeof(**relocs));31433127 if (ret != 0) {31443144- drm_free(*relocs, reloc_count * sizeof(**relocs),31453145- DRM_MEM_DRIVER);31283128+ drm_free_large(*relocs);31463129 *relocs = NULL;31473130 return -EFAULT;31483131 }···31803165 }3181316631823167err:31833183- drm_free(relocs, reloc_count * sizeof(*relocs), DRM_MEM_DRIVER);31683168+ drm_free_large(relocs);3184316931853170 return ret;31863171}···32133198 return -EINVAL;32143199 }32153200 /* Copy in the exec list from userland */32163216- exec_list = drm_calloc(sizeof(*exec_list), args->buffer_count,32173217- DRM_MEM_DRIVER);32183218- object_list = drm_calloc(sizeof(*object_list), args->buffer_count,32193219- DRM_MEM_DRIVER);32013201+ exec_list = drm_calloc_large(sizeof(*exec_list), args->buffer_count);32023202+ object_list = drm_calloc_large(sizeof(*object_list), args->buffer_count);32203203 if (exec_list == NULL || object_list == NULL) {32213204 DRM_ERROR("Failed to allocate exec or object list "32223205 "for %d buffers\n",···34753462 }3476346334773464pre_mutex_err:34783478- drm_free(object_list, sizeof(*object_list) * args->buffer_count,34793479- DRM_MEM_DRIVER);34803480- drm_free(exec_list, sizeof(*exec_list) * args->buffer_count,34813481- DRM_MEM_DRIVER);34653465+ drm_free_large(object_list);34663466+ drm_free_large(exec_list);34823467 drm_free(cliprects, sizeof(*cliprects) * args->num_cliprects,34833468 DRM_MEM_DRIVER);34843469
+11-3
drivers/gpu/drm/i915/i915_gem_tiling.c
···213213 if (tiling_mode == I915_TILING_NONE)214214 return true;215215216216- if (tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev))216216+ if (!IS_I9XX(dev) ||217217+ (tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)))217218 tile_width = 128;218219 else219220 tile_width = 512;···226225 if (stride / 128 > I965_FENCE_MAX_PITCH_VAL)227226 return false;228227 } else if (IS_I9XX(dev)) {229229- if (stride / tile_width > I830_FENCE_MAX_PITCH_VAL ||228228+ uint32_t pitch_val = ffs(stride / tile_width) - 1;229229+230230+ /* XXX: For Y tiling, FENCE_MAX_PITCH_VAL is actually 6 (8KB)231231+ * instead of 4 (2KB) on 945s.232232+ */233233+ if (pitch_val > I915_FENCE_MAX_PITCH_VAL ||230234 size > (I830_FENCE_MAX_SIZE_VAL << 20))231235 return false;232236 } else {233233- if (stride / 128 > I830_FENCE_MAX_PITCH_VAL ||237237+ uint32_t pitch_val = ffs(stride / tile_width) - 1;238238+239239+ if (pitch_val > I830_FENCE_MAX_PITCH_VAL ||234240 size > (I830_FENCE_MAX_SIZE_VAL << 19))235241 return false;236242 }
···198198 return intel_ddc_probe(intel_output);199199}200200201201+static enum drm_connector_status202202+intel_crt_load_detect(struct drm_crtc *crtc, struct intel_output *intel_output)203203+{204204+ struct drm_encoder *encoder = &intel_output->enc;205205+ struct drm_device *dev = encoder->dev;206206+ struct drm_i915_private *dev_priv = dev->dev_private;207207+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);208208+ uint32_t pipe = intel_crtc->pipe;209209+ uint32_t save_bclrpat;210210+ uint32_t save_vtotal;211211+ uint32_t vtotal, vactive;212212+ uint32_t vsample;213213+ uint32_t vblank, vblank_start, vblank_end;214214+ uint32_t dsl;215215+ uint32_t bclrpat_reg;216216+ uint32_t vtotal_reg;217217+ uint32_t vblank_reg;218218+ uint32_t vsync_reg;219219+ uint32_t pipeconf_reg;220220+ uint32_t pipe_dsl_reg;221221+ uint8_t st00;222222+ enum drm_connector_status status;223223+224224+ if (pipe == 0) {225225+ bclrpat_reg = BCLRPAT_A;226226+ vtotal_reg = VTOTAL_A;227227+ vblank_reg = VBLANK_A;228228+ vsync_reg = VSYNC_A;229229+ pipeconf_reg = PIPEACONF;230230+ pipe_dsl_reg = PIPEADSL;231231+ } else {232232+ bclrpat_reg = BCLRPAT_B;233233+ vtotal_reg = VTOTAL_B;234234+ vblank_reg = VBLANK_B;235235+ vsync_reg = VSYNC_B;236236+ pipeconf_reg = PIPEBCONF;237237+ pipe_dsl_reg = PIPEBDSL;238238+ }239239+240240+ save_bclrpat = I915_READ(bclrpat_reg);241241+ save_vtotal = I915_READ(vtotal_reg);242242+ vblank = I915_READ(vblank_reg);243243+244244+ vtotal = ((save_vtotal >> 16) & 0xfff) + 1;245245+ vactive = (save_vtotal & 0x7ff) + 1;246246+247247+ vblank_start = (vblank & 0xfff) + 1;248248+ vblank_end = ((vblank >> 16) & 0xfff) + 1;249249+250250+ /* Set the border color to purple. */251251+ I915_WRITE(bclrpat_reg, 0x500050);252252+253253+ if (IS_I9XX(dev)) {254254+ uint32_t pipeconf = I915_READ(pipeconf_reg);255255+ I915_WRITE(pipeconf_reg, pipeconf | PIPECONF_FORCE_BORDER);256256+ /* Wait for next Vblank to substitue257257+ * border color for Color info */258258+ intel_wait_for_vblank(dev);259259+ st00 = I915_READ8(VGA_MSR_WRITE);260260+ status = ((st00 & (1 << 4)) != 0) ?261261+ connector_status_connected :262262+ connector_status_disconnected;263263+264264+ I915_WRITE(pipeconf_reg, pipeconf);265265+ } else {266266+ bool restore_vblank = false;267267+ int count, detect;268268+269269+ /*270270+ * If there isn't any border, add some.271271+ * Yes, this will flicker272272+ */273273+ if (vblank_start <= vactive && vblank_end >= vtotal) {274274+ uint32_t vsync = I915_READ(vsync_reg);275275+ uint32_t vsync_start = (vsync & 0xffff) + 1;276276+277277+ vblank_start = vsync_start;278278+ I915_WRITE(vblank_reg,279279+ (vblank_start - 1) |280280+ ((vblank_end - 1) << 16));281281+ restore_vblank = true;282282+ }283283+ /* sample in the vertical border, selecting the larger one */284284+ if (vblank_start - vactive >= vtotal - vblank_end)285285+ vsample = (vblank_start + vactive) >> 1;286286+ else287287+ vsample = (vtotal + vblank_end) >> 1;288288+289289+ /*290290+ * Wait for the border to be displayed291291+ */292292+ while (I915_READ(pipe_dsl_reg) >= vactive)293293+ ;294294+ while ((dsl = I915_READ(pipe_dsl_reg)) <= vsample)295295+ ;296296+ /*297297+ * Watch ST00 for an entire scanline298298+ */299299+ detect = 0;300300+ count = 0;301301+ do {302302+ count++;303303+ /* Read the ST00 VGA status register */304304+ st00 = I915_READ8(VGA_MSR_WRITE);305305+ if (st00 & (1 << 4))306306+ detect++;307307+ } while ((I915_READ(pipe_dsl_reg) == dsl));308308+309309+ /* restore vblank if necessary */310310+ if (restore_vblank)311311+ I915_WRITE(vblank_reg, vblank);312312+ /*313313+ * If more than 3/4 of the scanline detected a monitor,314314+ * then it is assumed to be present. This works even on i830,315315+ * where there isn't any way to force the border color across316316+ * the screen317317+ */318318+ status = detect * 4 > count * 3 ?319319+ connector_status_connected :320320+ connector_status_disconnected;321321+ }322322+323323+ /* Restore previous settings */324324+ I915_WRITE(bclrpat_reg, save_bclrpat);325325+326326+ return status;327327+}328328+201329static enum drm_connector_status intel_crt_detect(struct drm_connector *connector)202330{203331 struct drm_device *dev = connector->dev;332332+ struct intel_output *intel_output = to_intel_output(connector);333333+ struct drm_encoder *encoder = &intel_output->enc;334334+ struct drm_crtc *crtc;335335+ int dpms_mode;336336+ enum drm_connector_status status;204337205338 if (IS_I9XX(dev) && !IS_I915G(dev) && !IS_I915GM(dev)) {206339 if (intel_crt_detect_hotplug(connector))···345212 if (intel_crt_detect_ddc(connector))346213 return connector_status_connected;347214348348- /* TODO use load detect */349349- return connector_status_unknown;215215+ /* for pre-945g platforms use load detect */216216+ if (encoder->crtc && encoder->crtc->enabled) {217217+ status = intel_crt_load_detect(encoder->crtc, intel_output);218218+ } else {219219+ crtc = intel_get_load_detect_pipe(intel_output,220220+ NULL, &dpms_mode);221221+ if (crtc) {222222+ status = intel_crt_load_detect(crtc, intel_output);223223+ intel_release_load_detect_pipe(intel_output, dpms_mode);224224+ } else225225+ status = connector_status_unknown;226226+ }227227+228228+ return status;350229}351230352231static void intel_crt_destroy(struct drm_connector *connector)
+20-6
drivers/gpu/drm/i915/intel_display.c
···13571357 int pipe = intel_crtc->pipe;13581358 uint32_t control = (pipe == 0) ? CURACNTR : CURBCNTR;13591359 uint32_t base = (pipe == 0) ? CURABASE : CURBBASE;13601360- uint32_t temp;13601360+ uint32_t temp = I915_READ(control);13611361 size_t addr;13621362 int ret;13631363···13661366 /* if we want to turn off the cursor ignore width and height */13671367 if (!handle) {13681368 DRM_DEBUG("cursor off\n");13691369- temp = CURSOR_MODE_DISABLE;13691369+ if (IS_MOBILE(dev) || IS_I9XX(dev)) {13701370+ temp &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE);13711371+ temp |= CURSOR_MODE_DISABLE;13721372+ } else {13731373+ temp &= ~(CURSOR_ENABLE | CURSOR_GAMMA_ENABLE);13741374+ }13701375 addr = 0;13711376 bo = NULL;13721377 mutex_lock(&dev->struct_mutex);···14141409 addr = obj_priv->phys_obj->handle->busaddr;14151410 }1416141114171417- temp = 0;14181418- /* set the pipe for the cursor */14191419- temp |= (pipe << 28);14201420- temp |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE;14121412+ if (!IS_I9XX(dev))14131413+ I915_WRITE(CURSIZE, (height << 12) | width);14141414+14151415+ /* Hooray for CUR*CNTR differences */14161416+ if (IS_MOBILE(dev) || IS_I9XX(dev)) {14171417+ temp &= ~(CURSOR_MODE | MCURSOR_PIPE_SELECT);14181418+ temp |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE;14191419+ temp |= (pipe << 28); /* Connect to correct pipe */14201420+ } else {14211421+ temp &= ~(CURSOR_FORMAT_MASK);14221422+ temp |= CURSOR_ENABLE;14231423+ temp |= CURSOR_FORMAT_ARGB | CURSOR_GAMMA_ENABLE;14241424+ }1421142514221426 finish:14231427 I915_WRITE(control, temp);
+2-2
drivers/gpu/drm/i915/intel_lvds.c
···511511 }512512513513 /* Failed to get EDID, what about VBT? */514514- if (dev_priv->vbt_mode) {514514+ if (dev_priv->lfp_lvds_vbt_mode) {515515 mutex_lock(&dev->mode_config.mutex);516516 dev_priv->panel_fixed_mode =517517- drm_mode_duplicate(dev, dev_priv->vbt_mode);517517+ drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);518518 mutex_unlock(&dev->mode_config.mutex);519519 if (dev_priv->panel_fixed_mode) {520520 dev_priv->panel_fixed_mode->type |=
+114-23
drivers/gpu/drm/i915/intel_sdvo.c
···6969 * This is set if we treat the device as HDMI, instead of DVI.7070 */7171 bool is_hdmi;7272+ /**7373+ * This is set if we detect output of sdvo device as LVDS.7474+ */7575+ bool is_lvds;72767377 /**7478 * Returned SDTV resolutions allowed for the current format, if the···14021398static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)14031399{14041400 struct intel_output *intel_output = to_intel_output(connector);14051405- struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;1406140114071402 /* set the bus switch and get the modes */14081408- intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus);14091403 intel_ddc_get_modes(intel_output);1410140414111405#if 0···15451543 }15461544}1547154515461546+static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)15471547+{15481548+ struct intel_output *intel_output = to_intel_output(connector);15491549+ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;15501550+ struct drm_i915_private *dev_priv = connector->dev->dev_private;15511551+15521552+ /*15531553+ * Attempt to get the mode list from DDC.15541554+ * Assume that the preferred modes are15551555+ * arranged in priority order.15561556+ */15571557+ /* set the bus switch and get the modes */15581558+ intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus);15591559+ intel_ddc_get_modes(intel_output);15601560+ if (list_empty(&connector->probed_modes) == false)15611561+ return;15621562+15631563+ /* Fetch modes from VBT */15641564+ if (dev_priv->sdvo_lvds_vbt_mode != NULL) {15651565+ struct drm_display_mode *newmode;15661566+ newmode = drm_mode_duplicate(connector->dev,15671567+ dev_priv->sdvo_lvds_vbt_mode);15681568+ if (newmode != NULL) {15691569+ /* Guarantee the mode is preferred */15701570+ newmode->type = (DRM_MODE_TYPE_PREFERRED |15711571+ DRM_MODE_TYPE_DRIVER);15721572+ drm_mode_probed_add(connector, newmode);15731573+ }15741574+ }15751575+}15761576+15481577static int intel_sdvo_get_modes(struct drm_connector *connector)15491578{15501579 struct intel_output *output = to_intel_output(connector);···1583155015841551 if (sdvo_priv->is_tv)15851552 intel_sdvo_get_tv_modes(connector);15531553+ else if (sdvo_priv->is_lvds == true)15541554+ intel_sdvo_get_lvds_modes(connector);15861555 else15871556 intel_sdvo_get_ddc_modes(connector);15881557···1599156416001565 if (intel_output->i2c_bus)16011566 intel_i2c_destroy(intel_output->i2c_bus);15671567+ if (intel_output->ddc_bus)15681568+ intel_i2c_destroy(intel_output->ddc_bus);15691569+16021570 drm_sysfs_connector_remove(connector);16031571 drm_connector_cleanup(connector);16041572 kfree(intel_output);···16981660 return true;16991661}1700166216631663+static struct intel_output *16641664+intel_sdvo_chan_to_intel_output(struct intel_i2c_chan *chan)16651665+{16661666+ struct drm_device *dev = chan->drm_dev;16671667+ struct drm_connector *connector;16681668+ struct intel_output *intel_output = NULL;16691669+16701670+ list_for_each_entry(connector,16711671+ &dev->mode_config.connector_list, head) {16721672+ if (to_intel_output(connector)->ddc_bus == chan) {16731673+ intel_output = to_intel_output(connector);16741674+ break;16751675+ }16761676+ }16771677+ return intel_output;16781678+}16791679+16801680+static int intel_sdvo_master_xfer(struct i2c_adapter *i2c_adap,16811681+ struct i2c_msg msgs[], int num)16821682+{16831683+ struct intel_output *intel_output;16841684+ struct intel_sdvo_priv *sdvo_priv;16851685+ struct i2c_algo_bit_data *algo_data;16861686+ struct i2c_algorithm *algo;16871687+16881688+ algo_data = (struct i2c_algo_bit_data *)i2c_adap->algo_data;16891689+ intel_output =16901690+ intel_sdvo_chan_to_intel_output(16911691+ (struct intel_i2c_chan *)(algo_data->data));16921692+ if (intel_output == NULL)16931693+ return -EINVAL;16941694+16951695+ sdvo_priv = intel_output->dev_priv;16961696+ algo = (struct i2c_algorithm *)intel_output->i2c_bus->adapter.algo;16971697+16981698+ intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus);16991699+ return algo->master_xfer(i2c_adap, msgs, num);17001700+}17011701+17021702+static struct i2c_algorithm intel_sdvo_i2c_bit_algo = {17031703+ .master_xfer = intel_sdvo_master_xfer,17041704+};17051705+17011706bool intel_sdvo_init(struct drm_device *dev, int output_device)17021707{17031708 struct drm_connector *connector;17041709 struct intel_output *intel_output;17051710 struct intel_sdvo_priv *sdvo_priv;17061711 struct intel_i2c_chan *i2cbus = NULL;17121712+ struct intel_i2c_chan *ddcbus = NULL;17071713 int connector_type;17081714 u8 ch[0x40];17091715 int i;···17581676 return false;17591677 }1760167817611761- connector = &intel_output->base;17621762-17631763- drm_connector_init(dev, connector, &intel_sdvo_connector_funcs,17641764- DRM_MODE_CONNECTOR_Unknown);17651765- drm_connector_helper_add(connector, &intel_sdvo_connector_helper_funcs);17661679 sdvo_priv = (struct intel_sdvo_priv *)(intel_output + 1);17671680 intel_output->type = INTEL_OUTPUT_SDVO;17681768-17691769- connector->interlace_allowed = 0;17701770- connector->doublescan_allowed = 0;1771168117721682 /* setup the DDC bus. */17731683 if (output_device == SDVOB)···17681694 i2cbus = intel_i2c_create(dev, GPIOE, "SDVOCTRL_E for SDVOC");1769169517701696 if (!i2cbus)17711771- goto err_connector;16971697+ goto err_inteloutput;1772169817731699 sdvo_priv->i2c_bus = i2cbus;17741700···17841710 intel_output->i2c_bus = i2cbus;17851711 intel_output->dev_priv = sdvo_priv;1786171217871787-17881713 /* Read the regs to test if we can talk to the device */17891714 for (i = 0; i < 0x40; i++) {17901715 if (!intel_sdvo_read_byte(intel_output, i, &ch[i])) {···17931720 }17941721 }1795172217231723+ /* setup the DDC bus. */17241724+ if (output_device == SDVOB)17251725+ ddcbus = intel_i2c_create(dev, GPIOE, "SDVOB DDC BUS");17261726+ else17271727+ ddcbus = intel_i2c_create(dev, GPIOE, "SDVOC DDC BUS");17281728+17291729+ if (ddcbus == NULL)17301730+ goto err_i2c;17311731+17321732+ intel_sdvo_i2c_bit_algo.functionality =17331733+ intel_output->i2c_bus->adapter.algo->functionality;17341734+ ddcbus->adapter.algo = &intel_sdvo_i2c_bit_algo;17351735+ intel_output->ddc_bus = ddcbus;17361736+17371737+ /* In defaut case sdvo lvds is false */17381738+ sdvo_priv->is_lvds = false;17961739 intel_sdvo_get_capabilities(intel_output, &sdvo_priv->caps);1797174017981741 if (sdvo_priv->caps.output_flags &···18181729 else18191730 sdvo_priv->controlled_output = SDVO_OUTPUT_TMDS1;1820173118211821- connector->display_info.subpixel_order = SubPixelHorizontalRGB;18221732 encoder_type = DRM_MODE_ENCODER_TMDS;18231733 connector_type = DRM_MODE_CONNECTOR_DVID;18241734···18351747 else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_SVID0)18361748 {18371749 sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0;18381838- connector->display_info.subpixel_order = SubPixelHorizontalRGB;18391750 encoder_type = DRM_MODE_ENCODER_TVDAC;18401751 connector_type = DRM_MODE_CONNECTOR_SVIDEO;18411752 sdvo_priv->is_tv = true;···18431756 else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_RGB0)18441757 {18451758 sdvo_priv->controlled_output = SDVO_OUTPUT_RGB0;18461846- connector->display_info.subpixel_order = SubPixelHorizontalRGB;18471759 encoder_type = DRM_MODE_ENCODER_DAC;18481760 connector_type = DRM_MODE_CONNECTOR_VGA;18491761 }18501762 else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_RGB1)18511763 {18521764 sdvo_priv->controlled_output = SDVO_OUTPUT_RGB1;18531853- connector->display_info.subpixel_order = SubPixelHorizontalRGB;18541765 encoder_type = DRM_MODE_ENCODER_DAC;18551766 connector_type = DRM_MODE_CONNECTOR_VGA;18561767 }18571768 else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_LVDS0)18581769 {18591770 sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS0;18601860- connector->display_info.subpixel_order = SubPixelHorizontalRGB;18611771 encoder_type = DRM_MODE_ENCODER_LVDS;18621772 connector_type = DRM_MODE_CONNECTOR_LVDS;17731773+ sdvo_priv->is_lvds = true;18631774 }18641775 else if (sdvo_priv->caps.output_flags & SDVO_OUTPUT_LVDS1)18651776 {18661777 sdvo_priv->controlled_output = SDVO_OUTPUT_LVDS1;18671867- connector->display_info.subpixel_order = SubPixelHorizontalRGB;18681778 encoder_type = DRM_MODE_ENCODER_LVDS;18691779 connector_type = DRM_MODE_CONNECTOR_LVDS;17801780+ sdvo_priv->is_lvds = true;18701781 }18711782 else18721783 {···18801795 goto err_i2c;18811796 }1882179717981798+ connector = &intel_output->base;17991799+ drm_connector_init(dev, connector, &intel_sdvo_connector_funcs,18001800+ connector_type);18011801+ drm_connector_helper_add(connector, &intel_sdvo_connector_helper_funcs);18021802+ connector->interlace_allowed = 0;18031803+ connector->doublescan_allowed = 0;18041804+ connector->display_info.subpixel_order = SubPixelHorizontalRGB;18051805+18831806 drm_encoder_init(dev, &intel_output->enc, &intel_sdvo_enc_funcs, encoder_type);18841807 drm_encoder_helper_add(&intel_output->enc, &intel_sdvo_helper_funcs);18851885- connector->connector_type = connector_type;1886180818871809 drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc);18881810 drm_sysfs_connector_add(connector);···19211829 sdvo_priv->caps.output_flags &19221830 (SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');1923183119241924- intel_output->ddc_bus = i2cbus;19251925-19261832 return true;1927183319281834err_i2c:18351835+ if (ddcbus != NULL)18361836+ intel_i2c_destroy(intel_output->ddc_bus);19291837 intel_i2c_destroy(intel_output->i2c_bus);19301930-err_connector:19311931- drm_connector_cleanup(connector);18381838+err_inteloutput:19321839 kfree(intel_output);1933184019341841 return false;
···4141module_param_named(debug, debug, uint, 0644);4242MODULE_PARM_DESC(debug, "Enable debug printks in this driver");43434444+static int forceload;4545+module_param_named(forceload, forceload, uint, 0644);4646+MODULE_PARM_DESC(debug, "Enable driver testing on unvalidated i5000");4747+4448#define dprintk(fmt, arg...) \4549 do { if (debug) printk(KERN_INFO I7300_PRINT fmt, ##arg); } while (0)4650···556552 cpus_clear(idle_cpumask);557553 total_us = 0;558554559559- if (i7300_idle_platform_probe(&fbd_dev, &ioat_dev))555555+ if (i7300_idle_platform_probe(&fbd_dev, &ioat_dev, forceload))560556 return -ENODEV;561557562558 if (i7300_idle_thrt_save())
+1
drivers/input/input.c
···4242 ABS_MT_POSITION_Y,4343 ABS_MT_TOOL_TYPE,4444 ABS_MT_BLOB_ID,4545+ ABS_MT_TRACKING_ID,4546 04647};4748static unsigned long input_abs_bypass[BITS_TO_LONGS(ABS_CNT)];
···358358 if (emulate_insn(cpu))359359 return;360360 }361361+ /* If KVM is active, the vmcall instruction triggers a362362+ * General Protection Fault. Normally it triggers an363363+ * invalid opcode fault (6): */364364+ case 6:365365+ /* We need to check if ring == GUEST_PL and366366+ * faulting instruction == vmcall. */367367+ if (is_hypercall(cpu)) {368368+ rewrite_hypercall(cpu);369369+ return;370370+ }361371 break;362372 case 14: /* We've intercepted a Page Fault. */363373 /* The Guest accessed a virtual address that wasn't mapped.···413403 * up the pointer now to indicate a hypercall is pending. */414404 cpu->hcall = (struct hcall_args *)cpu->regs;415405 return;416416- case 6:417417- /* kvm hypercalls trigger an invalid opcode fault (6).418418- * We need to check if ring == GUEST_PL and419419- * faulting instruction == vmcall. */420420- if (is_hypercall(cpu)) {421421- rewrite_hypercall(cpu);422422- return;423423- }424424- break;425406 }426407427408 /* We didn't handle the trap, so it needs to go to the Guest. */
···40274027 PCI_DMA_FROMDEVICE);4028402840294029 length = le16_to_cpu(rx_desc->length);40304030-40314031- if (unlikely(!(status & E1000_RXD_STAT_EOP))) {40304030+ /* !EOP means multiple descriptors were used to store a single40314031+ * packet, also make sure the frame isn't just CRC only */40324032+ if (unlikely(!(status & E1000_RXD_STAT_EOP) || (length <= 4))) {40324033 /* All receives must fit into a single buffer */40334034 E1000_DBG("%s: Receive packet consumed multiple"40344035 " buffers\n", netdev->name);
+13-2
drivers/net/forcedeth.c
···897897};898898static int phy_cross = NV_CROSSOVER_DETECTION_DISABLED;899899900900+/*901901+ * Power down phy when interface is down (persists through reboot;902902+ * older Linux and other OSes may not power it up again)903903+ */904904+static int phy_power_down = 0;905905+900906static inline struct fe_priv *get_nvpriv(struct net_device *dev)901907{902908 return netdev_priv(dev);···1491148514921486 /* restart auto negotiation, power down phy */14931487 mii_control = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);14941494- mii_control |= (BMCR_ANRESTART | BMCR_ANENABLE | BMCR_PDOWN);14881488+ mii_control |= (BMCR_ANRESTART | BMCR_ANENABLE);14891489+ if (phy_power_down) {14901490+ mii_control |= BMCR_PDOWN;14911491+ }14951492 if (mii_rw(dev, np->phyaddr, MII_BMCR, mii_control)) {14961493 return PHY_ERROR;14971494 }···5522551355235514 nv_drain_rxtx(dev);5524551555255525- if (np->wolenabled) {55165516+ if (np->wolenabled || !phy_power_down) {55265517 writel(NVREG_PFF_ALWAYS|NVREG_PFF_MYADDR, base + NvRegPacketFilterFlags);55275518 nv_start_rx(dev);55285519 } else {···63766367MODULE_PARM_DESC(dma_64bit, "High DMA is enabled by setting to 1 and disabled by setting to 0.");63776368module_param(phy_cross, int, 0);63786369MODULE_PARM_DESC(phy_cross, "Phy crossover detection for Realtek 8201 phy is enabled by setting to 1 and disabled by setting to 0.");63706370+module_param(phy_power_down, int, 0);63716371+MODULE_PARM_DESC(phy_power_down, "Power down phy and disable link when interface is down (1), or leave phy powered up (0).");6379637263806373MODULE_AUTHOR("Manfred Spraul <manfred@colorfullife.com>");63816374MODULE_DESCRIPTION("Reverse Engineered nForce ethernet driver");
+10-1
drivers/net/gianfar.c
···1885188518861886 if (unlikely(!newskb))18871887 newskb = skb;18881888- else if (skb)18881888+ else if (skb) {18891889+ /*18901890+ * We need to reset ->data to what it18911891+ * was before gfar_new_skb() re-aligned18921892+ * it to an RXBUF_ALIGNMENT boundary18931893+ * before we put the skb back on the18941894+ * recycle list.18951895+ */18961896+ skb->data = skb->head + NET_SKB_PAD;18891897 __skb_queue_head(&priv->rx_recycle, skb);18981898+ }18901899 } else {18911900 /* Increment the number of packets */18921901 dev->stats.rx_packets++;
···426426427427 INC_PERF_COUNTER(priv->pstats.tx_poll);428428429429- if (!spin_trylock(&ring->comp_lock)) {429429+ if (!spin_trylock_irq(&ring->comp_lock)) {430430 mod_timer(&cq->timer, jiffies + MLX4_EN_TX_POLL_TIMEOUT);431431 return;432432 }···439439 if (inflight && priv->port_up)440440 mod_timer(&cq->timer, jiffies + MLX4_EN_TX_POLL_TIMEOUT);441441442442- spin_unlock(&ring->comp_lock);442442+ spin_unlock_irq(&ring->comp_lock);443443}444444445445static struct mlx4_en_tx_desc *mlx4_en_bounce_to_desc(struct mlx4_en_priv *priv,···482482483483 /* Poll the CQ every mlx4_en_TX_MODER_POLL packets */484484 if ((++ring->poll_cnt & (MLX4_EN_TX_POLL_MODER - 1)) == 0)485485- if (spin_trylock(&ring->comp_lock)) {485485+ if (spin_trylock_irq(&ring->comp_lock)) {486486 mlx4_en_process_tx_cq(priv->dev, cq);487487- spin_unlock(&ring->comp_lock);487487+ spin_unlock_irq(&ring->comp_lock);488488 }489489}490490
+62-50
drivers/net/r8169.c
···35543554 int handled = 0;35553555 int status;3556355635573557+ /* loop handling interrupts until we have no new ones or35583558+ * we hit a invalid/hotplug case.35593559+ */35573560 status = RTL_R16(IntrStatus);35613561+ while (status && status != 0xffff) {35623562+ handled = 1;3558356335593559- /* hotplug/major error/no more work/shared irq */35603560- if ((status == 0xffff) || !status)35613561- goto out;35623562-35633563- handled = 1;35643564-35653565- if (unlikely(!netif_running(dev))) {35663566- rtl8169_asic_down(ioaddr);35673567- goto out;35683568- }35693569-35703570- status &= tp->intr_mask;35713571- RTL_W16(IntrStatus,35723572- (status & RxFIFOOver) ? (status | RxOverflow) : status);35733573-35743574- if (!(status & tp->intr_event))35753575- goto out;35763576-35773577- /* Work around for rx fifo overflow */35783578- if (unlikely(status & RxFIFOOver) &&35793579- (tp->mac_version == RTL_GIGA_MAC_VER_11)) {35803580- netif_stop_queue(dev);35813581- rtl8169_tx_timeout(dev);35823582- goto out;35833583- }35843584-35853585- if (unlikely(status & SYSErr)) {35863586- rtl8169_pcierr_interrupt(dev);35873587- goto out;35883588- }35893589-35903590- if (status & LinkChg)35913591- rtl8169_check_link_status(dev, tp, ioaddr);35923592-35933593- if (status & tp->napi_event) {35943594- RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);35953595- tp->intr_mask = ~tp->napi_event;35963596-35973597- if (likely(napi_schedule_prep(&tp->napi)))35983598- __napi_schedule(&tp->napi);35993599- else if (netif_msg_intr(tp)) {36003600- printk(KERN_INFO "%s: interrupt %04x in poll\n",36013601- dev->name, status);35643564+ /* Handle all of the error cases first. These will reset35653565+ * the chip, so just exit the loop.35663566+ */35673567+ if (unlikely(!netif_running(dev))) {35683568+ rtl8169_asic_down(ioaddr);35693569+ break;36023570 }35713571+35723572+ /* Work around for rx fifo overflow */35733573+ if (unlikely(status & RxFIFOOver) &&35743574+ (tp->mac_version == RTL_GIGA_MAC_VER_11)) {35753575+ netif_stop_queue(dev);35763576+ rtl8169_tx_timeout(dev);35773577+ break;35783578+ }35793579+35803580+ if (unlikely(status & SYSErr)) {35813581+ rtl8169_pcierr_interrupt(dev);35823582+ break;35833583+ }35843584+35853585+ if (status & LinkChg)35863586+ rtl8169_check_link_status(dev, tp, ioaddr);35873587+35883588+ /* We need to see the lastest version of tp->intr_mask to35893589+ * avoid ignoring an MSI interrupt and having to wait for35903590+ * another event which may never come.35913591+ */35923592+ smp_rmb();35933593+ if (status & tp->intr_mask & tp->napi_event) {35943594+ RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);35953595+ tp->intr_mask = ~tp->napi_event;35963596+35973597+ if (likely(napi_schedule_prep(&tp->napi)))35983598+ __napi_schedule(&tp->napi);35993599+ else if (netif_msg_intr(tp)) {36003600+ printk(KERN_INFO "%s: interrupt %04x in poll\n",36013601+ dev->name, status);36023602+ }36033603+ }36043604+36053605+ /* We only get a new MSI interrupt when all active irq36063606+ * sources on the chip have been acknowledged. So, ack36073607+ * everything we've seen and check if new sources have become36083608+ * active to avoid blocking all interrupts from the chip.36093609+ */36103610+ RTL_W16(IntrStatus,36113611+ (status & RxFIFOOver) ? (status | RxOverflow) : status);36123612+ status = RTL_R16(IntrStatus);36033613 }36043604-out:36143614+36053615 return IRQ_RETVAL(handled);36063616}36073617···3627361736283618 if (work_done < budget) {36293619 napi_complete(napi);36303630- tp->intr_mask = 0xffff;36313631- /*36323632- * 20040426: the barrier is not strictly required but the36333633- * behavior of the irq handler could be less predictable36343634- * without it. Btw, the lack of flush for the posted pci36353635- * write is safe - FR36203620+36213621+ /* We need for force the visibility of tp->intr_mask36223622+ * for other CPUs, as we can loose an MSI interrupt36233623+ * and potentially wait for a retransmit timeout if we don't.36243624+ * The posted write to IntrMask is safe, as it will36253625+ * eventually make it to the chip and we won't loose anything36263626+ * until it does.36363627 */36283628+ tp->intr_mask = 0xffff;36373629 smp_wmb();36383630 RTL_W16(IntrMask, tp->intr_event);36393631 }
+30-5
drivers/net/wimax/i2400m/usb.c
···505505#ifdef CONFIG_PM506506 struct usb_device *usb_dev = i2400mu->usb_dev;507507#endif508508+ unsigned is_autosuspend = 0;508509 struct i2400m *i2400m = &i2400mu->i2400m;510510+511511+#ifdef CONFIG_PM512512+ if (usb_dev->auto_pm > 0)513513+ is_autosuspend = 1;514514+#endif509515510516 d_fnstart(3, dev, "(iface %p pm_msg %u)\n", iface, pm_msg.event);511517 if (i2400m->updown == 0)512518 goto no_firmware;513513- d_printf(1, dev, "fw up, requesting standby\n");519519+ if (i2400m->state == I2400M_SS_DATA_PATH_CONNECTED && is_autosuspend) {520520+ /* ugh -- the device is connected and this suspend521521+ * request is an autosuspend one (not a system standby522522+ * / hibernate).523523+ *524524+ * The only way the device can go to standby is if the525525+ * link with the base station is in IDLE mode; that526526+ * were the case, we'd be in status527527+ * I2400M_SS_CONNECTED_IDLE. But we are not.528528+ *529529+ * If we *tell* him to go power save now, it'll reset530530+ * as a precautionary measure, so if this is an531531+ * autosuspend thing, say no and it'll come back532532+ * later, when the link is IDLE533533+ */534534+ result = -EBADF;535535+ d_printf(1, dev, "fw up, link up, not-idle, autosuspend: "536536+ "not entering powersave\n");537537+ goto error_not_now;538538+ }539539+ d_printf(1, dev, "fw up: entering powersave\n");514540 atomic_dec(&i2400mu->do_autopm);515541 result = i2400m_cmd_enter_powersave(i2400m);516542 atomic_inc(&i2400mu->do_autopm);517517-#ifdef CONFIG_PM518518- if (result < 0 && usb_dev->auto_pm == 0) {543543+ if (result < 0 && !is_autosuspend) {519544 /* System suspend, can't fail */520545 dev_err(dev, "failed to suspend, will reset on resume\n");521546 result = 0;522547 }523523-#endif524548 if (result < 0)525549 goto error_enter_powersave;526550 i2400mu_notification_release(i2400mu);527527- d_printf(1, dev, "fw up, got standby\n");551551+ d_printf(1, dev, "powersave requested\n");528552error_enter_powersave:553553+error_not_now:529554no_firmware:530555 d_fnend(3, dev, "(iface %p pm_msg %u) = %d\n",531556 iface, pm_msg.event, result);
+1
drivers/net/wireless/Kconfig
···430430 ASUS P5B Deluxe431431 Toshiba Satellite Pro series of laptops432432 Asus Wireless Link433433+ Linksys WUSB54GC-EU433434434435 Thanks to Realtek for their support!435436
+14-9
drivers/net/wireless/airo.c
···64676467{64686468 struct airo_info *local = dev->ml_priv;64696469 int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;64706470+ int wep_key_len;64706471 u8 buf[16];6471647264726473 if (!local->wep_capable)···65016500 dwrq->flags |= index + 1;6502650165036502 /* Copy the key to the user buffer */65046504- dwrq->length = get_wep_key(local, index, &buf[0], sizeof(buf));65056505- if (dwrq->length != -1)65066506- memcpy(extra, buf, dwrq->length);65076507- else65036503+ wep_key_len = get_wep_key(local, index, &buf[0], sizeof(buf));65046504+ if (wep_key_len < 0) {65086505 dwrq->length = 0;65066506+ } else {65076507+ dwrq->length = wep_key_len;65086508+ memcpy(extra, buf, dwrq->length);65096509+ }6509651065106511 return 0;65116512}···66206617 struct airo_info *local = dev->ml_priv;66216618 struct iw_point *encoding = &wrqu->encoding;66226619 struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;66236623- int idx, max_key_len;66206620+ int idx, max_key_len, wep_key_len;66246621 u8 buf[16];6625662266266623 if (!local->wep_capable)···66646661 memset(extra, 0, 16);6665666266666663 /* Copy the key to the user buffer */66676667- ext->key_len = get_wep_key(local, idx, &buf[0], sizeof(buf));66686668- if (ext->key_len != -1)66696669- memcpy(extra, buf, ext->key_len);66706670- else66646664+ wep_key_len = get_wep_key(local, idx, &buf[0], sizeof(buf));66656665+ if (wep_key_len < 0) {66716666 ext->key_len = 0;66676667+ } else {66686668+ ext->key_len = wep_key_len;66696669+ memcpy(extra, buf, ext->key_len);66706670+ }6672667166736672 return 0;66746673}
+6-6
drivers/net/wireless/at76c50x-usb.c
···18731873 if (ret != CMD_STATUS_COMPLETE) {18741874 queue_delayed_work(priv->hw->workqueue, &priv->dwork_hw_scan,18751875 SCAN_POLL_INTERVAL);18761876- goto exit;18761876+ mutex_unlock(&priv->mtx);18771877+ return;18771878 }18781878-18791879- ieee80211_scan_completed(priv->hw, false);1880187918811880 if (is_valid_ether_addr(priv->bssid))18821881 at76_join(priv);1883188218841884- ieee80211_wake_queues(priv->hw);18851885-18861886-exit:18871883 mutex_unlock(&priv->mtx);18841884+18851885+ ieee80211_scan_completed(priv->hw, false);18861886+18871887+ ieee80211_wake_queues(priv->hw);18881888}1889188918901890static int at76_hw_scan(struct ieee80211_hw *hw,
+25-18
drivers/net/wireless/ath5k/phy.c
···14871487{14881488 s8 tmp;14891489 s16 min_pwrL, min_pwrR;14901490- s16 pwr_i = pwrL[0];14901490+ s16 pwr_i;1491149114921492- do {14931493- pwr_i--;14941494- tmp = (s8) ath5k_get_interpolated_value(pwr_i,14951495- pwrL[0], pwrL[1],14961496- stepL[0], stepL[1]);14921492+ if (pwrL[0] == pwrL[1])14931493+ min_pwrL = pwrL[0];14941494+ else {14951495+ pwr_i = pwrL[0];14961496+ do {14971497+ pwr_i--;14981498+ tmp = (s8) ath5k_get_interpolated_value(pwr_i,14991499+ pwrL[0], pwrL[1],15001500+ stepL[0], stepL[1]);15011501+ } while (tmp > 1);1497150214981498- } while (tmp > 1);15031503+ min_pwrL = pwr_i;15041504+ }1499150515001500- min_pwrL = pwr_i;15061506+ if (pwrR[0] == pwrR[1])15071507+ min_pwrR = pwrR[0];15081508+ else {15091509+ pwr_i = pwrR[0];15101510+ do {15111511+ pwr_i--;15121512+ tmp = (s8) ath5k_get_interpolated_value(pwr_i,15131513+ pwrR[0], pwrR[1],15141514+ stepR[0], stepR[1]);15151515+ } while (tmp > 1);1501151615021502- pwr_i = pwrR[0];15031503- do {15041504- pwr_i--;15051505- tmp = (s8) ath5k_get_interpolated_value(pwr_i,15061506- pwrR[0], pwrR[1],15071507- stepR[0], stepR[1]);15081508-15091509- } while (tmp > 1);15101510-15111511- min_pwrR = pwr_i;15171517+ min_pwrR = pwr_i;15181518+ }1512151915131520 /* Keep the right boundary so that it works for both curves */15141521 return max(min_pwrL, min_pwrR);
+4-4
drivers/net/wireless/ath5k/reset.c
···2626\*****************************/27272828#include <linux/pci.h> /* To determine if a card is pci-e */2929-#include <linux/bitops.h> /* For get_bitmask_order */2929+#include <linux/log2.h>3030#include "ath5k.h"3131#include "reg.h"3232#include "base.h"···69697070 /* Get exponent7171 * ALGO: coef_exp = 14 - highest set bit position */7272- coef_exp = get_bitmask_order(coef_scaled);7272+ coef_exp = ilog2(coef_scaled);73737474 /* Doesn't make sense if it's zero*/7575- if (!coef_exp)7575+ if (!coef_scaled || !coef_exp)7676 return -EINVAL;77777878 /* Note: we've shifted coef_scaled by 24 */···359359 mode |= AR5K_PHY_MODE_FREQ_5GHZ;360360361361 if (ah->ah_radio == AR5K_RF5413)362362- clock |= AR5K_PHY_PLL_40MHZ_5413;362362+ clock = AR5K_PHY_PLL_40MHZ_5413;363363 else364364 clock |= AR5K_PHY_PLL_40MHZ;365365
+1-1
drivers/net/wireless/iwlwifi/iwl-5000.c
···4646#include "iwl-6000-hw.h"47474848/* Highest firmware API version supported */4949-#define IWL5000_UCODE_API_MAX 14949+#define IWL5000_UCODE_API_MAX 25050#define IWL5150_UCODE_API_MAX 251515252/* Lowest firmware API version supported */
-7
drivers/net/wireless/iwlwifi/iwl-agn.c
···669669 if (!iwl_is_ready_rf(priv))670670 return -EAGAIN;671671672672- cancel_delayed_work(&priv->scan_check);673673- if (iwl_scan_cancel_timeout(priv, 100)) {674674- IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");675675- IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");676676- return -EAGAIN;677677- }678678-679672 iwl_commit_rxon(priv);680673681674 return 0;
+4-3
drivers/net/wireless/iwlwifi/iwl-scan.c
···227227 /* The HW is no longer scanning */228228 clear_bit(STATUS_SCAN_HW, &priv->status);229229230230- /* The scan completion notification came in, so kill that timer... */231231- cancel_delayed_work(&priv->scan_check);232232-233230 IWL_DEBUG_INFO(priv, "Scan pass on %sGHz took %dms\n",234231 (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ)) ?235232 "2.4" : "5.2",···709712710713 mutex_lock(&priv->mutex);711714715715+ cancel_delayed_work(&priv->scan_check);716716+712717 if (!iwl_is_ready(priv)) {713718 IWL_WARN(priv, "request scan called when driver not ready.\n");714719 goto done;···923924 container_of(work, struct iwl_priv, scan_completed);924925925926 IWL_DEBUG_SCAN(priv, "SCAN complete scan\n");927927+928928+ cancel_delayed_work(&priv->scan_check);926929927930 ieee80211_scan_completed(priv->hw, false);928931
+2-7
drivers/net/wireless/iwlwifi/iwl3945-base.c
···782782 if (!iwl_is_ready_rf(priv))783783 return -EAGAIN;784784785785- cancel_delayed_work(&priv->scan_check);786786- if (iwl_scan_cancel_timeout(priv, 100)) {787787- IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");788788- IWL_DEBUG_MAC80211(priv, "leaving - scan abort failed.\n");789789- return -EAGAIN;790790- }791791-792785 iwl3945_commit_rxon(priv);793786794787 return 0;···32903297 conf = ieee80211_get_hw_conf(priv->hw);3291329832923299 mutex_lock(&priv->mutex);33003300+33013301+ cancel_delayed_work(&priv->scan_check);3293330232943303 if (!iwl_is_ready(priv)) {32953304 IWL_WARN(priv, "request scan called when driver not ready.\n");
+1-1
drivers/net/wireless/rt2x00/rt2x00debug.c
···138138139139 if (cipher == CIPHER_TKIP_NO_MIC)140140 cipher = CIPHER_TKIP;141141- if (cipher == CIPHER_NONE || cipher > CIPHER_MAX)141141+ if (cipher == CIPHER_NONE || cipher >= CIPHER_MAX)142142 return;143143144144 /* Remove CIPHER_NONE index */
···7878 op_ring_buffer_write = NULL;7979}80808181+#define RB_EVENT_HDR_SIZE 48282+8183int alloc_cpu_buffers(void)8284{8385 int i;84868587 unsigned long buffer_size = oprofile_cpu_buffer_size;8888+ unsigned long byte_size = buffer_size * (sizeof(struct op_sample) +8989+ RB_EVENT_HDR_SIZE);86908787- op_ring_buffer_read = ring_buffer_alloc(buffer_size, OP_BUFFER_FLAGS);9191+ op_ring_buffer_read = ring_buffer_alloc(byte_size, OP_BUFFER_FLAGS);8892 if (!op_ring_buffer_read)8993 goto fail;9090- op_ring_buffer_write = ring_buffer_alloc(buffer_size, OP_BUFFER_FLAGS);9494+ op_ring_buffer_write = ring_buffer_alloc(byte_size, OP_BUFFER_FLAGS);9195 if (!op_ring_buffer_write)9296 goto fail;9397
+2-2
drivers/parport/parport_gsc.c
···352352 unsigned long port;353353354354 if (!dev->irq) {355355- printk(KERN_WARNING "IRQ not found for parallel device at 0x%lx\n",356356- dev->hpa.start);355355+ printk(KERN_WARNING "IRQ not found for parallel device at 0x%llx\n",356356+ (unsigned long long)dev->hpa.start);357357 return -ENODEV;358358 }359359
+10-3
drivers/parport/share.c
···614614 * pardevice fields. -arca615615 */616616 port->ops->init_state(tmp, tmp->state);617617- parport_device_proc_register(tmp);617617+ if (!test_and_set_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags)) {618618+ port->proc_device = tmp;619619+ parport_device_proc_register(tmp);620620+ }618621 return tmp;619622620623 out_free_all:···649646 }650647#endif651648652652- parport_device_proc_unregister(dev);653653-654649 port = dev->port->physport;650650+651651+ if (port->proc_device == dev) {652652+ port->proc_device = NULL;653653+ clear_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags);654654+ parport_device_proc_unregister(dev);655655+ }655656656657 if (port->cad == dev) {657658 printk(KERN_DEBUG "%s: %s forgot to release port\n",
···32323333/*3434 * Lifetime rules for pci_dev:3535- * - The one in acpiphp_func has its refcount elevated by pci_get_slot()3636- * when the driver is loaded or when an insertion event occurs. It loses3737- * a refcount when its ejected or the driver unloads.3835 * - The one in acpiphp_bridge has its refcount elevated by pci_get_slot()3936 * when the bridge is scanned and it loses a refcount when the bridge4037 * is removed.···127130 unsigned long long adr, sun;128131 int device, function, retval;129132 struct pci_bus *pbus = bridge->pci_bus;133133+ struct pci_dev *pdev;130134131135 if (!acpi_pci_check_ejectable(pbus, handle) && !is_dock_device(handle))132136 return AE_OK;···211213 newfunc->slot = slot;212214 list_add_tail(&newfunc->sibling, &slot->funcs);213215214214- /* associate corresponding pci_dev */215215- newfunc->pci_dev = pci_get_slot(pbus, PCI_DEVFN(device, function));216216- if (newfunc->pci_dev) {216216+ pdev = pci_get_slot(pbus, PCI_DEVFN(device, function));217217+ if (pdev) {217218 slot->flags |= (SLOT_ENABLED | SLOT_POWEREDON);219219+ pci_dev_put(pdev);218220 }219221220222 if (is_dock_device(handle)) {···615617 if (ACPI_FAILURE(status))616618 err("failed to remove notify handler\n");617619 }618618- pci_dev_put(func->pci_dev);619620 list_del(list);620621 kfree(func);621622 }···10981101 pci_enable_bridges(bus);10991102 pci_bus_add_devices(bus);1100110311011101- /* associate pci_dev to our representation */11021104 list_for_each (l, &slot->funcs) {11031105 func = list_entry(l, struct acpiphp_func, sibling);11041104- func->pci_dev = pci_get_slot(bus, PCI_DEVFN(slot->device,11051105- func->function));11061106- if (!func->pci_dev)11061106+ dev = pci_get_slot(bus, PCI_DEVFN(slot->device,11071107+ func->function));11081108+ if (!dev)11071109 continue;1108111011091109- if (func->pci_dev->hdr_type != PCI_HEADER_TYPE_BRIDGE &&11101110- func->pci_dev->hdr_type != PCI_HEADER_TYPE_CARDBUS)11111111+ if (dev->hdr_type != PCI_HEADER_TYPE_BRIDGE &&11121112+ dev->hdr_type != PCI_HEADER_TYPE_CARDBUS) {11131113+ pci_dev_put(dev);11111114 continue;11151115+ }1112111611131117 status = find_p2p_bridge(func->handle, (u32)1, bus, NULL);11141118 if (ACPI_FAILURE(status))11151119 warn("find_p2p_bridge failed (error code = 0x%x)\n",11161120 status);11211121+ pci_dev_put(dev);11171122 }1118112311191124 slot->flags |= SLOT_ENABLED;···11411142 */11421143static int disable_device(struct acpiphp_slot *slot)11431144{11441144- int retval = 0;11451145 struct acpiphp_func *func;11461146- struct list_head *l;11461146+ struct pci_dev *pdev;1147114711481148 /* is this slot already disabled? */11491149 if (!(slot->flags & SLOT_ENABLED))11501150 goto err_exit;1151115111521152- list_for_each (l, &slot->funcs) {11531153- func = list_entry(l, struct acpiphp_func, sibling);11541154-11521152+ list_for_each_entry(func, &slot->funcs, sibling) {11551153 if (func->bridge) {11561154 /* cleanup p2p bridges under this P2P bridge */11571155 cleanup_p2p_bridge(func->bridge->handle,···11561160 func->bridge = NULL;11571161 }1158116211591159- if (func->pci_dev) {11601160- pci_stop_bus_device(func->pci_dev);11611161- if (func->pci_dev->subordinate) {11621162- disable_bridges(func->pci_dev->subordinate);11631163- pci_disable_device(func->pci_dev);11631163+ pdev = pci_get_slot(slot->bridge->pci_bus,11641164+ PCI_DEVFN(slot->device, func->function));11651165+ if (pdev) {11661166+ pci_stop_bus_device(pdev);11671167+ if (pdev->subordinate) {11681168+ disable_bridges(pdev->subordinate);11691169+ pci_disable_device(pdev);11641170 }11711171+ pci_remove_bus_device(pdev);11721172+ pci_dev_put(pdev);11651173 }11661174 }1167117511681168- list_for_each (l, &slot->funcs) {11691169- func = list_entry(l, struct acpiphp_func, sibling);11701170-11761176+ list_for_each_entry(func, &slot->funcs, sibling) {11711177 acpiphp_unconfigure_ioapics(func->handle);11721178 acpiphp_bus_trim(func->handle);11731173- /* try to remove anyway.11741174- * acpiphp_bus_add might have been failed */11751175-11761176- if (!func->pci_dev)11771177- continue;11781178-11791179- pci_remove_bus_device(func->pci_dev);11801180- pci_dev_put(func->pci_dev);11811181- func->pci_dev = NULL;11821179 }1183118011841181 slot->flags &= (~SLOT_ENABLED);1185118211861186- err_exit:11871187- return retval;11831183+err_exit:11841184+ return 0;11881185}1189118611901187
+15
drivers/serial/8250.c
···137137 unsigned char mcr;138138 unsigned char mcr_mask; /* mask of user bits */139139 unsigned char mcr_force; /* mask of forced bits */140140+ unsigned char cur_iotype; /* Running I/O type */140141141142 /*142143 * Some bits in registers are cleared on a read, so they must···472471473472static void set_io_from_upio(struct uart_port *p)474473{474474+ struct uart_8250_port *up = (struct uart_8250_port *)p;475475 switch (p->iotype) {476476 case UPIO_HUB6:477477 p->serial_in = hub6_serial_in;···511509 p->serial_out = io_serial_out;512510 break;513511 }512512+ /* Remember loaded iotype */513513+ up->cur_iotype = p->iotype;514514}515515516516static void···19411937 up->capabilities = uart_config[up->port.type].flags;19421938 up->mcr = 0;1943193919401940+ if (up->port.iotype != up->cur_iotype)19411941+ set_io_from_upio(port);19421942+19441943 if (up->port.type == PORT_16C950) {19451944 /* Wake up and initialize UART */19461945 up->acr = 0;···25702563 if (ret < 0)25712564 probeflags &= ~PROBE_RSA;2572256525662566+ if (up->port.iotype != up->cur_iotype)25672567+ set_io_from_upio(port);25682568+25732569 if (flags & UART_CONFIG_TYPE)25742570 autoconfig(up, probeflags);25752571 if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)···26802670serial8250_register_ports(struct uart_driver *drv, struct device *dev)26812671{26822672 int i;26732673+26742674+ for (i = 0; i < nr_uarts; i++) {26752675+ struct uart_8250_port *up = &serial8250_ports[i];26762676+ up->cur_iotype = 0xFF;26772677+ }2683267826842679 serial8250_isa_init_ports();26852680
+2-2
drivers/serial/8250_gsc.c
···3939 */4040 if (parisc_parent(dev)->id.hw_type != HPHW_IOA)4141 printk(KERN_INFO4242- "Serial: device 0x%lx not configured.\n"4242+ "Serial: device 0x%llx not configured.\n"4343 "Enable support for Wax, Lasi, Asp or Dino.\n",4444- dev->hpa.start);4444+ (unsigned long long)dev->hpa.start);4545 return -ENODEV;4646 }4747
+1-1
drivers/serial/mpc52xx_uart.c
···988988 pr_debug("mpc52xx_console_setup co=%p, co->index=%i, options=%s\n",989989 co, co->index, options);990990991991- if ((co->index < 0) || (co->index > MPC52xx_PSC_MAXNUM)) {991991+ if ((co->index < 0) || (co->index >= MPC52xx_PSC_MAXNUM)) {992992 pr_debug("PSC%x out of range\n", co->index);993993 return -EINVAL;994994 }
···16581658 u32 reg_base, or_reg, skip_reg;16591659 unsigned long flags;16601660 struct ptd ptd;16611661+ packet_enqueue *pe;1661166216621663 switch (usb_pipetype(urb->pipe)) {16631664 case PIPE_ISOCHRONOUS:···16701669 reg_base = INT_REGS_OFFSET;16711670 or_reg = HC_INT_IRQ_MASK_OR_REG;16721671 skip_reg = HC_INT_PTD_SKIPMAP_REG;16721672+ pe = enqueue_an_INT_packet;16731673 break;1674167416751675 default:···16781676 reg_base = ATL_REGS_OFFSET;16791677 or_reg = HC_ATL_IRQ_MASK_OR_REG;16801678 skip_reg = HC_ATL_PTD_SKIPMAP_REG;16791679+ pe = enqueue_an_ATL_packet;16811680 break;16821681 }16831682···16901687 u32 skip_map;16911688 u32 or_map;16921689 struct isp1760_qtd *qtd;16901690+ struct isp1760_qh *qh = ints->qh;1693169116941692 skip_map = isp1760_readl(hcd->regs + skip_reg);16951693 skip_map |= 1 << i;···17031699 priv_write_copy(priv, (u32 *)&ptd, hcd->regs + reg_base17041700 + i * sizeof(ptd), sizeof(ptd));17051701 qtd = ints->qtd;17061706-17071707- clean_up_qtdlist(qtd);17021702+ qtd = clean_up_qtdlist(qtd);1708170317091704 free_mem(priv, ints->payload);17101705···17141711 ints->payload = 0;1715171217161713 isp1760_urb_done(priv, urb, status);17141714+ if (qtd)17151715+ pe(hcd, qh, qtd);17171716 break;17171717+17181718+ } else if (ints->qtd) {17191719+ struct isp1760_qtd *qtd, *prev_qtd = ints->qtd;17201720+17211721+ for (qtd = ints->qtd->hw_next; qtd; qtd = qtd->hw_next) {17221722+ if (qtd->urb == urb) {17231723+ prev_qtd->hw_next = clean_up_qtdlist(qtd);17241724+ isp1760_urb_done(priv, urb, status);17251725+ break;17261726+ }17271727+ prev_qtd = qtd;17281728+ }17291729+ /* we found the urb before the end of the list */17301730+ if (qtd)17311731+ break;17181732 }17191733 ints++;17201734 }
+1
drivers/usb/serial/usb-serial.c
···974974 if (retval > 0) {975975 /* quietly accept this device, but don't bind to a976976 serial port as it's about to disappear */977977+ serial->num_ports = 0;977978 goto exit;978979 }979980 }
···947947 int win;948948949949 for (win = 0; win <= S3C_FB_MAX_WIN; win++)950950- s3c_fb_release_win(sfb, sfb->windows[win]);950950+ if (sfb->windows[win])951951+ s3c_fb_release_win(sfb, sfb->windows[win]);951952952953 iounmap(sfb->regs);953954···986985static int s3c_fb_resume(struct platform_device *pdev)987986{988987 struct s3c_fb *sfb = platform_get_drvdata(pdev);988988+ struct s3c_fb_platdata *pd = sfb->pdata;989989 struct s3c_fb_win *win;990990 int win_no;991991992992 clk_enable(sfb->bus_clk);993993994994+ /* setup registers */995995+ writel(pd->vidcon1, sfb->regs + VIDCON1);996996+997997+ /* zero all windows before we do anything */998998+ for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++)999999+ s3c_fb_clear_win(sfb, win_no);10001000+10011001+ /* restore framebuffers */9941002 for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++) {9951003 win = sfb->windows[win_no];9961004 if (!win)
+5-5
drivers/watchdog/Kconfig
···231231 NOTE: once enabled, this timer cannot be disabled.232232 Say N if you are unsure.233233234234-config ORION5X_WATCHDOG235235- tristate "Orion5x watchdog"236236- depends on ARCH_ORION5X234234+config ORION_WATCHDOG235235+ tristate "Orion watchdog"236236+ depends on ARCH_ORION5X || ARCH_KIRKWOOD237237 help238238 Say Y here if to include support for the watchdog timer239239- in the Orion5x ARM SoCs.239239+ in the Marvell Orion5x and Kirkwood ARM SoCs.240240 To compile this driver as a module, choose M here: the241241- module will be called orion5x_wdt.241241+ module will be called orion_wdt.242242243243# AVR32 Architecture244244
···480480 return;481481482482filebad:483483- mutex_lock(&c->erase_free_sem);484484- spin_lock(&c->erase_completion_lock);485485- /* Stick it on a list (any list) so erase_failed can take it486486- right off again. Silly, but shouldn't happen often. */487487- list_move(&jeb->list, &c->erasing_list);488488- spin_unlock(&c->erase_completion_lock);489489- mutex_unlock(&c->erase_free_sem);490483 jffs2_erase_failed(c, jeb, bad_offset);491484 return;492485
+3-6
fs/nfs/nfs4proc.c
···25942594 unsigned long timestamp = (unsigned long)data;2595259525962596 if (task->tk_status < 0) {25972597- switch (task->tk_status) {25982598- case -NFS4ERR_STALE_CLIENTID:25992599- case -NFS4ERR_EXPIRED:26002600- case -NFS4ERR_CB_PATH_DOWN:26012601- nfs4_schedule_state_recovery(clp);26022602- }25972597+ /* Unless we're shutting down, schedule state recovery! */25982598+ if (test_bit(NFS_CS_RENEWD, &clp->cl_res_state) != 0)25992599+ nfs4_schedule_state_recovery(clp);26032600 return;26042601 }26052602 spin_lock(&clp->cl_lock);
···1616struct fbd_ioat {1717 unsigned int vendor;1818 unsigned int ioat_dev;1919+ unsigned int enabled;1920};20212122/*2223 * The i5000 chip-set has the same hooks as the i73002323- * but support is disabled by default because this driver2424- * has not been validated on that platform.2424+ * but it is not enabled by default and must be manually2525+ * manually enabled with "forceload=1" because it is2626+ * only lightly validated.2527 */2626-#define SUPPORT_I5000 027282829static const struct fbd_ioat fbd_ioat_list[] = {2929- {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_CNB},3030-#if SUPPORT_I50003131- {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT},3232-#endif3030+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_CNB, 1},3131+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT, 0},3332 {0, 0}3433};35343635/* table of devices that work with this driver */3736static const struct pci_device_id pci_tbl[] = {3837 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_FBD_CNB) },3939-#if SUPPORT_I50004038 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5000_ERR) },4141-#endif4239 { } /* Terminating entry */4340};44414542/* Check for known platforms with I/O-AT */4643static inline int i7300_idle_platform_probe(struct pci_dev **fbd_dev,4747- struct pci_dev **ioat_dev)4444+ struct pci_dev **ioat_dev,4545+ int enable_all)4846{4947 int i;5048 struct pci_dev *memdev, *dmadev;···6769 for (i = 0; fbd_ioat_list[i].vendor != 0; i++) {6870 if (dmadev->vendor == fbd_ioat_list[i].vendor &&6971 dmadev->device == fbd_ioat_list[i].ioat_dev) {7272+ if (!(fbd_ioat_list[i].enabled || enable_all))7373+ continue;7074 if (fbd_dev)7175 *fbd_dev = memdev;7276 if (ioat_dev)
+1
include/linux/input.h
···656656#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */657657#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */658658#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */659659+#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */659660660661#define ABS_MAX 0x3f661662#define ABS_CNT (ABS_MAX+1)
···3535/* Has unacknowledged data */3636#define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x1037373838+/* The field td_maxack has been set */3939+#define IP_CT_TCP_FLAG_MAXACK_SET 0x204040+3841struct nf_ct_tcp_flags {3942 __u8 flags;4043 __u8 mask;···4946 u_int32_t td_end; /* max of seq + len */5047 u_int32_t td_maxend; /* max of ack + max(win, 1) */5148 u_int32_t td_maxwin; /* max(win) */4949+ u_int32_t td_maxack; /* max of ack */5250 u_int8_t td_scale; /* window scale factor */5351 u_int8_t flags; /* per direction options */5452};
+4
include/linux/parport.h
···324324 int spintime;325325 atomic_t ref_count;326326327327+ unsigned long devflags;328328+#define PARPORT_DEVPROC_REGISTERED 0329329+ struct pardevice *proc_device; /* Currently register proc device */330330+327331 struct list_head full_list;328332 struct parport *slaves[3];329333};
···9292static async_cookie_t __lowest_in_progress(struct list_head *running)9393{9494 struct async_entry *entry;9595+ async_cookie_t ret = next_cookie; /* begin with "infinity" value */9696+9597 if (!list_empty(running)) {9698 entry = list_first_entry(running,9799 struct async_entry, list);9898- return entry->cookie;9999- } else if (!list_empty(&async_pending)) {100100- entry = list_first_entry(&async_pending,101101- struct async_entry, list);102102- return entry->cookie;103103- } else {104104- /* nothing in progress... next_cookie is "infinity" */105105- return next_cookie;100100+ ret = entry->cookie;106101 }107102103103+ if (!list_empty(&async_pending)) {104104+ list_for_each_entry(entry, &async_pending, list)105105+ if (entry->running == running) {106106+ ret = entry->cookie;107107+ break;108108+ }109109+ }110110+111111+ return ret;108112}109113110114static async_cookie_t lowest_in_progress(struct list_head *running)
-2
kernel/kexec.c
···14511451 error = device_suspend(PMSG_FREEZE);14521452 if (error)14531453 goto Resume_console;14541454- device_pm_lock();14551454 /* At this point, device_suspend() has been called,14561455 * but *not* device_power_down(). We *must*14571456 * device_power_down() now. Otherwise, drivers for···14881489 enable_nonboot_cpus();14891490 device_power_up(PMSG_RESTORE);14901491 Resume_devices:14911491- device_pm_unlock();14921492 device_resume(PMSG_RESTORE);14931493 Resume_console:14941494 resume_console();
···121121 mapping->nrpages--;122122 __dec_zone_page_state(page, NR_FILE_PAGES);123123 BUG_ON(page_mapped(page));124124- mem_cgroup_uncharge_cache_page(page);125124126125 /*127126 * Some filesystems seem to re-dirty the page even after···144145 spin_lock_irq(&mapping->tree_lock);145146 __remove_from_page_cache(page);146147 spin_unlock_irq(&mapping->tree_lock);148148+ mem_cgroup_uncharge_cache_page(page);147149}148150149151static int sync_page(void *word)···476476 if (likely(!error)) {477477 mapping->nrpages++;478478 __inc_zone_page_state(page, NR_FILE_PAGES);479479+ spin_unlock_irq(&mapping->tree_lock);479480 } else {480481 page->mapping = NULL;482482+ spin_unlock_irq(&mapping->tree_lock);481483 mem_cgroup_uncharge_cache_page(page);482484 page_cache_release(page);483485 }484484-485485- spin_unlock_irq(&mapping->tree_lock);486486 radix_tree_preload_end();487487 } else488488 mem_cgroup_uncharge_cache_page(page);
+13-13
mm/hugetlb.c
···316316static struct resv_map *vma_resv_map(struct vm_area_struct *vma)317317{318318 VM_BUG_ON(!is_vm_hugetlb_page(vma));319319- if (!(vma->vm_flags & VM_SHARED))319319+ if (!(vma->vm_flags & VM_MAYSHARE))320320 return (struct resv_map *)(get_vma_private_data(vma) &321321 ~HPAGE_RESV_MASK);322322 return NULL;···325325static void set_vma_resv_map(struct vm_area_struct *vma, struct resv_map *map)326326{327327 VM_BUG_ON(!is_vm_hugetlb_page(vma));328328- VM_BUG_ON(vma->vm_flags & VM_SHARED);328328+ VM_BUG_ON(vma->vm_flags & VM_MAYSHARE);329329330330 set_vma_private_data(vma, (get_vma_private_data(vma) &331331 HPAGE_RESV_MASK) | (unsigned long)map);···334334static void set_vma_resv_flags(struct vm_area_struct *vma, unsigned long flags)335335{336336 VM_BUG_ON(!is_vm_hugetlb_page(vma));337337- VM_BUG_ON(vma->vm_flags & VM_SHARED);337337+ VM_BUG_ON(vma->vm_flags & VM_MAYSHARE);338338339339 set_vma_private_data(vma, get_vma_private_data(vma) | flags);340340}···353353 if (vma->vm_flags & VM_NORESERVE)354354 return;355355356356- if (vma->vm_flags & VM_SHARED) {356356+ if (vma->vm_flags & VM_MAYSHARE) {357357 /* Shared mappings always use reserves */358358 h->resv_huge_pages--;359359 } else if (is_vma_resv_set(vma, HPAGE_RESV_OWNER)) {···369369void reset_vma_resv_huge_pages(struct vm_area_struct *vma)370370{371371 VM_BUG_ON(!is_vm_hugetlb_page(vma));372372- if (!(vma->vm_flags & VM_SHARED))372372+ if (!(vma->vm_flags & VM_MAYSHARE))373373 vma->vm_private_data = (void *)0;374374}375375376376/* Returns true if the VMA has associated reserve pages */377377static int vma_has_reserves(struct vm_area_struct *vma)378378{379379- if (vma->vm_flags & VM_SHARED)379379+ if (vma->vm_flags & VM_MAYSHARE)380380 return 1;381381 if (is_vma_resv_set(vma, HPAGE_RESV_OWNER))382382 return 1;···924924 struct address_space *mapping = vma->vm_file->f_mapping;925925 struct inode *inode = mapping->host;926926927927- if (vma->vm_flags & VM_SHARED) {927927+ if (vma->vm_flags & VM_MAYSHARE) {928928 pgoff_t idx = vma_hugecache_offset(h, vma, addr);929929 return region_chg(&inode->i_mapping->private_list,930930 idx, idx + 1);···949949 struct address_space *mapping = vma->vm_file->f_mapping;950950 struct inode *inode = mapping->host;951951952952- if (vma->vm_flags & VM_SHARED) {952952+ if (vma->vm_flags & VM_MAYSHARE) {953953 pgoff_t idx = vma_hugecache_offset(h, vma, addr);954954 region_add(&inode->i_mapping->private_list, idx, idx + 1);955955···18931893 * at the time of fork() could consume its reserves on COW instead18941894 * of the full address range.18951895 */18961896- if (!(vma->vm_flags & VM_SHARED) &&18961896+ if (!(vma->vm_flags & VM_MAYSHARE) &&18971897 is_vma_resv_set(vma, HPAGE_RESV_OWNER) &&18981898 old_page != pagecache_page)18991899 outside_reserve = 1;···20002000 clear_huge_page(page, address, huge_page_size(h));20012001 __SetPageUptodate(page);2002200220032003- if (vma->vm_flags & VM_SHARED) {20032003+ if (vma->vm_flags & VM_MAYSHARE) {20042004 int err;20052005 struct inode *inode = mapping->host;20062006···21042104 goto out_mutex;21052105 }2106210621072107- if (!(vma->vm_flags & VM_SHARED))21072107+ if (!(vma->vm_flags & VM_MAYSHARE))21082108 pagecache_page = hugetlbfs_pagecache_page(h,21092109 vma, address);21102110 }···22892289 * to reserve the full area even if read-only as mprotect() may be22902290 * called to make the mapping read-write. Assume !vma is a shm mapping22912291 */22922292- if (!vma || vma->vm_flags & VM_SHARED)22922292+ if (!vma || vma->vm_flags & VM_MAYSHARE)22932293 chg = region_chg(&inode->i_mapping->private_list, from, to);22942294 else {22952295 struct resv_map *resv_map = resv_map_alloc();···23302330 * consumed reservations are stored in the map. Hence, nothing23312331 * else has to be done for private mappings here23322332 */23332333- if (!vma || vma->vm_flags & VM_SHARED)23332333+ if (!vma || vma->vm_flags & VM_MAYSHARE)23342334 region_add(&inode->i_mapping->private_list, from, to);23352335 return 0;23362336}
+4-10
mm/memcontrol.c
···314314 return mem;315315}316316317317-static bool mem_cgroup_is_obsolete(struct mem_cgroup *mem)318318-{319319- if (!mem)320320- return true;321321- return css_is_removed(&mem->css);322322-}323323-324324-325317/*326318 * Call callback function against all cgroup under hierarchy tree.327319 */···924932 if (unlikely(!mem))925933 return 0;926934927927- VM_BUG_ON(!mem || mem_cgroup_is_obsolete(mem));935935+ VM_BUG_ON(css_is_removed(&mem->css));928936929937 while (1) {930938 int ret;···14801488 __mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE);14811489}1482149014911491+#ifdef CONFIG_SWAP14831492/*14841484- * called from __delete_from_swap_cache() and drop "page" account.14931493+ * called after __delete_from_swap_cache() and drop "page" account.14851494 * memcg information is recorded to swap_cgroup of "ent"14861495 */14871496void mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)···14991506 if (memcg)15001507 css_put(&memcg->css);15011508}15091509+#endif1502151015031511#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP15041512/*
+15-9
mm/oom_kill.c
···284284 printk(KERN_INFO "[ pid ] uid tgid total_vm rss cpu oom_adj "285285 "name\n");286286 do_each_thread(g, p) {287287- /*288288- * total_vm and rss sizes do not exist for tasks with a289289- * detached mm so there's no need to report them.290290- */291291- if (!p->mm)292292- continue;287287+ struct mm_struct *mm;288288+293289 if (mem && !task_in_mem_cgroup(p, mem))294290 continue;295291 if (!thread_group_leader(p))296292 continue;297293298294 task_lock(p);295295+ mm = p->mm;296296+ if (!mm) {297297+ /*298298+ * total_vm and rss sizes do not exist for tasks with no299299+ * mm so there's no need to report them; they can't be300300+ * oom killed anyway.301301+ */302302+ task_unlock(p);303303+ continue;304304+ }299305 printk(KERN_INFO "[%5d] %5d %5d %8lu %8lu %3d %3d %s\n",300300- p->pid, __task_cred(p)->uid, p->tgid,301301- p->mm->total_vm, get_mm_rss(p->mm), (int)task_cpu(p),302302- p->oomkilladj, p->comm);306306+ p->pid, __task_cred(p)->uid, p->tgid, mm->total_vm,307307+ get_mm_rss(mm), (int)task_cpu(p), p->oomkilladj,308308+ p->comm);303309 task_unlock(p);304310 } while_each_thread(g, p);305311}
···24472447 if (pkt_dev->cflows) {24482448 /* let go of the SAs if we have them */24492449 int i = 0;24502450- for (; i < pkt_dev->nflows; i++){24502450+ for (; i < pkt_dev->cflows; i++) {24512451 struct xfrm_state *x = pkt_dev->flows[i].x;24522452 if (x) {24532453 xfrm_state_put(x);
···784784{785785 static unsigned int rover;786786 unsigned int i = rover, goal;787787- struct rtable *rth, **rthp;788788- unsigned long length = 0, samples = 0;787787+ struct rtable *rth, *aux, **rthp;788788+ unsigned long samples = 0;789789 unsigned long sum = 0, sum2 = 0;790790 u64 mult;791791···795795 goal = (unsigned int)mult;796796 if (goal > rt_hash_mask)797797 goal = rt_hash_mask + 1;798798- length = 0;799798 for (; goal > 0; goal--) {800799 unsigned long tmo = ip_rt_gc_timeout;800800+ unsigned long length;801801802802 i = (i + 1) & rt_hash_mask;803803 rthp = &rt_hash_table[i].chain;···809809810810 if (*rthp == NULL)811811 continue;812812+ length = 0;812813 spin_lock_bh(rt_hash_lock_addr(i));813814 while ((rth = *rthp) != NULL) {815815+ prefetch(rth->u.dst.rt_next);814816 if (rt_is_expired(rth)) {815817 *rthp = rth->u.dst.rt_next;816818 rt_free(rth);···821819 if (rth->u.dst.expires) {822820 /* Entry is expired even if it is in use */823821 if (time_before_eq(jiffies, rth->u.dst.expires)) {822822+nofree:824823 tmo >>= 1;825824 rthp = &rth->u.dst.rt_next;826825 /*827827- * Only bump our length if the hash828828- * inputs on entries n and n+1 are not829829- * the same, we only count entries on826826+ * We only count entries on830827 * a chain with equal hash inputs once831828 * so that entries for different QOS832829 * levels, and other non-hash input833830 * attributes don't unfairly skew834831 * the length computation835832 */836836- if ((*rthp == NULL) ||837837- !compare_hash_inputs(&(*rthp)->fl,838838- &rth->fl))839839- length += ONE;833833+ for (aux = rt_hash_table[i].chain;;) {834834+ if (aux == rth) {835835+ length += ONE;836836+ break;837837+ }838838+ if (compare_hash_inputs(&aux->fl, &rth->fl))839839+ break;840840+ aux = aux->u.dst.rt_next;841841+ }840842 continue;841843 }842842- } else if (!rt_may_expire(rth, tmo, ip_rt_gc_timeout)) {843843- tmo >>= 1;844844- rthp = &rth->u.dst.rt_next;845845- if ((*rthp == NULL) ||846846- !compare_hash_inputs(&(*rthp)->fl,847847- &rth->fl))848848- length += ONE;849849- continue;850850- }844844+ } else if (!rt_may_expire(rth, tmo, ip_rt_gc_timeout))845845+ goto nofree;851846852847 /* Cleanup aged off entries. */853848 *rthp = rth->u.dst.rt_next;···10671068static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp)10681069{10691070 struct rtable *rth, **rthp;10701070- struct rtable *rthi;10711071 unsigned long now;10721072 struct rtable *cand, **candp;10731073 u32 min_score;···10861088 }1087108910881090 rthp = &rt_hash_table[hash].chain;10891089- rthi = NULL;1090109110911092 spin_lock_bh(rt_hash_lock_addr(hash));10921093 while ((rth = *rthp) != NULL) {···11311134 chain_length++;1132113511331136 rthp = &rth->u.dst.rt_next;11341134-11351135- /*11361136- * check to see if the next entry in the chain11371137- * contains the same hash input values as rt. If it does11381138- * This is where we will insert into the list, instead of11391139- * at the head. This groups entries that differ by aspects not11401140- * relvant to the hash function together, which we use to adjust11411141- * our chain length11421142- */11431143- if (*rthp && compare_hash_inputs(&(*rthp)->fl, &rt->fl))11441144- rthi = rth;11451137 }1146113811471139 if (cand) {···11911205 }11921206 }1193120711941194- if (rthi)11951195- rt->u.dst.rt_next = rthi->u.dst.rt_next;11961196- else11971197- rt->u.dst.rt_next = rt_hash_table[hash].chain;12081208+ rt->u.dst.rt_next = rt_hash_table[hash].chain;1198120911991210#if RT_CACHE_DEBUG >= 212001211 if (rt->u.dst.rt_next) {···12071224 * previous writes to rt are comitted to memory12081225 * before making rt visible to other CPUS.12091226 */12101210- if (rthi)12111211- rcu_assign_pointer(rthi->u.dst.rt_next, rt);12121212- else12131213- rcu_assign_pointer(rt_hash_table[hash].chain, rt);12271227+ rcu_assign_pointer(rt_hash_table[hash].chain, rt);1214122812151229 spin_unlock_bh(rt_hash_lock_addr(hash));12161230 *rp = rt;
+9-2
net/ipv4/tcp_vegas.c
···158158}159159EXPORT_SYMBOL_GPL(tcp_vegas_cwnd_event);160160161161+static inline u32 tcp_vegas_ssthresh(struct tcp_sock *tp)162162+{163163+ return min(tp->snd_ssthresh, tp->snd_cwnd-1);164164+}165165+161166static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, u32 in_flight)162167{163168 struct tcp_sock *tp = tcp_sk(sk);···226221 */227222 diff = tp->snd_cwnd * (rtt-vegas->baseRTT) / vegas->baseRTT;228223229229- if (diff > gamma && tp->snd_ssthresh > 2 ) {224224+ if (diff > gamma && tp->snd_cwnd <= tp->snd_ssthresh) {230225 /* Going too fast. Time to slow down231226 * and switch to congestion avoidance.232227 */233233- tp->snd_ssthresh = 2;234228235229 /* Set cwnd to match the actual rate236230 * exactly:···239235 * utilization.240236 */241237 tp->snd_cwnd = min(tp->snd_cwnd, (u32)target_cwnd+1);238238+ tp->snd_ssthresh = tcp_vegas_ssthresh(tp);242239243240 } else if (tp->snd_cwnd <= tp->snd_ssthresh) {244241 /* Slow start. */···255250 * we slow down.256251 */257252 tp->snd_cwnd--;253253+ tp->snd_ssthresh254254+ = tcp_vegas_ssthresh(tp);258255 } else if (diff < alpha) {259256 /* We don't have enough extra packets260257 * in the network, so speed up.
···926926 if (!hlist_empty(&htable->hash[*bucket])) {927927 hlist_for_each_entry(ent, pos, &htable->hash[*bucket], node)928928 if (dl_seq_real_show(ent, htable->family, s))929929- return 1;929929+ return -1;930930 }931931 return 0;932932}
+6-6
net/rxrpc/ar-connection.c
···343343 /* not yet present - create a candidate for a new connection344344 * and then redo the check */345345 conn = rxrpc_alloc_connection(gfp);346346- if (IS_ERR(conn)) {347347- _leave(" = %ld", PTR_ERR(conn));348348- return PTR_ERR(conn);346346+ if (!conn) {347347+ _leave(" = -ENOMEM");348348+ return -ENOMEM;349349 }350350351351 conn->trans = trans;···508508 /* not yet present - create a candidate for a new connection and then509509 * redo the check */510510 candidate = rxrpc_alloc_connection(gfp);511511- if (IS_ERR(candidate)) {512512- _leave(" = %ld", PTR_ERR(candidate));513513- return PTR_ERR(candidate);511511+ if (!candidate) {512512+ _leave(" = -ENOMEM");513513+ return -ENOMEM;514514 }515515516516 candidate->trans = trans;
+17-6
net/sched/cls_api.c
···135135 unsigned long cl;136136 unsigned long fh;137137 int err;138138+ int tp_created = 0;138139139140 if (net != &init_net)140141 return -EINVAL;···267266 goto errout;268267 }269268270270- spin_lock_bh(root_lock);271271- tp->next = *back;272272- *back = tp;273273- spin_unlock_bh(root_lock);269269+ tp_created = 1;274270275271 } else if (tca[TCA_KIND] && nla_strcmp(tca[TCA_KIND], tp->ops->kind))276272 goto errout;···294296 switch (n->nlmsg_type) {295297 case RTM_NEWTFILTER:296298 err = -EEXIST;297297- if (n->nlmsg_flags & NLM_F_EXCL)299299+ if (n->nlmsg_flags & NLM_F_EXCL) {300300+ if (tp_created)301301+ tcf_destroy(tp);298302 goto errout;303303+ }299304 break;300305 case RTM_DELTFILTER:301306 err = tp->ops->delete(tp, fh);···315314 }316315317316 err = tp->ops->change(tp, cl, t->tcm_handle, tca, &fh);318318- if (err == 0)317317+ if (err == 0) {318318+ if (tp_created) {319319+ spin_lock_bh(root_lock);320320+ tp->next = *back;321321+ *back = tp;322322+ spin_unlock_bh(root_lock);323323+ }319324 tfilter_notify(skb, n, tp, fh, RTM_NEWTFILTER);325325+ } else {326326+ if (tp_created)327327+ tcf_destroy(tp);328328+ }320329321330errout:322331 if (cl)
+11-11
net/sched/cls_cgroup.c
···104104 struct tcf_result *res)105105{106106 struct cls_cgroup_head *head = tp->root;107107- struct cgroup_cls_state *cs;108108- int ret = 0;107107+ u32 classid;109108110109 /*111110 * Due to the nature of the classifier it is required to ignore all···120121 return -1;121122122123 rcu_read_lock();123123- cs = task_cls_state(current);124124- if (cs->classid && tcf_em_tree_match(skb, &head->ematches, NULL)) {125125- res->classid = cs->classid;126126- res->class = 0;127127- ret = tcf_exts_exec(skb, &head->exts, res);128128- } else129129- ret = -1;130130-124124+ classid = task_cls_state(current)->classid;131125 rcu_read_unlock();132126133133- return ret;127127+ if (!classid)128128+ return -1;129129+130130+ if (!tcf_em_tree_match(skb, &head->ematches, NULL))131131+ return -1;132132+133133+ res->classid = classid;134134+ res->class = 0;135135+ return tcf_exts_exec(skb, &head->exts, res);134136}135137136138static unsigned long cls_cgroup_get(struct tcf_proto *tp, u32 handle)
+28-7
net/sunrpc/svcsock.c
···345345 lock_sock(sock->sk);346346 sock->sk->sk_sndbuf = snd * 2;347347 sock->sk->sk_rcvbuf = rcv * 2;348348+ sock->sk->sk_userlocks |= SOCK_SNDBUF_LOCK|SOCK_RCVBUF_LOCK;348349 release_sock(sock->sk);349350#endif350351}···797796 test_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags),798797 test_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags));799798799799+ if (test_and_clear_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags))800800+ /* sndbuf needs to have room for one request801801+ * per thread, otherwise we can stall even when the802802+ * network isn't a bottleneck.803803+ *804804+ * We count all threads rather than threads in a805805+ * particular pool, which provides an upper bound806806+ * on the number of threads which will access the socket.807807+ *808808+ * rcvbuf just needs to be able to hold a few requests.809809+ * Normally they will be removed from the queue810810+ * as soon a a complete request arrives.811811+ */812812+ svc_sock_setbufsize(svsk->sk_sock,813813+ (serv->sv_nrthreads+3) * serv->sv_max_mesg,814814+ 3 * serv->sv_max_mesg);815815+800816 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);801817802818 /* Receive data. If we haven't got the record length yet, get···1061104310621044 tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF;1063104510461046+ /* initialise setting must have enough space to10471047+ * receive and respond to one request.10481048+ * svc_tcp_recvfrom will re-adjust if necessary10491049+ */10501050+ svc_sock_setbufsize(svsk->sk_sock,10511051+ 3 * svsk->sk_xprt.xpt_server->sv_max_mesg,10521052+ 3 * svsk->sk_xprt.xpt_server->sv_max_mesg);10531053+10541054+ set_bit(XPT_CHNGBUF, &svsk->sk_xprt.xpt_flags);10641055 set_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);10651056 if (sk->sk_state != TCP_ESTABLISHED)10661057 set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);···11391112 /* Initialize the socket */11401113 if (sock->type == SOCK_DGRAM)11411114 svc_udp_init(svsk, serv);11421142- else {11431143- /* initialise setting must have enough space to11441144- * receive and respond to one request.11451145- */11461146- svc_sock_setbufsize(svsk->sk_sock, 4 * serv->sv_max_mesg,11471147- 4 * serv->sv_max_mesg);11151115+ else11481116 svc_tcp_init(svsk, serv);11491149- }1150111711511118 dprintk("svc: svc_setup_socket created %p (inet %p)\n",11521119 svsk, svsk->sk_sk);
+6-6
net/sunrpc/xprtrdma/svc_rdma_sendto.c
···128128 page_bytes -= sge_bytes;129129130130 frmr->page_list->page_list[page_no] =131131- ib_dma_map_page(xprt->sc_cm_id->device, page, 0,131131+ ib_dma_map_single(xprt->sc_cm_id->device,132132+ page_address(page),132133 PAGE_SIZE, DMA_TO_DEVICE);133134 if (ib_dma_mapping_error(xprt->sc_cm_id->device,134135 frmr->page_list->page_list[page_no]))···533532 clear_bit(RDMACTXT_F_FAST_UNREG, &ctxt->flags);534533535534 /* Prepare the SGE for the RPCRDMA Header */535535+ ctxt->sge[0].lkey = rdma->sc_dma_lkey;536536+ ctxt->sge[0].length = svc_rdma_xdr_get_reply_hdr_len(rdma_resp);536537 ctxt->sge[0].addr =537537- ib_dma_map_page(rdma->sc_cm_id->device,538538- page, 0, PAGE_SIZE, DMA_TO_DEVICE);538538+ ib_dma_map_single(rdma->sc_cm_id->device, page_address(page),539539+ ctxt->sge[0].length, DMA_TO_DEVICE);539540 if (ib_dma_mapping_error(rdma->sc_cm_id->device, ctxt->sge[0].addr))540541 goto err;541542 atomic_inc(&rdma->sc_dma_used);542543543544 ctxt->direction = DMA_TO_DEVICE;544544-545545- ctxt->sge[0].length = svc_rdma_xdr_get_reply_hdr_len(rdma_resp);546546- ctxt->sge[0].lkey = rdma->sc_dma_lkey;547545548546 /* Determine how many of our SGE are to be transmitted */549547 for (sge_no = 1; byte_count && sge_no < vec->count; sge_no++) {
+5-5
net/sunrpc/xprtrdma/svc_rdma_transport.c
···500500 BUG_ON(sge_no >= xprt->sc_max_sge);501501 page = svc_rdma_get_page();502502 ctxt->pages[sge_no] = page;503503- pa = ib_dma_map_page(xprt->sc_cm_id->device,504504- page, 0, PAGE_SIZE,503503+ pa = ib_dma_map_single(xprt->sc_cm_id->device,504504+ page_address(page), PAGE_SIZE,505505 DMA_FROM_DEVICE);506506 if (ib_dma_mapping_error(xprt->sc_cm_id->device, pa))507507 goto err_put_ctxt;···13151315 length = svc_rdma_xdr_encode_error(xprt, rmsgp, err, va);1316131613171317 /* Prepare SGE for local address */13181318- sge.addr = ib_dma_map_page(xprt->sc_cm_id->device,13191319- p, 0, PAGE_SIZE, DMA_FROM_DEVICE);13181318+ sge.addr = ib_dma_map_single(xprt->sc_cm_id->device,13191319+ page_address(p), PAGE_SIZE, DMA_FROM_DEVICE);13201320 if (ib_dma_mapping_error(xprt->sc_cm_id->device, sge.addr)) {13211321 put_page(p);13221322 return;···13431343 if (ret) {13441344 dprintk("svcrdma: Error %d posting send for protocol error\n",13451345 ret);13461346- ib_dma_unmap_page(xprt->sc_cm_id->device,13461346+ ib_dma_unmap_single(xprt->sc_cm_id->device,13471347 sge.addr, PAGE_SIZE,13481348 DMA_FROM_DEVICE);13491349 svc_rdma_put_context(ctxt, 1);
···1551155115521552 queue_regulatory_request(request);1553155315541554+ /*15551555+ * This ensures last_request is populated once modules15561556+ * come swinging in and calling regulatory hints and15571557+ * wiphy_apply_custom_regulatory().15581558+ */15591559+ flush_scheduled_work();15601560+15541561 return 0;15551562}15561563
···27272828static int tomoyo_bprm_set_creds(struct linux_binprm *bprm)2929{3030+ int rc;3131+3232+ rc = cap_bprm_set_creds(bprm);3333+ if (rc)3434+ return rc;3535+3036 /*3137 * Do only if this function is called for the first time of an execve3238 * operation.
+8-2
sound/core/pcm_lib.c
···249249 new_hw_ptr = hw_base + pos;250250 }251251 }252252+253253+ /* Do jiffies check only in xrun_debug mode */254254+ if (!xrun_debug(substream))255255+ goto no_jiffies_check;256256+252257 /* Skip the jiffies check for hardwares with BATCH flag.253258 * Such hardware usually just increases the position at each IRQ,254259 * thus it can't give any strange position.···341336 hw_base = 0;342337 new_hw_ptr = hw_base + pos;343338 }344344- if (((delta * HZ) / runtime->rate) > jdelta + HZ/100) {339339+ /* Do jiffies check only in xrun_debug mode */340340+ if (xrun_debug(substream) &&341341+ ((delta * HZ) / runtime->rate) > jdelta + HZ/100) {345342 hw_ptr_error(substream,346343 "hw_ptr skipping! "347344 "(pos=%ld, delta=%ld, period=%ld, jdelta=%lu/%lu)\n",···14851478 runtime->status->hw_ptr %= runtime->buffer_size;14861479 else14871480 runtime->status->hw_ptr = 0;14881488- runtime->hw_ptr_jiffies = jiffies;14891481 snd_pcm_stream_unlock_irqrestore(substream, flags);14901482 return 0;14911483}
+6
sound/core/pcm_native.c
···848848{849849 struct snd_pcm_runtime *runtime = substream->runtime;850850 snd_pcm_trigger_tstamp(substream);851851+ runtime->hw_ptr_jiffies = jiffies;851852 runtime->status->state = state;852853 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&853854 runtime->silence_size > 0)···962961{963962 if (substream->runtime->trigger_master != substream)964963 return 0;964964+ /* The jiffies check in snd_pcm_update_hw_ptr*() is done by965965+ * a delta betwen the current jiffies, this gives a large enough966966+ * delta, effectively to skip the check once.967967+ */968968+ substream->runtime->hw_ptr_jiffies = jiffies - HZ * 1000;965969 return substream->ops->trigger(substream,966970 push ? SNDRV_PCM_TRIGGER_PAUSE_PUSH :967971 SNDRV_PCM_TRIGGER_PAUSE_RELEASE);
+1
sound/pci/hda/hda_intel.c
···21412141 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */21422142 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),21432143 /* forced codec slots */21442144+ SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),21442145 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),21452146 {}21462147};
···17781778 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;17791779 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);17801780 break;17811781- case QUIRK_MIDI_RAW:17811781+ case QUIRK_MIDI_FASTLANE:17821782 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;17831783+ /*17841784+ * Interface 1 contains isochronous endpoints, but with the same17851785+ * numbers as in interface 0. Since it is interface 1 that the17861786+ * USB core has most recently seen, these descriptors are now17871787+ * associated with the endpoint numbers. This will foul up our17881788+ * attempts to submit bulk/interrupt URBs to the endpoints in17891789+ * interface 0, so we have to make sure that the USB core looks17901790+ * again at interface 0 by calling usb_set_interface() on it.17911791+ */17921792+ usb_set_interface(umidi->chip->dev, 0, 0);17831793 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);17841794 break;17851795 case QUIRK_MIDI_EMAGIC: