···3434 cpu = smp_processor_id();3535 ++nmi_count(cpu);36363737- if (!rcu_dereference(nmi_callback)(regs, cpu))3737+ if (!rcu_dereference_sched(nmi_callback)(regs, cpu))3838 default_do_nmi(regs);39394040 nmi_exit();···4747default_do_nmi() function to handle a machine-specific NMI. Finally,4848preemption is restored.49495050-Strictly speaking, rcu_dereference() is not needed, since this code runs5151-only on i386, which does not need rcu_dereference() anyway. However,5252-it is a good documentation aid, particularly for anyone attempting to5353-do something similar on Alpha.5050+In theory, rcu_dereference_sched() is not needed, since this code runs5151+only on i386, which in theory does not need rcu_dereference_sched()5252+anyway. However, in practice it is a good documentation aid, particularly5353+for anyone attempting to do something similar on Alpha or on systems5454+with aggressive optimizing compilers.54555555-Quick Quiz: Why might the rcu_dereference() be necessary on Alpha,5656+Quick Quiz: Why might the rcu_dereference_sched() be necessary on Alpha,5657 given that the code referenced by the pointer is read-only?57585859···10099101100Answer to Quick Quiz102101103103- Why might the rcu_dereference() be necessary on Alpha, given102102+ Why might the rcu_dereference_sched() be necessary on Alpha, given104103 that the code referenced by the pointer is read-only?105104106105 Answer: The caller to set_nmi_callback() might well have107107- initialized some data that is to be used by the108108- new NMI handler. In this case, the rcu_dereference()109109- would be needed, because otherwise a CPU that received110110- an NMI just after the new handler was set might see111111- the pointer to the new NMI handler, but the old112112- pre-initialized version of the handler's data.106106+ initialized some data that is to be used by the new NMI107107+ handler. In this case, the rcu_dereference_sched() would108108+ be needed, because otherwise a CPU that received an NMI109109+ just after the new handler was set might see the pointer110110+ to the new NMI handler, but the old pre-initialized111111+ version of the handler's data.113112114114- More important, the rcu_dereference() makes it clear115115- to someone reading the code that the pointer is being116116- protected by RCU.113113+ This same sad story can happen on other CPUs when using114114+ a compiler with aggressive pointer-value speculation115115+ optimizations.116116+117117+ More important, the rcu_dereference_sched() makes it118118+ clear to someone reading the code that the pointer is119119+ being protected by RCU-sched.
+4-3
Documentation/RCU/checklist.txt
···260260 The reason that it is permissible to use RCU list-traversal261261 primitives when the update-side lock is held is that doing so262262 can be quite helpful in reducing code bloat when common code is263263- shared between readers and updaters.263263+ shared between readers and updaters. Additional primitives264264+ are provided for this case, as discussed in lockdep.txt.26426526526610. Conversely, if you are in an RCU read-side critical section,266267 and you don't hold the appropriate update-side lock, you -must-···345344 requiring SRCU's read-side deadlock immunity or low read-side346345 realtime latency.347346348348- Note that, rcu_assign_pointer() and rcu_dereference() relate to349349- SRCU just as they do to other forms of RCU.347347+ Note that, rcu_assign_pointer() relates to SRCU just as they do348348+ to other forms of RCU.35034935135015. The whole point of call_rcu(), synchronize_rcu(), and friends352351 is to wait until all pre-existing readers have finished before
+26-2
Documentation/RCU/lockdep.txt
···3232 srcu_dereference(p, sp):3333 Check for SRCU read-side critical section.3434 rcu_dereference_check(p, c):3535- Use explicit check expression "c".3535+ Use explicit check expression "c". This is useful in3636+ code that is invoked by both readers and updaters.3637 rcu_dereference_raw(p)3738 Don't check. (Use sparingly, if at all.)3939+ rcu_dereference_protected(p, c):4040+ Use explicit check expression "c", and omit all barriers4141+ and compiler constraints. This is useful when the data4242+ structure cannot change, for example, in code that is4343+ invoked only by updaters.4444+ rcu_access_pointer(p):4545+ Return the value of the pointer and omit all barriers,4646+ but retain the compiler constraints that prevent duplicating4747+ or coalescsing. This is useful when when testing the4848+ value of the pointer itself, for example, against NULL.38493950The rcu_dereference_check() check expression can be any boolean4051expression, but would normally include one of the rcu_read_lock_held()···7059RCU read-side critical sections, in case (2) the ->file_lock prevents7160any change from taking place, and finally, in case (3) the current task7261is the only task accessing the file_struct, again preventing any change7373-from taking place.6262+from taking place. If the above statement was invoked only from updater6363+code, it could instead be written as follows:6464+6565+ file = rcu_dereference_protected(fdt->fd[fd],6666+ lockdep_is_held(&files->file_lock) ||6767+ atomic_read(&files->count) == 1);6868+6969+This would verify cases #2 and #3 above, and furthermore lockdep would7070+complain if this was used in an RCU read-side critical section unless one7171+of these two cases held. Because rcu_dereference_protected() omits all7272+barriers and compiler constraints, it generates better code than do the7373+other flavors of rcu_dereference(). On the other hand, it is illegal7474+to use rcu_dereference_protected() if either the RCU-protected pointer7575+or the RCU-protected data that it points to can change concurrently.74767577There are currently only "universal" versions of the rcu_assign_pointer()7678and RCU list-/tree-traversal primitives, which do not (yet) check for
+6
Documentation/RCU/whatisRCU.txt
···840840 init_srcu_struct841841 cleanup_srcu_struct842842843843+All: lockdep-checked RCU-protected pointer access844844+845845+ rcu_dereference_check846846+ rcu_dereference_protected847847+ rcu_access_pointer848848+843849See the comment headers in the source code (or the docbook generated844850from them) for more information.845851
+17-6
Documentation/input/multi-touch-protocol.txt
···6868 SYN_MT_REPORT6969 SYN_REPORT70707171+Here is the sequence after lifting one of the fingers:7272+7373+ ABS_MT_POSITION_X7474+ ABS_MT_POSITION_Y7575+ SYN_MT_REPORT7676+ SYN_REPORT7777+7878+And here is the sequence after lifting the remaining finger:7979+8080+ SYN_MT_REPORT8181+ SYN_REPORT8282+8383+If the driver reports one of BTN_TOUCH or ABS_PRESSURE in addition to the8484+ABS_MT events, the last SYN_MT_REPORT event may be omitted. Otherwise, the8585+last SYN_REPORT will be dropped by the input core, resulting in no8686+zero-finger event reaching userland.71877288Event Semantics7389---------------···233217difference between the contact position and the approaching tool position234218could be used to derive tilt.235219[2] The list can of course be extended.236236-[3] The multi-touch X driver is currently in the prototyping stage. At the237237-time of writing (April 2009), the MT protocol is not yet merged, and the238238-prototype implements finger matching, basic mouse support and two-finger239239-scrolling. The project aims at improving the quality of current multi-touch240240-functionality available in the Synaptics X driver, and in addition241241-implement more advanced gestures.220220+[3] Multitouch X driver project: http://bitmath.org/code/multitouch/.242221[4] See the section on event computation.243222[5] See the section on finger tracking.
-5
Documentation/kernel-parameters.txt
···320320 amd_iommu= [HW,X86-84]321321 Pass parameters to the AMD IOMMU driver in the system.322322 Possible values are:323323- isolate - enable device isolation (each device, as far324324- as possible, will get its own protection325325- domain) [default]326326- share - put every device behind one IOMMU into the327327- same protection domain328323 fullflush - enable flushing of IO/TLB entries when329324 they are unmapped. Otherwise they are330325 flushed before they will be reused, which
+12-2
MAINTAINERS
···485485F: drivers/input/mouse/bcm5974.c486486487487APPLE SMC DRIVER488488-M: Nicolas Boichat <nicolas@boichat.ch>489489-L: mactel-linux-devel@lists.sourceforge.net488488+M: Henrik Rydberg <rydberg@euromail.se>489489+L: lm-sensors@lm-sensors.org490490S: Maintained491491F: drivers/hwmon/applesmc.c492492···970970L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)971971W: http://www.mcuos.com972972S: Maintained973973+974974+ARM/U300 MACHINE SUPPORT975975+M: Linus Walleij <linus.walleij@stericsson.com>976976+L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)977977+S: Supported978978+F: arch/arm/mach-u300/979979+F: drivers/i2c/busses/i2c-stu300.c980980+F: drivers/rtc/rtc-coh901331.c981981+F: drivers/watchdog/coh901327_wdt.c982982+F: drivers/dma/coh901318*973983974984ARM/U8500 ARM ARCHITECTURE975985M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
+2-2
Makefile
···11VERSION = 222PATCHLEVEL = 633SUBLEVEL = 3444-EXTRAVERSION = -rc355-NAME = Man-Eating Seals of Antiquity44+EXTRAVERSION = -rc555+NAME = Sheep on Meth6677# *DOCUMENTATION*88# To see a list of typical targets execute "make help"
···5959#endif /* CONFIG_IWMMXT */60606161#ifdef CONFIG_VFP6262-#if __LINUX_ARM_ARCH__ < 66363-/* For ARM pre-v6, we use fstmiax and fldmiax. This adds one extra6464- * word after the registers, and a word of padding at the end for6565- * alignment. */6662#define VFP_MAGIC 0x564650016767-#define VFP_STORAGE_SIZE 1526868-#else6969-#define VFP_MAGIC 0x564650027070-#define VFP_STORAGE_SIZE 1447171-#endif72637364struct vfp_sigframe7465{7566 unsigned long magic;7667 unsigned long size;7777- union vfp_state storage;7878-};6868+ struct user_vfp ufp;6969+ struct user_vfp_exc ufp_exc;7070+} __attribute__((__aligned__(8)));7171+7272+/*7373+ * 8 byte for magic and size, 264 byte for ufp, 12 bytes for ufp_exc,7474+ * 4 bytes padding.7575+ */7676+#define VFP_STORAGE_SIZE sizeof(struct vfp_sigframe)7777+7978#endif /* CONFIG_VFP */80798180/*···9091#ifdef CONFIG_IWMMXT9192 struct iwmmxt_sigframe iwmmxt;9293#endif9393-#if 0 && defined CONFIG_VFP /* Not yet saved. */9494+#ifdef CONFIG_VFP9495 struct vfp_sigframe vfp;9596#endif9697 /* Something that isn't a valid magic number for any coprocessor. */
+11-1
arch/arm/include/asm/user.h
···83838484/*8585 * User specific VFP registers. If only VFPv2 is present, registers 16 to 318686- * are ignored by the ptrace system call.8686+ * are ignored by the ptrace system call and the signal handler.8787 */8888struct user_vfp {8989 unsigned long long fpregs[32];9090 unsigned long fpscr;9191+};9292+9393+/*9494+ * VFP exception registers exposed to user space during signal delivery.9595+ * Fields not relavant to the current VFP architecture are ignored.9696+ */9797+struct user_vfp_exc {9898+ unsigned long fpexc;9999+ unsigned long fpinst;100100+ unsigned long fpinst2;91101};9210293103#endif /* _ARM_USER_H */
+89-4
arch/arm/kernel/signal.c
···1818#include <asm/cacheflush.h>1919#include <asm/ucontext.h>2020#include <asm/unistd.h>2121+#include <asm/vfp.h>21222223#include "ptrace.h"2324#include "signal.h"···176175177176#endif178177178178+#ifdef CONFIG_VFP179179+180180+static int preserve_vfp_context(struct vfp_sigframe __user *frame)181181+{182182+ struct thread_info *thread = current_thread_info();183183+ struct vfp_hard_struct *h = &thread->vfpstate.hard;184184+ const unsigned long magic = VFP_MAGIC;185185+ const unsigned long size = VFP_STORAGE_SIZE;186186+ int err = 0;187187+188188+ vfp_sync_hwstate(thread);189189+ __put_user_error(magic, &frame->magic, err);190190+ __put_user_error(size, &frame->size, err);191191+192192+ /*193193+ * Copy the floating point registers. There can be unused194194+ * registers see asm/hwcap.h for details.195195+ */196196+ err |= __copy_to_user(&frame->ufp.fpregs, &h->fpregs,197197+ sizeof(h->fpregs));198198+ /*199199+ * Copy the status and control register.200200+ */201201+ __put_user_error(h->fpscr, &frame->ufp.fpscr, err);202202+203203+ /*204204+ * Copy the exception registers.205205+ */206206+ __put_user_error(h->fpexc, &frame->ufp_exc.fpexc, err);207207+ __put_user_error(h->fpinst, &frame->ufp_exc.fpinst, err);208208+ __put_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err);209209+210210+ return err ? -EFAULT : 0;211211+}212212+213213+static int restore_vfp_context(struct vfp_sigframe __user *frame)214214+{215215+ struct thread_info *thread = current_thread_info();216216+ struct vfp_hard_struct *h = &thread->vfpstate.hard;217217+ unsigned long magic;218218+ unsigned long size;219219+ unsigned long fpexc;220220+ int err = 0;221221+222222+ __get_user_error(magic, &frame->magic, err);223223+ __get_user_error(size, &frame->size, err);224224+225225+ if (err)226226+ return -EFAULT;227227+ if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE)228228+ return -EINVAL;229229+230230+ /*231231+ * Copy the floating point registers. There can be unused232232+ * registers see asm/hwcap.h for details.233233+ */234234+ err |= __copy_from_user(&h->fpregs, &frame->ufp.fpregs,235235+ sizeof(h->fpregs));236236+ /*237237+ * Copy the status and control register.238238+ */239239+ __get_user_error(h->fpscr, &frame->ufp.fpscr, err);240240+241241+ /*242242+ * Sanitise and restore the exception registers.243243+ */244244+ __get_user_error(fpexc, &frame->ufp_exc.fpexc, err);245245+ /* Ensure the VFP is enabled. */246246+ fpexc |= FPEXC_EN;247247+ /* Ensure FPINST2 is invalid and the exception flag is cleared. */248248+ fpexc &= ~(FPEXC_EX | FPEXC_FP2V);249249+ h->fpexc = fpexc;250250+251251+ __get_user_error(h->fpinst, &frame->ufp_exc.fpinst, err);252252+ __get_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err);253253+254254+ if (!err)255255+ vfp_flush_hwstate(thread);256256+257257+ return err ? -EFAULT : 0;258258+}259259+260260+#endif261261+179262/*180263 * Do a signal return; undo the signal stack. These are aligned to 64-bit.181264 */···318233 err |= restore_iwmmxt_context(&aux->iwmmxt);319234#endif320235#ifdef CONFIG_VFP321321-// if (err == 0)322322-// err |= vfp_restore_state(&sf->aux.vfp);236236+ if (err == 0)237237+ err |= restore_vfp_context(&aux->vfp);323238#endif324239325240 return err;···433348 err |= preserve_iwmmxt_context(&aux->iwmmxt);434349#endif435350#ifdef CONFIG_VFP436436-// if (err == 0)437437-// err |= vfp_save_state(&sf->aux.vfp);351351+ if (err == 0)352352+ err |= preserve_vfp_context(&aux->vfp);438353#endif439354 __put_user_error(0, &aux->end_magic, err);440355
···6262 Include support for MX31PDK (3DS) platform. This includes specific6363 configurations for the board and its peripherals.64646565+config MACH_MX31_3DS_MXC_NAND_USE_BBT6666+ bool "Make the MXC NAND driver use the in flash Bad Block Table"6767+ depends on MACH_MX31_3DS6868+ depends on MTD_NAND_MXC6969+ help7070+ Enable this if you want that the MXC NAND driver uses the in flash7171+ Bad Block Table to know what blocks are bad instead of scanning the7272+ entire flash looking for bad block markers.7373+6574config MACH_MX31MOBOARD6675 bool "Support mx31moboard platforms (EPFL Mobots group)"6776 select ARCH_MX31···10495config MACH_ARMADILLO5X010596 bool "Support Atmark Armadillo-500 Development Base Board"10697 select ARCH_MX319898+ select MXC_ULPI if USB_ULPI10799 help108100 Include support for Atmark Armadillo-500 platform. This includes109101 specific configurations for the board and its peripherals.
···13131414#include <asm/cacheflush.h>1515#include <asm/cachetype.h>1616+#include <asm/highmem.h>1617#include <asm/smp_plat.h>1718#include <asm/system.h>1819#include <asm/tlbflush.h>···153152154153void __flush_dcache_page(struct address_space *mapping, struct page *page)155154{156156- void *addr = page_address(page);157157-158155 /*159156 * Writeback any data associated with the kernel mapping of this160157 * page. This ensures that data in the physical page is mutually161158 * coherent with the kernels mapping.162159 */163163-#ifdef CONFIG_HIGHMEM164164- /*165165- * kmap_atomic() doesn't set the page virtual address, and166166- * kunmap_atomic() takes care of cache flushing already.167167- */168168- if (addr)169169-#endif170170- __cpuc_flush_dcache_area(addr, PAGE_SIZE);160160+ if (!PageHighMem(page)) {161161+ __cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);162162+ } else {163163+ void *addr = kmap_high_get(page);164164+ if (addr) {165165+ __cpuc_flush_dcache_area(addr, PAGE_SIZE);166166+ kunmap_high(page);167167+ } else if (cache_is_vipt()) {168168+ pte_t saved_pte;169169+ addr = kmap_high_l1_vipt(page, &saved_pte);170170+ __cpuc_flush_dcache_area(addr, PAGE_SIZE);171171+ kunmap_high_l1_vipt(page, saved_pte);172172+ }173173+ }171174172175 /*173176 * If this is a page cache page, and we have an aliasing VIPT cache,
+86-1
arch/arm/mm/highmem.c
···7979 unsigned int idx = type + KM_TYPE_NR * smp_processor_id();80808181 if (kvaddr >= (void *)FIXADDR_START) {8282- __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);8282+ if (cache_is_vivt())8383+ __cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);8384#ifdef CONFIG_DEBUG_HIGHMEM8485 BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx));8586 set_pte_ext(TOP_PTE(vaddr), __pte(0), 0);···125124 pte = TOP_PTE(vaddr);126125 return pte_page(*pte);127126}127127+128128+#ifdef CONFIG_CPU_CACHE_VIPT129129+130130+#include <linux/percpu.h>131131+132132+/*133133+ * The VIVT cache of a highmem page is always flushed before the page134134+ * is unmapped. Hence unmapped highmem pages need no cache maintenance135135+ * in that case.136136+ *137137+ * However unmapped pages may still be cached with a VIPT cache, and138138+ * it is not possible to perform cache maintenance on them using physical139139+ * addresses unfortunately. So we have no choice but to set up a temporary140140+ * virtual mapping for that purpose.141141+ *142142+ * Yet this VIPT cache maintenance may be triggered from DMA support143143+ * functions which are possibly called from interrupt context. As we don't144144+ * want to keep interrupt disabled all the time when such maintenance is145145+ * taking place, we therefore allow for some reentrancy by preserving and146146+ * restoring the previous fixmap entry before the interrupted context is147147+ * resumed. If the reentrancy depth is 0 then there is no need to restore148148+ * the previous fixmap, and leaving the current one in place allow it to149149+ * be reused the next time without a TLB flush (common with DMA).150150+ */151151+152152+static DEFINE_PER_CPU(int, kmap_high_l1_vipt_depth);153153+154154+void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte)155155+{156156+ unsigned int idx, cpu = smp_processor_id();157157+ int *depth = &per_cpu(kmap_high_l1_vipt_depth, cpu);158158+ unsigned long vaddr, flags;159159+ pte_t pte, *ptep;160160+161161+ idx = KM_L1_CACHE + KM_TYPE_NR * cpu;162162+ vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);163163+ ptep = TOP_PTE(vaddr);164164+ pte = mk_pte(page, kmap_prot);165165+166166+ if (!in_interrupt())167167+ preempt_disable();168168+169169+ raw_local_irq_save(flags);170170+ (*depth)++;171171+ if (pte_val(*ptep) == pte_val(pte)) {172172+ *saved_pte = pte;173173+ } else {174174+ *saved_pte = *ptep;175175+ set_pte_ext(ptep, pte, 0);176176+ local_flush_tlb_kernel_page(vaddr);177177+ }178178+ raw_local_irq_restore(flags);179179+180180+ return (void *)vaddr;181181+}182182+183183+void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte)184184+{185185+ unsigned int idx, cpu = smp_processor_id();186186+ int *depth = &per_cpu(kmap_high_l1_vipt_depth, cpu);187187+ unsigned long vaddr, flags;188188+ pte_t pte, *ptep;189189+190190+ idx = KM_L1_CACHE + KM_TYPE_NR * cpu;191191+ vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);192192+ ptep = TOP_PTE(vaddr);193193+ pte = mk_pte(page, kmap_prot);194194+195195+ BUG_ON(pte_val(*ptep) != pte_val(pte));196196+ BUG_ON(*depth <= 0);197197+198198+ raw_local_irq_save(flags);199199+ (*depth)--;200200+ if (*depth != 0 && pte_val(pte) != pte_val(saved_pte)) {201201+ set_pte_ext(ptep, saved_pte, 0);202202+ local_flush_tlb_kernel_page(vaddr);203203+ }204204+ raw_local_irq_restore(flags);205205+206206+ if (!in_interrupt())207207+ preempt_enable();208208+}209209+210210+#endif /* CONFIG_CPU_CACHE_VIPT */
+10-4
arch/arm/mm/mmu.c
···420420 user_pgprot |= L_PTE_SHARED;421421 kern_pgprot |= L_PTE_SHARED;422422 vecs_pgprot |= L_PTE_SHARED;423423+ mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_S;424424+ mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_SHARED;425425+ mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S;426426+ mem_types[MT_DEVICE_CACHED].prot_pte |= L_PTE_SHARED;423427 mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;424428 mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_S;425429#endif···10541050 pgd_t *pgd;10551051 int i;1056105210571057- if (current->mm && current->mm->pgd)10581058- pgd = current->mm->pgd;10591059- else10601060- pgd = init_mm.pgd;10531053+ /*10541054+ * We need to access to user-mode page tables here. For kernel threads10551055+ * we don't have any user-mode mappings so we use the context that we10561056+ * "borrowed".10571057+ */10581058+ pgd = current->active_mm->pgd;1061105910621060 base_pmdval = PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | PMD_TYPE_SECT;10631061 if (cpu_architecture() <= CPU_ARCH_ARMv5TEJ && !cpu_is_xscale())
···88 * published by the Free Software Foundation.99 */10101111-#ifndef __ASM_ARCH_MXC_BOARD_MX31PDK_H__1212-#define __ASM_ARCH_MXC_BOARD_MX31PDK_H__1111+#ifndef __ASM_ARCH_MXC_BOARD_MX31_3DS_H__1212+#define __ASM_ARCH_MXC_BOARD_MX31_3DS_H__13131414/* Definitions for components on the Debug board */1515···56565757#define MXC_MAX_EXP_IO_LINES 1658585959-#endif /* __ASM_ARCH_MXC_BOARD_MX31PDK_H__ */5959+#endif /* __ASM_ARCH_MXC_BOARD_MX31_3DS_H__ */
···6666#define MX2X_UART1_BASE_ADDR 0x1000a0006767#define MX3X_UART1_BASE_ADDR 0x43F900006868#define MX3X_UART2_BASE_ADDR 0x43F940006969+#define MX51_UART1_BASE_ADDR 0x73fbc00069707071static __inline__ void __arch_decomp_setup(unsigned long arch_id)7172{···101100 break;102101 case MACH_TYPE_MAGX_ZN5:103102 uart_base = MX3X_UART2_BASE_ADDR;103103+ break;104104+ case MACH_TYPE_MX51_BABBAGE:105105+ uart_base = MX51_UART1_BASE_ADDR;104106 break;105107 default:106108 break;
+10-21
arch/arm/vfp/vfpmodule.c
···428428static inline void vfp_pm_init(void) { }429429#endif /* CONFIG_PM */430430431431-/*432432- * Synchronise the hardware VFP state of a thread other than current with the433433- * saved one. This function is used by the ptrace mechanism.434434- */435435-#ifdef CONFIG_SMP436436-void vfp_sync_hwstate(struct thread_info *thread)437437-{438438-}439439-440440-void vfp_flush_hwstate(struct thread_info *thread)441441-{442442- /*443443- * On SMP systems, the VFP state is automatically saved at every444444- * context switch. We mark the thread VFP state as belonging to a445445- * non-existent CPU so that the saved one will be reloaded when446446- * needed.447447- */448448- thread->vfpstate.hard.cpu = NR_CPUS;449449-}450450-#else451431void vfp_sync_hwstate(struct thread_info *thread)452432{453433 unsigned int cpu = get_cpu();···470490 last_VFP_context[cpu] = NULL;471491 }472492493493+#ifdef CONFIG_SMP494494+ /*495495+ * For SMP we still have to take care of the case where the thread496496+ * migrates to another CPU and then back to the original CPU on which497497+ * the last VFP user is still the same thread. Mark the thread VFP498498+ * state as belonging to a non-existent CPU so that the saved one will499499+ * be reloaded in the above case.500500+ */501501+ thread->vfpstate.hard.cpu = NR_CPUS;502502+#endif473503 put_cpu();474504}475475-#endif476505477506#include <linux/smp.h>478507
···1717#ifndef __uClinux__1818# ifdef __mcoldfire__1919 unsigned long sc_fpregs[2][2]; /* room for two fp registers */2020- unsigned long sc_fpcntl[3];2121- unsigned char sc_fpstate[16+6*8];2220# else2321 unsigned long sc_fpregs[2*3]; /* room for two fp registers */2222+# endif2423 unsigned long sc_fpcntl[3];2524 unsigned char sc_fpstate[216];2626-# endif2725#endif2826};2927
-40
arch/mips/alchemy/devboards/db1200/setup.c
···6060 wmb();6161}62626363-/* use the hexleds to count the number of times the cpu has entered6464- * wait, the dots to indicate whether the CPU is currently idle or6565- * active (dots off = sleeping, dots on = working) for cases where6666- * the number doesn't change for a long(er) period of time.6767- */6868-static void db1200_wait(void)6969-{7070- __asm__(" .set push \n"7171- " .set mips3 \n"7272- " .set noreorder \n"7373- " cache 0x14, 0(%0) \n"7474- " cache 0x14, 32(%0) \n"7575- " cache 0x14, 64(%0) \n"7676- /* dots off: we're about to call wait */7777- " lui $26, 0xb980 \n"7878- " ori $27, $0, 3 \n"7979- " sb $27, 0x18($26) \n"8080- " sync \n"8181- " nop \n"8282- " wait \n"8383- " nop \n"8484- " nop \n"8585- " nop \n"8686- " nop \n"8787- " nop \n"8888- /* dots on: there's work to do, increment cntr */8989- " lui $26, 0xb980 \n"9090- " sb $0, 0x18($26) \n"9191- " lui $26, 0xb9c0 \n"9292- " lb $27, 0($26) \n"9393- " addiu $27, $27, 1 \n"9494- " sb $27, 0($26) \n"9595- " sync \n"9696- " .set pop \n"9797- : : "r" (db1200_wait));9898-}9999-10063static int __init db1200_arch_init(void)10164{10265 /* GPIO7 is low-level triggered CPLD cascade */···72109 */73110 irq_to_desc(DB1200_SD0_INSERT_INT)->status |= IRQ_NOAUTOEN;74111 irq_to_desc(DB1200_SD0_EJECT_INT)->status |= IRQ_NOAUTOEN;7575-7676- if (cpu_wait)7777- cpu_wait = db1200_wait;7811279113 return 0;80114}
···4545extern void pci_console_init(const char *arg);4646#endif47474848-#ifdef CONFIG_CAVIUM_RESERVE324949-extern uint64_t octeon_reserve32_memory;5050-#endif5148static unsigned long long MAX_MEMORY = 512ull << 20;52495350struct octeon_boot_descriptor *octeon_boot_desc_ptr;···183186 write_octeon_c0_dcacheerr(0);184187}185188186186-#ifdef CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB187187-/**188188- * Called on every core to setup the wired tlb entry needed189189- * if CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB is set.190190- *191191- */192192-static void octeon_hal_setup_per_cpu_reserved32(void *unused)193193-{194194- /*195195- * The config has selected to wire the reserve32 memory for all196196- * userspace applications. We need to put a wired TLB entry in for each197197- * 512MB of reserve32 memory. We only handle double 256MB pages here,198198- * so reserve32 must be multiple of 512MB.199199- */200200- uint32_t size = CONFIG_CAVIUM_RESERVE32;201201- uint32_t entrylo0 =202202- 0x7 | ((octeon_reserve32_memory & ((1ul << 40) - 1)) >> 6);203203- uint32_t entrylo1 = entrylo0 + (256 << 14);204204- uint32_t entryhi = (0x80000000UL - (CONFIG_CAVIUM_RESERVE32 << 20));205205- while (size >= 512) {206206-#if 0207207- pr_info("CPU%d: Adding double wired TLB entry for 0x%lx\n",208208- smp_processor_id(), entryhi);209209-#endif210210- add_wired_entry(entrylo0, entrylo1, entryhi, PM_256M);211211- entrylo0 += 512 << 14;212212- entrylo1 += 512 << 14;213213- entryhi += 512 << 20;214214- size -= 512;215215- }216216-}217217-#endif /* CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB */218218-219219-/**220220- * Called to release the named block which was used to made sure221221- * that nobody used the memory for something else during222222- * init. Now we'll free it so userspace apps can use this223223- * memory region with bootmem_alloc.224224- *225225- * This function is called only once from prom_free_prom_memory().226226- */227227-void octeon_hal_setup_reserved32(void)228228-{229229-#ifdef CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB230230- on_each_cpu(octeon_hal_setup_per_cpu_reserved32, NULL, 0, 1);231231-#endif232232-}233233-234189/**235190 * Reboot Octeon236191 *···242293243294 octeon_kill_core(NULL);244295}245245-246246-#if 0247247-/**248248- * Platform time init specifics.249249- * Returns250250- */251251-void __init plat_time_init(void)252252-{253253- /* Nothing special here, but we are required to have one */254254-}255255-256256-#endif257296258297/**259298 * Handle all the error condition interrupts that might occur.···439502 * memory when it is getting memory from the440503 * bootloader. Later, after the memory allocations are441504 * complete, the reserve32 will be freed.442442- */443443-#ifdef CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB444444- if (CONFIG_CAVIUM_RESERVE32 & 0x1ff)445445- pr_err("CAVIUM_RESERVE32 isn't a multiple of 512MB. "446446- "This is required if CAVIUM_RESERVE32_USE_WIRED_TLB "447447- "is set\n");448448- else449449- addr = cvmx_bootmem_phy_named_block_alloc(CONFIG_CAVIUM_RESERVE32 << 20,450450- 0, 0, 512 << 20,451451- "CAVIUM_RESERVE32", 0);452452-#else453453- /*505505+ *454506 * Allocate memory for RESERVED32 aligned on 2MB boundary. This455507 * is in case we later use hugetlb entries with it.456508 */457509 addr = cvmx_bootmem_phy_named_block_alloc(CONFIG_CAVIUM_RESERVE32 << 20,458510 0, 0, 2 << 20,459511 "CAVIUM_RESERVE32", 0);460460-#endif461512 if (addr < 0)462513 pr_err("Failed to allocate CAVIUM_RESERVE32 memory area\n");463514 else···742817 panic("Unable to request_irq(OCTEON_IRQ_RML)\n");743818 }744819#endif745745-746746- /* This call is here so that it is performed after any TLB747747- initializations. It needs to be after these in case the748748- CONFIG_CAVIUM_RESERVE32_USE_WIRED_TLB option is set */749749- octeon_hal_setup_reserved32();750820}
···11#22# Automatically generated make config: don't edit33-# Linux kernel version: 2.6.26-rc844-# Wed Jul 2 17:02:55 200833+# Linux kernel version: 2.6.34-rc344+# Sat Apr 3 16:32:11 201055#66CONFIG_MIPS=y77···99# Machine selection1010#1111# CONFIG_MACH_ALCHEMY is not set1212+# CONFIG_AR7 is not set1213# CONFIG_BCM47XX is not set1414+# CONFIG_BCM63XX is not set1315# CONFIG_MIPS_COBALT is not set1416# CONFIG_MACH_DECSTATION is not set1517# CONFIG_MACH_JAZZ is not set1618# CONFIG_LASAT is not set1717-# CONFIG_LEMOTE_FULONG is not set1919+# CONFIG_MACH_LOONGSON is not set1820# CONFIG_MIPS_MALTA is not set1921# CONFIG_MIPS_SIM is not set2020-# CONFIG_MARKEINS is not set2222+# CONFIG_NEC_MARKEINS is not set2123# CONFIG_MACH_VR41XX is not set2424+# CONFIG_NXP_STB220 is not set2525+# CONFIG_NXP_STB225 is not set2226# CONFIG_PNX8550_JBS is not set2327# CONFIG_PNX8550_STB810 is not set2428# CONFIG_PMC_MSP is not set2529# CONFIG_PMC_YOSEMITE is not set3030+# CONFIG_POWERTV is not set2631# CONFIG_SGI_IP22 is not set2732# CONFIG_SGI_IP27 is not set2833# CONFIG_SGI_IP28 is not set···4136# CONFIG_SIBYTE_SENTOSA is not set4237CONFIG_SIBYTE_BIGSUR=y4338# CONFIG_SNI_RM is not set4444-# CONFIG_TOSHIBA_JMR3927 is not set4545-# CONFIG_TOSHIBA_RBTX4927 is not set4646-# CONFIG_TOSHIBA_RBTX4938 is not set3939+# CONFIG_MACH_TX39XX is not set4040+# CONFIG_MACH_TX49XX is not set4141+# CONFIG_MIKROTIK_RB532 is not set4742# CONFIG_WR_PPMC is not set4343+# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set4444+# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set4545+# CONFIG_ALCHEMY_GPIO_INDIRECT is not set4846CONFIG_SIBYTE_BCM1x80=y4947CONFIG_SIBYTE_SB1xxx_SOC=y5048# CONFIG_CPU_SB1_PASS_1 is not set···5648# CONFIG_CPU_SB1_PASS_4 is not set5749# CONFIG_CPU_SB1_PASS_2_112x is not set5850# CONFIG_CPU_SB1_PASS_3 is not set5959-# CONFIG_SIMULATION is not set6051# CONFIG_SB1_CEX_ALWAYS_FATAL is not set6152# CONFIG_SB1_CERR_STALL is not set6262-CONFIG_SIBYTE_CFE=y6353# CONFIG_SIBYTE_CFE_CONSOLE is not set6454# CONFIG_SIBYTE_BUS_WATCHER is not set6555# CONFIG_SIBYTE_TBPROF is not set6656CONFIG_SIBYTE_HAS_ZBUS_PROFILING=y5757+CONFIG_LOONGSON_UART_BASE=y6758CONFIG_RWSEM_GENERIC_SPINLOCK=y6859# CONFIG_ARCH_HAS_ILOG2_U32 is not set6960# CONFIG_ARCH_HAS_ILOG2_U64 is not set···7366CONFIG_GENERIC_CLOCKEVENTS=y7467CONFIG_GENERIC_TIME=y7568CONFIG_GENERIC_CMOS_UPDATE=y7676-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y7777-# CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set6969+CONFIG_SCHED_OMIT_FRAME_POINTER=y7070+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y7871CONFIG_CEVT_BCM1480=y7972CONFIG_CSRC_BCM1480=y8073CONFIG_CFE=y8174CONFIG_DMA_COHERENT=y8282-CONFIG_EARLY_PRINTK=y8375CONFIG_SYS_HAS_EARLY_PRINTK=y8484-# CONFIG_HOTPLUG_CPU is not set8576# CONFIG_NO_IOPORT is not set8677CONFIG_CPU_BIG_ENDIAN=y8778# CONFIG_CPU_LITTLE_ENDIAN is not set···9388#9489# CPU selection9590#9696-# CONFIG_CPU_LOONGSON2 is not set9191+# CONFIG_CPU_LOONGSON2E is not set9292+# CONFIG_CPU_LOONGSON2F is not set9793# CONFIG_CPU_MIPS32_R1 is not set9894# CONFIG_CPU_MIPS32_R2 is not set9995# CONFIG_CPU_MIPS64_R1 is not set···107101# CONFIG_CPU_TX49XX is not set108102# CONFIG_CPU_R5000 is not set109103# CONFIG_CPU_R5432 is not set104104+# CONFIG_CPU_R5500 is not set110105# CONFIG_CPU_R6000 is not set111106# CONFIG_CPU_NEVADA is not set112107# CONFIG_CPU_R8000 is not set···115108# CONFIG_CPU_RM7000 is not set116109# CONFIG_CPU_RM9000 is not set117110CONFIG_CPU_SB1=y111111+# CONFIG_CPU_CAVIUM_OCTEON is not set118112CONFIG_SYS_HAS_CPU_SB1=y119113CONFIG_WEAK_ORDERING=y120114CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y···131123CONFIG_PAGE_SIZE_4KB=y132124# CONFIG_PAGE_SIZE_8KB is not set133125# CONFIG_PAGE_SIZE_16KB is not set126126+# CONFIG_PAGE_SIZE_32KB is not set134127# CONFIG_PAGE_SIZE_64KB is not set135128# CONFIG_SIBYTE_DMA_PAGEOPS is not set136129CONFIG_MIPS_MT_DISABLED=y137130# CONFIG_MIPS_MT_SMP is not set138131# CONFIG_MIPS_MT_SMTC is not set132132+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set139133CONFIG_CPU_HAS_SYNC=y140134CONFIG_GENERIC_HARDIRQS=y141135CONFIG_GENERIC_IRQ_PROBE=y···152142# CONFIG_SPARSEMEM_MANUAL is not set153143CONFIG_FLATMEM=y154144CONFIG_FLAT_NODE_MEM_MAP=y155155-# CONFIG_SPARSEMEM_STATIC is not set156156-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set157145CONFIG_PAGEFLAGS_EXTENDED=y158146CONFIG_SPLIT_PTLOCK_CPUS=4159159-CONFIG_RESOURCES_64BIT=y147147+CONFIG_PHYS_ADDR_T_64BIT=y160148CONFIG_ZONE_DMA_FLAG=0161149CONFIG_VIRT_TO_BUS=y150150+# CONFIG_KSM is not set151151+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096162152CONFIG_SMP=y163153CONFIG_SYS_SUPPORTS_SMP=y164154CONFIG_NR_CPUS_DEFAULT_4=y165155CONFIG_NR_CPUS=4166166-# CONFIG_MIPS_CMP is not set167156CONFIG_TICK_ONESHOT=y168157CONFIG_NO_HZ=y169158CONFIG_HIGH_RES_TIMERS=y···184175CONFIG_LOCKDEP_SUPPORT=y185176CONFIG_STACKTRACE_SUPPORT=y186177CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"178178+CONFIG_CONSTRUCTORS=y187179188180#189181# General setup···198188CONFIG_SYSVIPC=y199189CONFIG_SYSVIPC_SYSCTL=y200190CONFIG_POSIX_MQUEUE=y191191+CONFIG_POSIX_MQUEUE_SYSCTL=y201192CONFIG_BSD_PROCESS_ACCT=y202193CONFIG_BSD_PROCESS_ACCT_V3=y203194CONFIG_TASKSTATS=y···206195CONFIG_TASK_XACCT=y207196CONFIG_TASK_IO_ACCOUNTING=y208197CONFIG_AUDIT=y198198+199199+#200200+# RCU Subsystem201201+#202202+CONFIG_TREE_RCU=y203203+# CONFIG_TREE_PREEMPT_RCU is not set204204+# CONFIG_TINY_RCU is not set205205+# CONFIG_RCU_TRACE is not set206206+CONFIG_RCU_FANOUT=64207207+# CONFIG_RCU_FANOUT_EXACT is not set208208+# CONFIG_RCU_FAST_NO_HZ is not set209209+# CONFIG_TREE_RCU_TRACE is not set209210CONFIG_IKCONFIG=y210211CONFIG_IKCONFIG_PROC=y211212CONFIG_LOG_BUF_SHIFT=16212213# CONFIG_CGROUPS is not set213213-CONFIG_GROUP_SCHED=y214214-CONFIG_FAIR_GROUP_SCHED=y215215-# CONFIG_RT_GROUP_SCHED is not set216216-CONFIG_USER_SCHED=y217217-# CONFIG_CGROUP_SCHED is not set218218-CONFIG_SYSFS_DEPRECATED=y219219-CONFIG_SYSFS_DEPRECATED_V2=y214214+# CONFIG_SYSFS_DEPRECATED_V2 is not set220215CONFIG_RELAY=y221221-# CONFIG_NAMESPACES is not set216216+CONFIG_NAMESPACES=y217217+CONFIG_UTS_NS=y218218+CONFIG_IPC_NS=y219219+CONFIG_USER_NS=y220220+CONFIG_PID_NS=y221221+CONFIG_NET_NS=y222222CONFIG_BLK_DEV_INITRD=y223223CONFIG_INITRAMFS_SOURCE=""224224+CONFIG_RD_GZIP=y225225+# CONFIG_RD_BZIP2 is not set226226+# CONFIG_RD_LZMA is not set227227+# CONFIG_RD_LZO is not set224228# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set225229CONFIG_SYSCTL=y230230+CONFIG_ANON_INODES=y226231CONFIG_EMBEDDED=y227232# CONFIG_SYSCTL_SYSCALL is not set228233CONFIG_KALLSYMS=y···249222CONFIG_BUG=y250223CONFIG_ELF_CORE=y251224# CONFIG_PCSPKR_PLATFORM is not set252252-CONFIG_COMPAT_BRK=y253225CONFIG_BASE_FULL=y254226CONFIG_FUTEX=y255255-CONFIG_ANON_INODES=y256227CONFIG_EPOLL=y257228CONFIG_SIGNALFD=y258229CONFIG_TIMERFD=y259230CONFIG_EVENTFD=y260231CONFIG_SHMEM=y232232+CONFIG_AIO=y233233+234234+#235235+# Kernel Performance Events And Counters236236+#261237CONFIG_VM_EVENT_COUNTERS=y238238+CONFIG_PCI_QUIRKS=y239239+CONFIG_COMPAT_BRK=y262240CONFIG_SLAB=y263241# CONFIG_SLUB is not set264242# CONFIG_SLOB is not set265243# CONFIG_PROFILING is not set266266-# CONFIG_MARKERS is not set267244CONFIG_HAVE_OPROFILE=y268268-# CONFIG_HAVE_KPROBES is not set269269-# CONFIG_HAVE_KRETPROBES is not set270270-# CONFIG_HAVE_DMA_ATTRS is not set271271-CONFIG_PROC_PAGE_MONITOR=y245245+CONFIG_HAVE_SYSCALL_WRAPPERS=y246246+CONFIG_USE_GENERIC_SMP_HELPERS=y247247+248248+#249249+# GCOV-based kernel profiling250250+#251251+# CONFIG_SLOW_WORK is not set252252+CONFIG_HAVE_GENERIC_DMA_COHERENT=y272253CONFIG_SLABINFO=y273254CONFIG_RT_MUTEXES=y274274-# CONFIG_TINY_SHMEM is not set275255CONFIG_BASE_SMALL=0276256CONFIG_MODULES=y277257# CONFIG_MODULE_FORCE_LOAD is not set···286252# CONFIG_MODULE_FORCE_UNLOAD is not set287253CONFIG_MODVERSIONS=y288254CONFIG_MODULE_SRCVERSION_ALL=y289289-CONFIG_KMOD=y290255CONFIG_STOP_MACHINE=y291256CONFIG_BLOCK=y292292-# CONFIG_BLK_DEV_IO_TRACE is not set293257# CONFIG_BLK_DEV_BSG is not set258258+# CONFIG_BLK_DEV_INTEGRITY is not set294259CONFIG_BLOCK_COMPAT=y295260296261#297262# IO Schedulers298263#299264CONFIG_IOSCHED_NOOP=y300300-CONFIG_IOSCHED_AS=y301265CONFIG_IOSCHED_DEADLINE=y302266CONFIG_IOSCHED_CFQ=y303303-CONFIG_DEFAULT_AS=y304267# CONFIG_DEFAULT_DEADLINE is not set305305-# CONFIG_DEFAULT_CFQ is not set268268+CONFIG_DEFAULT_CFQ=y306269# CONFIG_DEFAULT_NOOP is not set307307-CONFIG_DEFAULT_IOSCHED="anticipatory"308308-CONFIG_CLASSIC_RCU=y270270+CONFIG_DEFAULT_IOSCHED="cfq"271271+# CONFIG_INLINE_SPIN_TRYLOCK is not set272272+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set273273+# CONFIG_INLINE_SPIN_LOCK is not set274274+# CONFIG_INLINE_SPIN_LOCK_BH is not set275275+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set276276+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set277277+CONFIG_INLINE_SPIN_UNLOCK=y278278+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set279279+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y280280+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set281281+# CONFIG_INLINE_READ_TRYLOCK is not set282282+# CONFIG_INLINE_READ_LOCK is not set283283+# CONFIG_INLINE_READ_LOCK_BH is not set284284+# CONFIG_INLINE_READ_LOCK_IRQ is not set285285+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set286286+CONFIG_INLINE_READ_UNLOCK=y287287+# CONFIG_INLINE_READ_UNLOCK_BH is not set288288+CONFIG_INLINE_READ_UNLOCK_IRQ=y289289+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set290290+# CONFIG_INLINE_WRITE_TRYLOCK is not set291291+# CONFIG_INLINE_WRITE_LOCK is not set292292+# CONFIG_INLINE_WRITE_LOCK_BH is not set293293+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set294294+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set295295+CONFIG_INLINE_WRITE_UNLOCK=y296296+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set297297+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y298298+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set299299+CONFIG_MUTEX_SPIN_ON_OWNER=y300300+# CONFIG_FREEZER is not set309301310302#311303# Bus options (PCI, PCMCIA, EISA, ISA, TC)···340280CONFIG_PCI=y341281CONFIG_PCI_DOMAINS=y342282# CONFIG_ARCH_SUPPORTS_MSI is not set343343-CONFIG_PCI_LEGACY=y344283CONFIG_PCI_DEBUG=y284284+# CONFIG_PCI_STUB is not set285285+# CONFIG_PCI_IOV is not set345286CONFIG_MMU=y346287CONFIG_ZONE_DMA32=y347288# CONFIG_PCCARD is not set···352291# Executable file formats353292#354293CONFIG_BINFMT_ELF=y294294+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set295295+# CONFIG_HAVE_AOUT is not set355296# CONFIG_BINFMT_MISC is not set356297CONFIG_MIPS32_COMPAT=y357298CONFIG_COMPAT=y···367304#368305CONFIG_PM=y369306# CONFIG_PM_DEBUG is not set370370-371371-#372372-# Networking373373-#307307+# CONFIG_PM_RUNTIME is not set374308CONFIG_NET=y375309376310#377311# Networking options378312#379313CONFIG_PACKET=y380380-CONFIG_PACKET_MMAP=y381314CONFIG_UNIX=y382315CONFIG_XFRM=y383316CONFIG_XFRM_USER=m384317# CONFIG_XFRM_SUB_POLICY is not set385318CONFIG_XFRM_MIGRATE=y386319# CONFIG_XFRM_STATISTICS is not set320320+CONFIG_XFRM_IPCOMP=m387321CONFIG_NET_KEY=y388322CONFIG_NET_KEY_MIGRATE=y389323CONFIG_INET=y···413353CONFIG_TCP_CONG_CUBIC=y414354CONFIG_DEFAULT_TCP_CONG="cubic"415355CONFIG_TCP_MD5SIG=y356356+CONFIG_IPV6=m357357+CONFIG_IPV6_PRIVACY=y358358+CONFIG_IPV6_ROUTER_PREF=y359359+CONFIG_IPV6_ROUTE_INFO=y360360+CONFIG_IPV6_OPTIMISTIC_DAD=y361361+CONFIG_INET6_AH=m362362+CONFIG_INET6_ESP=m363363+CONFIG_INET6_IPCOMP=m364364+CONFIG_IPV6_MIP6=m365365+CONFIG_INET6_XFRM_TUNNEL=m366366+CONFIG_INET6_TUNNEL=m367367+CONFIG_INET6_XFRM_MODE_TRANSPORT=m368368+CONFIG_INET6_XFRM_MODE_TUNNEL=m369369+CONFIG_INET6_XFRM_MODE_BEET=m370370+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m371371+CONFIG_IPV6_SIT=m372372+CONFIG_IPV6_SIT_6RD=y373373+CONFIG_IPV6_NDISC_NODETYPE=y374374+CONFIG_IPV6_TUNNEL=m375375+CONFIG_IPV6_MULTIPLE_TABLES=y376376+CONFIG_IPV6_SUBTREES=y377377+# CONFIG_IPV6_MROUTE is not set378378+CONFIG_NETLABEL=y379379+CONFIG_NETWORK_SECMARK=y380380+CONFIG_NETFILTER=y381381+# CONFIG_NETFILTER_DEBUG is not set382382+# CONFIG_NETFILTER_ADVANCED is not set383383+384384+#385385+# Core Netfilter Configuration386386+#387387+CONFIG_NETFILTER_NETLINK=m388388+CONFIG_NETFILTER_NETLINK_LOG=m389389+CONFIG_NF_CONNTRACK=m390390+CONFIG_NF_CONNTRACK_SECMARK=y391391+CONFIG_NF_CONNTRACK_FTP=m392392+CONFIG_NF_CONNTRACK_IRC=m393393+CONFIG_NF_CONNTRACK_SIP=m394394+CONFIG_NF_CT_NETLINK=m395395+CONFIG_NETFILTER_XTABLES=m396396+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m397397+CONFIG_NETFILTER_XT_TARGET_MARK=m398398+CONFIG_NETFILTER_XT_TARGET_NFLOG=m399399+CONFIG_NETFILTER_XT_TARGET_SECMARK=m400400+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m401401+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m402402+CONFIG_NETFILTER_XT_MATCH_MARK=m403403+CONFIG_NETFILTER_XT_MATCH_POLICY=m404404+CONFIG_NETFILTER_XT_MATCH_STATE=m416405CONFIG_IP_VS=m406406+CONFIG_IP_VS_IPV6=y417407# CONFIG_IP_VS_DEBUG is not set418408CONFIG_IP_VS_TAB_BITS=12419409···472362#473363CONFIG_IP_VS_PROTO_TCP=y474364CONFIG_IP_VS_PROTO_UDP=y365365+CONFIG_IP_VS_PROTO_AH_ESP=y475366CONFIG_IP_VS_PROTO_ESP=y476367CONFIG_IP_VS_PROTO_AH=y368368+CONFIG_IP_VS_PROTO_SCTP=y477369478370#479371# IPVS scheduler···495383# IPVS application helper496384#497385CONFIG_IP_VS_FTP=m498498-CONFIG_IPV6=m499499-CONFIG_IPV6_PRIVACY=y500500-CONFIG_IPV6_ROUTER_PREF=y501501-CONFIG_IPV6_ROUTE_INFO=y502502-CONFIG_IPV6_OPTIMISTIC_DAD=y503503-CONFIG_INET6_AH=m504504-CONFIG_INET6_ESP=m505505-CONFIG_INET6_IPCOMP=m506506-CONFIG_IPV6_MIP6=m507507-CONFIG_INET6_XFRM_TUNNEL=m508508-CONFIG_INET6_TUNNEL=m509509-CONFIG_INET6_XFRM_MODE_TRANSPORT=m510510-CONFIG_INET6_XFRM_MODE_TUNNEL=m511511-CONFIG_INET6_XFRM_MODE_BEET=m512512-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m513513-CONFIG_IPV6_SIT=m514514-CONFIG_IPV6_NDISC_NODETYPE=y515515-CONFIG_IPV6_TUNNEL=m516516-CONFIG_IPV6_MULTIPLE_TABLES=y517517-CONFIG_IPV6_SUBTREES=y518518-# CONFIG_IPV6_MROUTE is not set519519-CONFIG_NETWORK_SECMARK=y520520-CONFIG_NETFILTER=y521521-# CONFIG_NETFILTER_DEBUG is not set522522-# CONFIG_NETFILTER_ADVANCED is not set523523-524524-#525525-# Core Netfilter Configuration526526-#527527-CONFIG_NETFILTER_NETLINK=m528528-CONFIG_NETFILTER_NETLINK_LOG=m529529-CONFIG_NF_CONNTRACK=m530530-CONFIG_NF_CONNTRACK_SECMARK=y531531-CONFIG_NF_CONNTRACK_FTP=m532532-CONFIG_NF_CONNTRACK_IRC=m533533-CONFIG_NF_CONNTRACK_SIP=m534534-CONFIG_NF_CT_NETLINK=m535535-CONFIG_NETFILTER_XTABLES=m536536-CONFIG_NETFILTER_XT_TARGET_MARK=m537537-CONFIG_NETFILTER_XT_TARGET_NFLOG=m538538-CONFIG_NETFILTER_XT_TARGET_SECMARK=m539539-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m540540-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m541541-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m542542-CONFIG_NETFILTER_XT_MATCH_MARK=m543543-CONFIG_NETFILTER_XT_MATCH_POLICY=m544544-CONFIG_NETFILTER_XT_MATCH_STATE=m545386546387#547388# IP: Netfilter Configuration548389#390390+CONFIG_NF_DEFRAG_IPV4=m549391CONFIG_NF_CONNTRACK_IPV4=m550392CONFIG_NF_CONNTRACK_PROC_COMPAT=y551393CONFIG_IP_NF_IPTABLES=m···525459CONFIG_NF_CONNTRACK_IPV6=m526460CONFIG_IP6_NF_IPTABLES=m527461CONFIG_IP6_NF_MATCH_IPV6HEADER=m528528-CONFIG_IP6_NF_FILTER=m529462CONFIG_IP6_NF_TARGET_LOG=m463463+CONFIG_IP6_NF_FILTER=m530464CONFIG_IP6_NF_TARGET_REJECT=m531465CONFIG_IP6_NF_MANGLE=m532532-# CONFIG_IP_DCCP is not set466466+CONFIG_IP_DCCP=m467467+CONFIG_INET_DCCP_DIAG=m468468+469469+#470470+# DCCP CCIDs Configuration (EXPERIMENTAL)471471+#472472+# CONFIG_IP_DCCP_CCID2_DEBUG is not set473473+CONFIG_IP_DCCP_CCID3=y474474+# CONFIG_IP_DCCP_CCID3_DEBUG is not set475475+CONFIG_IP_DCCP_CCID3_RTO=100476476+CONFIG_IP_DCCP_TFRC_LIB=y477477+478478+#479479+# DCCP Kernel Hacking480480+#481481+# CONFIG_IP_DCCP_DEBUG is not set533482CONFIG_IP_SCTP=m534483# CONFIG_SCTP_DBG_MSG is not set535484# CONFIG_SCTP_DBG_OBJCNT is not set536485# CONFIG_SCTP_HMAC_NONE is not set537537-# CONFIG_SCTP_HMAC_SHA1 is not set538538-CONFIG_SCTP_HMAC_MD5=y486486+CONFIG_SCTP_HMAC_SHA1=y487487+# CONFIG_SCTP_HMAC_MD5 is not set488488+# CONFIG_RDS is not set539489# CONFIG_TIPC is not set540490# CONFIG_ATM is not set541541-# CONFIG_BRIDGE is not set542542-# CONFIG_VLAN_8021Q is not set491491+CONFIG_STP=m492492+CONFIG_GARP=m493493+CONFIG_BRIDGE=m494494+CONFIG_BRIDGE_IGMP_SNOOPING=y495495+# CONFIG_NET_DSA is not set496496+CONFIG_VLAN_8021Q=m497497+CONFIG_VLAN_8021Q_GVRP=y543498# CONFIG_DECNET is not set499499+CONFIG_LLC=m544500# CONFIG_LLC2 is not set545501# CONFIG_IPX is not set546502# CONFIG_ATALK is not set···570482# CONFIG_LAPB is not set571483# CONFIG_ECONET is not set572484# CONFIG_WAN_ROUTER is not set485485+# CONFIG_PHONET is not set486486+# CONFIG_IEEE802154 is not set573487# CONFIG_NET_SCHED is not set488488+# CONFIG_DCB is not set574489575490#576491# Network testing577492#578493# CONFIG_NET_PKTGEN is not set579579-# CONFIG_HAMRADIO is not set494494+CONFIG_HAMRADIO=y495495+496496+#497497+# Packet Radio protocols498498+#499499+CONFIG_AX25=m500500+CONFIG_AX25_DAMA_SLAVE=y501501+CONFIG_NETROM=m502502+CONFIG_ROSE=m503503+504504+#505505+# AX.25 network device drivers506506+#507507+CONFIG_MKISS=m508508+CONFIG_6PACK=m509509+CONFIG_BPQETHER=m510510+CONFIG_BAYCOM_SER_FDX=m511511+CONFIG_BAYCOM_SER_HDX=m512512+CONFIG_YAM=m580513# CONFIG_CAN is not set581514# CONFIG_IRDA is not set582515# CONFIG_BT is not set583516# CONFIG_AF_RXRPC is not set584517CONFIG_FIB_RULES=y518518+CONFIG_WIRELESS=y519519+# CONFIG_CFG80211 is not set520520+# CONFIG_LIB80211 is not set585521586522#587587-# Wireless523523+# CFG80211 needs to be enabled for MAC80211588524#589589-# CONFIG_CFG80211 is not set590590-# CONFIG_WIRELESS_EXT is not set591591-# CONFIG_MAC80211 is not set592592-# CONFIG_IEEE80211 is not set525525+# CONFIG_WIMAX is not set593526# CONFIG_RFKILL is not set594527# CONFIG_NET_9P is not set595528···622513# Generic Driver Options623514#624515CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"516516+# CONFIG_DEVTMPFS is not set625517CONFIG_STANDALONE=y626518CONFIG_PREVENT_FIRMWARE_BUILD=y627519CONFIG_FW_LOADER=m520520+CONFIG_FIRMWARE_IN_KERNEL=y521521+CONFIG_EXTRA_FIRMWARE=""628522# CONFIG_DEBUG_DRIVER is not set629523# CONFIG_DEBUG_DEVRES is not set630524# CONFIG_SYS_HYPERVISOR is not set···642530# CONFIG_BLK_DEV_COW_COMMON is not set643531CONFIG_BLK_DEV_LOOP=m644532CONFIG_BLK_DEV_CRYPTOLOOP=m533533+534534+#535535+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected536536+#645537CONFIG_BLK_DEV_NBD=m646538# CONFIG_BLK_DEV_SX8 is not set647539# CONFIG_BLK_DEV_RAM is not set648540# CONFIG_CDROM_PKTCDVD is not set649541# CONFIG_ATA_OVER_ETH is not set542542+# CONFIG_BLK_DEV_HD is not set650543CONFIG_MISC_DEVICES=y544544+# CONFIG_AD525X_DPOT is not set651545# CONFIG_PHANTOM is not set652652-# CONFIG_EEPROM_93CX6 is not set653546CONFIG_SGI_IOC4=m654547# CONFIG_TIFM_CORE is not set548548+# CONFIG_ICS932S401 is not set655549# CONFIG_ENCLOSURE_SERVICES is not set550550+# CONFIG_HP_ILO is not set551551+# CONFIG_ISL29003 is not set552552+# CONFIG_SENSORS_TSL2550 is not set553553+# CONFIG_DS1682 is not set554554+# CONFIG_C2PORT is not set555555+556556+#557557+# EEPROM support558558+#559559+# CONFIG_EEPROM_AT24 is not set560560+CONFIG_EEPROM_LEGACY=y561561+CONFIG_EEPROM_MAX6875=y562562+# CONFIG_EEPROM_93CX6 is not set563563+# CONFIG_CB710_CORE is not set656564CONFIG_HAVE_IDE=y657565CONFIG_IDE=y658658-CONFIG_IDE_MAX_HWIFS=4659659-CONFIG_BLK_DEV_IDE=y660566661567#662568# Please see Documentation/ide/ide.txt for help/info on IDE drives663569#570570+CONFIG_IDE_XFER_MODE=y571571+CONFIG_IDE_TIMINGS=y572572+CONFIG_IDE_ATAPI=y664573# CONFIG_BLK_DEV_IDE_SATA is not set665665-CONFIG_BLK_DEV_IDEDISK=y666666-# CONFIG_IDEDISK_MULTI_MODE is not set574574+CONFIG_IDE_GD=y575575+CONFIG_IDE_GD_ATA=y576576+# CONFIG_IDE_GD_ATAPI is not set667577CONFIG_BLK_DEV_IDECD=y668578CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y669579CONFIG_BLK_DEV_IDETAPE=y670670-CONFIG_BLK_DEV_IDEFLOPPY=y671671-# CONFIG_BLK_DEV_IDESCSI is not set672580# CONFIG_IDE_TASK_IOCTL is not set673581CONFIG_IDE_PROC_FS=y674582···713581# CONFIG_BLK_DEV_AMD74XX is not set714582CONFIG_BLK_DEV_CMD64X=y715583# CONFIG_BLK_DEV_TRIFLEX is not set716716-# CONFIG_BLK_DEV_CY82C693 is not set717584# CONFIG_BLK_DEV_CS5520 is not set718585# CONFIG_BLK_DEV_CS5530 is not set719719-# CONFIG_BLK_DEV_HPT34X is not set720586# CONFIG_BLK_DEV_HPT366 is not set721587# CONFIG_BLK_DEV_JMICRON is not set722588# CONFIG_BLK_DEV_SC1200 is not set723589# CONFIG_BLK_DEV_PIIX is not set590590+# CONFIG_BLK_DEV_IT8172 is not set724591CONFIG_BLK_DEV_IT8213=m725592# CONFIG_BLK_DEV_IT821X is not set726593# CONFIG_BLK_DEV_NS87415 is not set···731600# CONFIG_BLK_DEV_TRM290 is not set732601# CONFIG_BLK_DEV_VIA82CXXX is not set733602CONFIG_BLK_DEV_TC86C001=m734734-# CONFIG_BLK_DEV_IDE_SWARM is not set735603CONFIG_BLK_DEV_IDEDMA=y736736-# CONFIG_BLK_DEV_HD_ONLY is not set737737-# CONFIG_BLK_DEV_HD is not set738604739605#740606# SCSI device support741607#608608+CONFIG_SCSI_MOD=y742609# CONFIG_RAID_ATTRS is not set743610CONFIG_SCSI=y744611CONFIG_SCSI_DMA=y···754625CONFIG_BLK_DEV_SR_VENDOR=y755626CONFIG_CHR_DEV_SG=m756627CONFIG_CHR_DEV_SCH=m757757-758758-#759759-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs760760-#761628# CONFIG_SCSI_MULTI_LUN is not set762629# CONFIG_SCSI_CONSTANTS is not set763630# CONFIG_SCSI_LOGGING is not set···770645# CONFIG_SCSI_SRP_ATTRS is not set771646CONFIG_SCSI_LOWLEVEL=y772647# CONFIG_ISCSI_TCP is not set648648+# CONFIG_SCSI_CXGB3_ISCSI is not set649649+# CONFIG_SCSI_BNX2_ISCSI is not set650650+# CONFIG_BE2ISCSI is not set773651# CONFIG_BLK_DEV_3W_XXXX_RAID is not set652652+# CONFIG_SCSI_HPSA is not set774653# CONFIG_SCSI_3W_9XXX is not set654654+# CONFIG_SCSI_3W_SAS is not set775655# CONFIG_SCSI_ACARD is not set776656# CONFIG_SCSI_AACRAID is not set777657# CONFIG_SCSI_AIC7XXX is not set778658# CONFIG_SCSI_AIC7XXX_OLD is not set779659# CONFIG_SCSI_AIC79XX is not set780660# CONFIG_SCSI_AIC94XX is not set661661+# CONFIG_SCSI_MVSAS is not set781662# CONFIG_SCSI_DPT_I2O is not set782663# CONFIG_SCSI_ADVANSYS is not set783664# CONFIG_SCSI_ARCMSR is not set784665# CONFIG_MEGARAID_NEWGEN is not set785666# CONFIG_MEGARAID_LEGACY is not set786667# CONFIG_MEGARAID_SAS is not set668668+# CONFIG_SCSI_MPT2SAS is not set787669# CONFIG_SCSI_HPTIOP is not set670670+# CONFIG_LIBFC is not set671671+# CONFIG_LIBFCOE is not set672672+# CONFIG_FCOE is not set788673# CONFIG_SCSI_DMX3191D is not set789674# CONFIG_SCSI_FUTURE_DOMAIN is not set790675# CONFIG_SCSI_IPS is not set791676# CONFIG_SCSI_INITIO is not set792677# CONFIG_SCSI_INIA100 is not set793793-# CONFIG_SCSI_MVSAS is not set794678# CONFIG_SCSI_STEX is not set795679# CONFIG_SCSI_SYM53C8XX_2 is not set796680# CONFIG_SCSI_IPR is not set···810676# CONFIG_SCSI_DC395x is not set811677# CONFIG_SCSI_DC390T is not set812678# CONFIG_SCSI_DEBUG is not set679679+# CONFIG_SCSI_PMCRAID is not set680680+# CONFIG_SCSI_PM8001 is not set813681# CONFIG_SCSI_SRP is not set682682+# CONFIG_SCSI_BFA_FC is not set683683+# CONFIG_SCSI_DH is not set684684+# CONFIG_SCSI_OSD_INITIATOR is not set814685CONFIG_ATA=y815686# CONFIG_ATA_NONSTANDARD is not set687687+CONFIG_ATA_VERBOSE_ERROR=y816688CONFIG_SATA_PMP=y817689# CONFIG_SATA_AHCI is not set818690CONFIG_SATA_SIL24=y···840700# CONFIG_PATA_ALI is not set841701# CONFIG_PATA_AMD is not set842702# CONFIG_PATA_ARTOP is not set703703+# CONFIG_PATA_ATP867X is not set843704# CONFIG_PATA_ATIIXP is not set844705# CONFIG_PATA_CMD640_PCI is not set845706# CONFIG_PATA_CMD64X is not set···856715# CONFIG_PATA_IT821X is not set857716# CONFIG_PATA_IT8213 is not set858717# CONFIG_PATA_JMICRON is not set718718+# CONFIG_PATA_LEGACY is not set859719# CONFIG_PATA_TRIFLEX is not set860720# CONFIG_PATA_MARVELL is not set861721# CONFIG_PATA_MPIIX is not set···867725# CONFIG_PATA_NS87415 is not set868726# CONFIG_PATA_OPTI is not set869727# CONFIG_PATA_OPTIDMA is not set728728+# CONFIG_PATA_PDC2027X is not set870729# CONFIG_PATA_PDC_OLD is not set871730# CONFIG_PATA_RADISYS is not set731731+# CONFIG_PATA_RDC is not set872732# CONFIG_PATA_RZ1000 is not set873733# CONFIG_PATA_SC1200 is not set874734# CONFIG_PATA_SERVERWORKS is not set875875-# CONFIG_PATA_PDC2027X is not set876735CONFIG_PATA_SIL680=y877736# CONFIG_PATA_SIS is not set737737+# CONFIG_PATA_TOSHIBA is not set878738# CONFIG_PATA_VIA is not set879739# CONFIG_PATA_WINBOND is not set880740# CONFIG_PATA_PLATFORM is not set···889745#890746891747#892892-# Enable only one of the two stacks, unless you know what you are doing748748+# You can enable one or both FireWire driver stacks.749749+#750750+751751+#752752+# The newer stack is recommended.893753#894754# CONFIG_FIREWIRE is not set895755# CONFIG_IEEE1394 is not set896756# CONFIG_I2O is not set897757CONFIG_NETDEVICES=y898898-# CONFIG_NETDEVICES_MULTIQUEUE is not set899758# CONFIG_DUMMY is not set900759# CONFIG_BONDING is not set901760# CONFIG_MACVLAN is not set···921774# CONFIG_BROADCOM_PHY is not set922775# CONFIG_ICPLUS_PHY is not set923776# CONFIG_REALTEK_PHY is not set777777+# CONFIG_NATIONAL_PHY is not set778778+# CONFIG_STE10XP is not set779779+# CONFIG_LSI_ET1011C_PHY is not set924780# CONFIG_FIXED_PHY is not set925781# CONFIG_MDIO_BITBANG is not set926782CONFIG_NET_ETHERNET=y···933783# CONFIG_SUNGEM is not set934784# CONFIG_CASSINI is not set935785# CONFIG_NET_VENDOR_3COM is not set786786+# CONFIG_SMC91X is not set936787# CONFIG_DM9000 is not set788788+# CONFIG_ETHOC is not set789789+# CONFIG_SMSC911X is not set790790+# CONFIG_DNET is not set937791# CONFIG_NET_TULIP is not set938792# CONFIG_HP100 is not set939793# CONFIG_IBM_NEW_EMAC_ZMII is not set940794# CONFIG_IBM_NEW_EMAC_RGMII is not set941795# CONFIG_IBM_NEW_EMAC_TAH is not set942796# CONFIG_IBM_NEW_EMAC_EMAC4 is not set797797+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set798798+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set799799+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set943800# CONFIG_NET_PCI is not set944801# CONFIG_B44 is not set802802+# CONFIG_KS8842 is not set803803+# CONFIG_KS8851_MLL is not set804804+# CONFIG_ATL2 is not set945805CONFIG_NETDEV_1000=y946806# CONFIG_ACENIC is not set947807# CONFIG_DL2K is not set948808# CONFIG_E1000 is not set949809# CONFIG_E1000E is not set950950-# CONFIG_E1000E_ENABLED is not set951810# CONFIG_IP1000 is not set952811# CONFIG_IGB is not set812812+# CONFIG_IGBVF is not set953813# CONFIG_NS83820 is not set954814# CONFIG_HAMACHI is not set955815# CONFIG_YELLOWFIN is not set···971811# CONFIG_VIA_VELOCITY is not set972812# CONFIG_TIGON3 is not set973813# CONFIG_BNX2 is not set814814+# CONFIG_CNIC is not set974815# CONFIG_QLA3XXX is not set975816# CONFIG_ATL1 is not set817817+# CONFIG_ATL1E is not set818818+# CONFIG_ATL1C is not set819819+# CONFIG_JME is not set976820CONFIG_NETDEV_10000=y821821+CONFIG_MDIO=m977822# CONFIG_CHELSIO_T1 is not set823823+CONFIG_CHELSIO_T3_DEPENDS=y978824CONFIG_CHELSIO_T3=m825825+# CONFIG_ENIC is not set979826# CONFIG_IXGBE is not set980827# CONFIG_IXGB is not set981828# CONFIG_S2IO is not set829829+# CONFIG_VXGE is not set982830# CONFIG_MYRI10GE is not set983831CONFIG_NETXEN_NIC=m984832# CONFIG_NIU is not set833833+# CONFIG_MLX4_EN is not set985834# CONFIG_MLX4_CORE is not set986835# CONFIG_TEHUTI is not set987836# CONFIG_BNX2X is not set837837+# CONFIG_QLCNIC is not set838838+# CONFIG_QLGE is not set988839# CONFIG_SFC is not set840840+# CONFIG_BE2NET is not set989841# CONFIG_TR is not set842842+CONFIG_WLAN=y843843+# CONFIG_ATMEL is not set844844+# CONFIG_PRISM54 is not set845845+# CONFIG_HOSTAP is not set990846991847#992992-# Wireless LAN848848+# Enable WiMAX (Networking options) to see the WiMAX drivers993849#994994-# CONFIG_WLAN_PRE80211 is not set995995-# CONFIG_WLAN_80211 is not set996996-# CONFIG_IWLWIFI_LEDS is not set997850# CONFIG_WAN is not set998851# CONFIG_FDDI is not set999852# CONFIG_HIPPI is not set···1029856# CONFIG_NETCONSOLE is not set1030857# CONFIG_NETPOLL is not set1031858# CONFIG_NET_POLL_CONTROLLER is not set859859+# CONFIG_VMXNET3 is not set1032860# CONFIG_ISDN is not set1033861# CONFIG_PHONE is not set1034862···1047873# CONFIG_SERIO_PCIPS2 is not set1048874# CONFIG_SERIO_LIBPS2 is not set1049875CONFIG_SERIO_RAW=m876876+# CONFIG_SERIO_ALTERA_PS2 is not set1050877# CONFIG_GAMEPORT is not set10518781052879#···1068893# CONFIG_N_HDLC is not set1069894# CONFIG_RISCOM8 is not set1070895# CONFIG_SPECIALIX is not set10711071-# CONFIG_SX is not set10721072-# CONFIG_RIO is not set1073896# CONFIG_STALDRV is not set1074897# CONFIG_NOZOMI is not set1075898···1084911CONFIG_SERIAL_CORE=y1085912CONFIG_SERIAL_CORE_CONSOLE=y1086913# CONFIG_SERIAL_JSM is not set914914+# CONFIG_SERIAL_TIMBERDALE is not set1087915CONFIG_UNIX98_PTYS=y916916+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set1088917CONFIG_LEGACY_PTYS=y1089918CONFIG_LEGACY_PTY_COUNT=2561090919# CONFIG_IPMI_HANDLER is not set···1098923CONFIG_DEVPORT=y1099924CONFIG_I2C=y1100925CONFIG_I2C_BOARDINFO=y926926+CONFIG_I2C_COMPAT=y1101927CONFIG_I2C_CHARDEV=y928928+CONFIG_I2C_HELPER_AUTO=y11029291103930#1104931# I2C Hardware Bus support932932+#933933+934934+#935935+# PC SMBus host controller drivers1105936#1106937# CONFIG_I2C_ALI1535 is not set1107938# CONFIG_I2C_ALI1563 is not set···1115934# CONFIG_I2C_AMD756 is not set1116935# CONFIG_I2C_AMD8111 is not set1117936# CONFIG_I2C_I801 is not set11181118-# CONFIG_I2C_I810 is not set937937+# CONFIG_I2C_ISCH is not set1119938# CONFIG_I2C_PIIX4 is not set1120939# CONFIG_I2C_NFORCE2 is not set11211121-# CONFIG_I2C_OCORES is not set11221122-# CONFIG_I2C_PARPORT_LIGHT is not set11231123-# CONFIG_I2C_PROSAVAGE is not set11241124-# CONFIG_I2C_SAVAGE4 is not set11251125-CONFIG_I2C_SIBYTE=y11261126-# CONFIG_I2C_SIMTEC is not set1127940# CONFIG_I2C_SIS5595 is not set1128941# CONFIG_I2C_SIS630 is not set1129942# CONFIG_I2C_SIS96X is not set11301130-# CONFIG_I2C_TAOS_EVM is not set11311131-# CONFIG_I2C_STUB is not set1132943# CONFIG_I2C_VIA is not set1133944# CONFIG_I2C_VIAPRO is not set11341134-# CONFIG_I2C_VOODOO3 is not set11351135-# CONFIG_I2C_PCA_PLATFORM is not set11369451137946#11381138-# Miscellaneous I2C Chip support947947+# I2C system bus drivers (mostly embedded / system-on-chip)1139948#11401140-# CONFIG_DS1682 is not set11411141-CONFIG_EEPROM_LEGACY=y11421142-CONFIG_SENSORS_PCF8574=y11431143-# CONFIG_PCF8575 is not set11441144-CONFIG_SENSORS_PCF8591=y11451145-CONFIG_EEPROM_MAX6875=y11461146-# CONFIG_SENSORS_TSL2550 is not set949949+# CONFIG_I2C_OCORES is not set950950+# CONFIG_I2C_SIMTEC is not set951951+# CONFIG_I2C_XILINX is not set952952+953953+#954954+# External I2C/SMBus adapter drivers955955+#956956+# CONFIG_I2C_PARPORT_LIGHT is not set957957+# CONFIG_I2C_TAOS_EVM is not set958958+959959+#960960+# Other I2C/SMBus bus drivers961961+#962962+# CONFIG_I2C_PCA_PLATFORM is not set963963+CONFIG_I2C_SIBYTE=y964964+# CONFIG_I2C_STUB is not set1147965CONFIG_I2C_DEBUG_CORE=y1148966CONFIG_I2C_DEBUG_ALGO=y1149967CONFIG_I2C_DEBUG_BUS=y11501150-CONFIG_I2C_DEBUG_CHIP=y1151968# CONFIG_SPI is not set969969+970970+#971971+# PPS support972972+#973973+# CONFIG_PPS is not set1152974# CONFIG_W1 is not set1153975# CONFIG_POWER_SUPPLY is not set1154976# CONFIG_HWMON is not set1155977# CONFIG_THERMAL is not set11561156-# CONFIG_THERMAL_HWMON is not set1157978# CONFIG_WATCHDOG is not set979979+CONFIG_SSB_POSSIBLE=y11589801159981#1160982# Sonics Silicon Backplane1161983#11621162-CONFIG_SSB_POSSIBLE=y1163984# CONFIG_SSB is not set11649851165986#1166987# Multifunction device drivers1167988#989989+# CONFIG_MFD_CORE is not set990990+# CONFIG_MFD_88PM860X is not set1168991# CONFIG_MFD_SM501 is not set1169992# CONFIG_HTC_PASIC3 is not set11701170-11711171-#11721172-# Multimedia devices11731173-#11741174-11751175-#11761176-# Multimedia core support11771177-#11781178-# CONFIG_VIDEO_DEV is not set11791179-# CONFIG_DVB_CORE is not set11801180-# CONFIG_VIDEO_MEDIA is not set11811181-11821182-#11831183-# Multimedia drivers11841184-#11851185-# CONFIG_DAB is not set993993+# CONFIG_TWL4030_CORE is not set994994+# CONFIG_MFD_TMIO is not set995995+# CONFIG_PMIC_DA903X is not set996996+# CONFIG_PMIC_ADP5520 is not set997997+# CONFIG_MFD_MAX8925 is not set998998+# CONFIG_MFD_WM8400 is not set999999+# CONFIG_MFD_WM831X is not set10001000+# CONFIG_MFD_WM8350_I2C is not set10011001+# CONFIG_MFD_WM8994 is not set10021002+# CONFIG_MFD_PCF50633 is not set10031003+# CONFIG_AB3100_CORE is not set10041004+# CONFIG_LPC_SCH is not set10051005+# CONFIG_REGULATOR is not set10061006+# CONFIG_MEDIA_SUPPORT is not set1186100711871008#11881009# Graphics support11891010#10111011+CONFIG_VGA_ARB=y10121012+CONFIG_VGA_ARB_MAX_GPUS=1611901013# CONFIG_DRM is not set11911014# CONFIG_VGASTATE is not set11921015# CONFIG_VIDEO_OUTPUT_CONTROL is not set···12011016# Display device support12021017#12031018# CONFIG_DISPLAY_SUPPORT is not set12041204-12051205-#12061206-# Sound12071207-#12081019# CONFIG_SOUND is not set12091020CONFIG_USB_SUPPORT=y12101021CONFIG_USB_ARCH_HAS_HCD=y···12111030# CONFIG_USB_OTG_BLACKLIST_HUB is not set1212103112131032#12141214-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'10331033+# Enable Host or Gadget support to see Inventra options10341034+#10351035+10361036+#10371037+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may12151038#12161039# CONFIG_USB_GADGET is not set10401040+10411041+#10421042+# OTG and related infrastructure10431043+#10441044+# CONFIG_UWB is not set12171045# CONFIG_MMC is not set12181046# CONFIG_MEMSTICK is not set12191047# CONFIG_NEW_LEDS is not set···12301040# CONFIG_INFINIBAND is not set12311041CONFIG_RTC_LIB=y12321042# CONFIG_RTC_CLASS is not set10431043+# CONFIG_DMADEVICES is not set10441044+# CONFIG_AUXDISPLAY is not set12331045# CONFIG_UIO is not set10461046+10471047+#10481048+# TI VLYNQ10491049+#10501050+# CONFIG_STAGING is not set1234105112351052#12361053# File systems12371054#12381055CONFIG_EXT2_FS=m12391056CONFIG_EXT2_FS_XATTR=y12401240-# CONFIG_EXT2_FS_POSIX_ACL is not set12411241-# CONFIG_EXT2_FS_SECURITY is not set12421242-# CONFIG_EXT2_FS_XIP is not set12431243-CONFIG_EXT3_FS=y10571057+CONFIG_EXT2_FS_POSIX_ACL=y10581058+CONFIG_EXT2_FS_SECURITY=y10591059+CONFIG_EXT2_FS_XIP=y10601060+CONFIG_EXT3_FS=m10611061+CONFIG_EXT3_DEFAULTS_TO_ORDERED=y12441062CONFIG_EXT3_FS_XATTR=y12451245-# CONFIG_EXT3_FS_POSIX_ACL is not set12461246-# CONFIG_EXT3_FS_SECURITY is not set12471247-# CONFIG_EXT4DEV_FS is not set12481248-CONFIG_JBD=y10631063+CONFIG_EXT3_FS_POSIX_ACL=y10641064+CONFIG_EXT3_FS_SECURITY=y10651065+CONFIG_EXT4_FS=y10661066+CONFIG_EXT4_FS_XATTR=y10671067+CONFIG_EXT4_FS_POSIX_ACL=y10681068+CONFIG_EXT4_FS_SECURITY=y10691069+# CONFIG_EXT4_DEBUG is not set10701070+CONFIG_FS_XIP=y10711071+CONFIG_JBD=m10721072+CONFIG_JBD2=y12491073CONFIG_FS_MBCACHE=y12501074# CONFIG_REISERFS_FS is not set12511075# CONFIG_JFS_FS is not set12521252-# CONFIG_FS_POSIX_ACL is not set10761076+CONFIG_FS_POSIX_ACL=y12531077# CONFIG_XFS_FS is not set12541078# CONFIG_GFS2_FS is not set12551079# CONFIG_OCFS2_FS is not set10801080+# CONFIG_BTRFS_FS is not set10811081+# CONFIG_NILFS2_FS is not set10821082+CONFIG_FILE_LOCKING=y10831083+CONFIG_FSNOTIFY=y12561084CONFIG_DNOTIFY=y12571085CONFIG_INOTIFY=y12581086CONFIG_INOTIFY_USER=y12591087CONFIG_QUOTA=y12601088CONFIG_QUOTA_NETLINK_INTERFACE=y12611089# CONFIG_PRINT_QUOTA_WARNING is not set10901090+CONFIG_QUOTA_TREE=m12621091# CONFIG_QFMT_V1 is not set12631092CONFIG_QFMT_V2=m12641093CONFIG_QUOTACTL=y12651094CONFIG_AUTOFS_FS=m12661095CONFIG_AUTOFS4_FS=m12671096CONFIG_FUSE_FS=m10971097+# CONFIG_CUSE is not set10981098+10991099+#11001100+# Caches11011101+#11021102+# CONFIG_FSCACHE is not set1268110312691104#12701105# CD-ROM/DVD Filesystems···13181103CONFIG_PROC_FS=y13191104CONFIG_PROC_KCORE=y13201105CONFIG_PROC_SYSCTL=y11061106+CONFIG_PROC_PAGE_MONITOR=y13211107CONFIG_SYSFS=y13221108CONFIG_TMPFS=y13231109# CONFIG_TMPFS_POSIX_ACL is not set13241110# CONFIG_HUGETLB_PAGE is not set13251111CONFIG_CONFIGFS_FS=m13261326-13271327-#13281328-# Miscellaneous filesystems13291329-#11121112+CONFIG_MISC_FILESYSTEMS=y13301113# CONFIG_ADFS_FS is not set13311114# CONFIG_AFFS_FS is not set13321115# CONFIG_ECRYPT_FS is not set···13331120# CONFIG_BEFS_FS is not set13341121# CONFIG_BFS_FS is not set13351122# CONFIG_EFS_FS is not set11231123+# CONFIG_LOGFS is not set13361124# CONFIG_CRAMFS is not set11251125+# CONFIG_SQUASHFS is not set13371126# CONFIG_VXFS_FS is not set13381127# CONFIG_MINIX_FS is not set11281128+# CONFIG_OMFS_FS is not set13391129# CONFIG_HPFS_FS is not set13401130# CONFIG_QNX4FS_FS is not set13411131# CONFIG_ROMFS_FS is not set···13491133CONFIG_NFS_V3=y13501134# CONFIG_NFS_V3_ACL is not set13511135# CONFIG_NFS_V4 is not set13521352-# CONFIG_NFSD is not set13531136CONFIG_ROOT_NFS=y11371137+# CONFIG_NFSD is not set13541138CONFIG_LOCKD=y13551139CONFIG_LOCKD_V4=y13561140CONFIG_NFS_COMMON=y13571141CONFIG_SUNRPC=y13581358-# CONFIG_SUNRPC_BIND34 is not set13591359-# CONFIG_RPCSEC_GSS_KRB5 is not set13601360-# CONFIG_RPCSEC_GSS_SPKM3 is not set11421142+CONFIG_SUNRPC_GSS=m11431143+CONFIG_RPCSEC_GSS_KRB5=m11441144+CONFIG_RPCSEC_GSS_SPKM3=m13611145# CONFIG_SMB_FS is not set11461146+# CONFIG_CEPH_FS is not set13621147# CONFIG_CIFS is not set13631148# CONFIG_NCP_FS is not set13641149# CONFIG_CODA_FS is not set···14221205CONFIG_ENABLE_MUST_CHECK=y14231206CONFIG_FRAME_WARN=204814241207CONFIG_MAGIC_SYSRQ=y12081208+# CONFIG_STRIP_ASM_SYMS is not set14251209# CONFIG_UNUSED_SYMBOLS is not set14261210# CONFIG_DEBUG_FS is not set14271211# CONFIG_HEADERS_CHECK is not set14281212CONFIG_DEBUG_KERNEL=y14291213# CONFIG_DEBUG_SHIRQ is not set14301214CONFIG_DETECT_SOFTLOCKUP=y12151215+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set12161216+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=012171217+CONFIG_DETECT_HUNG_TASK=y12181218+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set12191219+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=014311220CONFIG_SCHED_DEBUG=y14321221# CONFIG_SCHEDSTATS is not set14331222# CONFIG_TIMER_STATS is not set···14421219# CONFIG_DEBUG_RT_MUTEXES is not set14431220# CONFIG_RT_MUTEX_TESTER is not set14441221# CONFIG_DEBUG_SPINLOCK is not set14451445-CONFIG_DEBUG_MUTEXES=y12221222+# CONFIG_DEBUG_MUTEXES is not set14461223# CONFIG_DEBUG_LOCK_ALLOC is not set14471224# CONFIG_PROVE_LOCKING is not set14481225# CONFIG_LOCK_STAT is not set14491449-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set12261226+CONFIG_DEBUG_SPINLOCK_SLEEP=y14501227# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set14511228# CONFIG_DEBUG_KOBJECT is not set14521229# CONFIG_DEBUG_INFO is not set14531230# CONFIG_DEBUG_VM is not set14541231# CONFIG_DEBUG_WRITECOUNT is not set14551455-# CONFIG_DEBUG_LIST is not set12321232+CONFIG_DEBUG_MEMORY_INIT=y12331233+CONFIG_DEBUG_LIST=y14561234# CONFIG_DEBUG_SG is not set12351235+# CONFIG_DEBUG_NOTIFIERS is not set12361236+# CONFIG_DEBUG_CREDENTIALS is not set14571237# CONFIG_BOOT_PRINTK_DELAY is not set14581238# CONFIG_RCU_TORTURE_TEST is not set12391239+CONFIG_RCU_CPU_STALL_DETECTOR=y14591240# CONFIG_BACKTRACE_SELF_TEST is not set12411241+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set12421242+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set14601243# CONFIG_FAULT_INJECTION is not set12441244+# CONFIG_SYSCTL_SYSCALL_CHECK is not set12451245+# CONFIG_PAGE_POISONING is not set12461246+CONFIG_HAVE_FUNCTION_TRACER=y12471247+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y12481248+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y12491249+CONFIG_HAVE_DYNAMIC_FTRACE=y12501250+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y12511251+CONFIG_TRACING_SUPPORT=y12521252+CONFIG_FTRACE=y12531253+# CONFIG_FUNCTION_TRACER is not set12541254+# CONFIG_IRQSOFF_TRACER is not set12551255+# CONFIG_SCHED_TRACER is not set12561256+# CONFIG_ENABLE_DEFAULT_TRACERS is not set12571257+# CONFIG_BOOT_TRACER is not set12581258+CONFIG_BRANCH_PROFILE_NONE=y12591259+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set12601260+# CONFIG_PROFILE_ALL_BRANCHES is not set12611261+# CONFIG_STACK_TRACER is not set12621262+# CONFIG_KMEMTRACE is not set12631263+# CONFIG_WORKQUEUE_TRACER is not set12641264+# CONFIG_BLK_DEV_IO_TRACE is not set14611265# CONFIG_SAMPLES is not set12661266+CONFIG_HAVE_ARCH_KGDB=y12671267+# CONFIG_KGDB is not set12681268+CONFIG_EARLY_PRINTK=y14621269# CONFIG_CMDLINE_BOOL is not set14631270# CONFIG_DEBUG_STACK_USAGE is not set14641271# CONFIG_SB1XXX_CORELIS is not set···14991246#15001247CONFIG_KEYS=y15011248CONFIG_KEYS_DEBUG_PROC_KEYS=y15021502-# CONFIG_SECURITY is not set15031503-# CONFIG_SECURITY_FILE_CAPABILITIES is not set12491249+CONFIG_SECURITY=y12501250+# CONFIG_SECURITYFS is not set12511251+CONFIG_SECURITY_NETWORK=y12521252+CONFIG_SECURITY_NETWORK_XFRM=y12531253+# CONFIG_SECURITY_PATH is not set12541254+CONFIG_LSM_MMAP_MIN_ADDR=6553612551255+CONFIG_SECURITY_SELINUX=y12561256+CONFIG_SECURITY_SELINUX_BOOTPARAM=y12571257+CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=112581258+CONFIG_SECURITY_SELINUX_DISABLE=y12591259+CONFIG_SECURITY_SELINUX_DEVELOP=y12601260+CONFIG_SECURITY_SELINUX_AVC_STATS=y12611261+CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=112621262+# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set12631263+# CONFIG_SECURITY_SMACK is not set12641264+# CONFIG_SECURITY_TOMOYO is not set12651265+# CONFIG_DEFAULT_SECURITY_SELINUX is not set12661266+# CONFIG_DEFAULT_SECURITY_SMACK is not set12671267+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set12681268+CONFIG_DEFAULT_SECURITY_DAC=y12691269+CONFIG_DEFAULT_SECURITY=""15041270CONFIG_CRYPTO=y1505127115061272#15071273# Crypto core or helper15081274#12751275+# CONFIG_CRYPTO_FIPS is not set15091276CONFIG_CRYPTO_ALGAPI=y12771277+CONFIG_CRYPTO_ALGAPI2=y15101278CONFIG_CRYPTO_AEAD=m12791279+CONFIG_CRYPTO_AEAD2=y15111280CONFIG_CRYPTO_BLKCIPHER=y12811281+CONFIG_CRYPTO_BLKCIPHER2=y15121282CONFIG_CRYPTO_HASH=y12831283+CONFIG_CRYPTO_HASH2=y12841284+CONFIG_CRYPTO_RNG=m12851285+CONFIG_CRYPTO_RNG2=y12861286+CONFIG_CRYPTO_PCOMP=y15131287CONFIG_CRYPTO_MANAGER=y12881288+CONFIG_CRYPTO_MANAGER2=y15141289CONFIG_CRYPTO_GF128MUL=m15151290CONFIG_CRYPTO_NULL=y12911291+# CONFIG_CRYPTO_PCRYPT is not set12921292+CONFIG_CRYPTO_WORKQUEUE=y15161293# CONFIG_CRYPTO_CRYPTD is not set15171294CONFIG_CRYPTO_AUTHENC=m15181295# CONFIG_CRYPTO_TEST is not set···15591276#15601277CONFIG_CRYPTO_CBC=m15611278CONFIG_CRYPTO_CTR=m15621562-# CONFIG_CRYPTO_CTS is not set12791279+CONFIG_CRYPTO_CTS=m15631280CONFIG_CRYPTO_ECB=m15641281CONFIG_CRYPTO_LRW=m15651282CONFIG_CRYPTO_PCBC=m···15701287#15711288CONFIG_CRYPTO_HMAC=y15721289CONFIG_CRYPTO_XCBC=m12901290+CONFIG_CRYPTO_VMAC=m1573129115741292#15751293# Digest15761294#15771577-# CONFIG_CRYPTO_CRC32C is not set12951295+CONFIG_CRYPTO_CRC32C=m12961296+CONFIG_CRYPTO_GHASH=m15781297CONFIG_CRYPTO_MD4=m15791298CONFIG_CRYPTO_MD5=y15801299CONFIG_CRYPTO_MICHAEL_MIC=m13001300+CONFIG_CRYPTO_RMD128=m13011301+CONFIG_CRYPTO_RMD160=m13021302+CONFIG_CRYPTO_RMD256=m13031303+CONFIG_CRYPTO_RMD320=m15811304CONFIG_CRYPTO_SHA1=m15821305CONFIG_CRYPTO_SHA256=m15831306CONFIG_CRYPTO_SHA512=m···16141325# Compression16151326#16161327CONFIG_CRYPTO_DEFLATE=m16171617-# CONFIG_CRYPTO_LZO is not set13281328+CONFIG_CRYPTO_ZLIB=m13291329+CONFIG_CRYPTO_LZO=m13301330+13311331+#13321332+# Random Number Generation13331333+#13341334+CONFIG_CRYPTO_ANSI_CPRNG=m16181335CONFIG_CRYPTO_HW=y16191336# CONFIG_CRYPTO_DEV_HIFN_795X is not set13371337+# CONFIG_BINARY_PRINTF is not set1620133816211339#16221340# Library routines16231341#16241342CONFIG_BITREVERSE=y16251625-# CONFIG_GENERIC_FIND_FIRST_BIT is not set13431343+CONFIG_GENERIC_FIND_LAST_BIT=y16261344CONFIG_CRC_CCITT=m16271627-# CONFIG_CRC16 is not set13451345+CONFIG_CRC16=y13461346+CONFIG_CRC_T10DIF=m16281347CONFIG_CRC_ITU_T=m16291348CONFIG_CRC32=y16301630-# CONFIG_CRC7 is not set13491349+CONFIG_CRC7=m16311350CONFIG_LIBCRC32C=m16321351CONFIG_AUDIT_GENERIC=y16331633-CONFIG_ZLIB_INFLATE=m13521352+CONFIG_ZLIB_INFLATE=y16341353CONFIG_ZLIB_DEFLATE=m16351635-CONFIG_PLIST=y13541354+CONFIG_LZO_COMPRESS=m13551355+CONFIG_LZO_DECOMPRESS=m13561356+CONFIG_DECOMPRESS_GZIP=y16361357CONFIG_HAS_IOMEM=y16371358CONFIG_HAS_IOPORT=y16381359CONFIG_HAS_DMA=y13601360+CONFIG_NLATTR=y
+4-2
arch/mips/include/asm/abi.h
···1313#include <asm/siginfo.h>14141515struct mips_abi {1616- int (* const setup_frame)(struct k_sigaction * ka,1616+ int (* const setup_frame)(void *sig_return, struct k_sigaction *ka,1717 struct pt_regs *regs, int signr,1818 sigset_t *set);1919- int (* const setup_rt_frame)(struct k_sigaction * ka,1919+ const unsigned long signal_return_offset;2020+ int (* const setup_rt_frame)(void *sig_return, struct k_sigaction *ka,2021 struct pt_regs *regs, int signr,2122 sigset_t *set, siginfo_t *info);2323+ const unsigned long rt_signal_return_offset;2224 const unsigned long restart;2325};2426
···4545 unsigned int has_ohci0:1;4646 unsigned int has_ehci0:1;4747 unsigned int has_dsp:1;4848+ unsigned int has_uart0:1;4949+ unsigned int has_uart1:1;48504951 /* ethernet config */5052 struct bcm63xx_enet_platform_data enet0;
···33333434extern unsigned int vced_count, vcei_count;35353636+/*3737+ * A special page (the vdso) is mapped into all processes at the very3838+ * top of the virtual memory space.3939+ */4040+#define SPECIAL_PAGES_SIZE PAGE_SIZE4141+3642#ifdef CONFIG_32BIT3743/*3844 * User space process size: 2GB. This is hardcoded into a few places,3945 * so don't change it unless you know what you are doing.4046 */4147#define TASK_SIZE 0x7fff8000UL4242-#define STACK_TOP TASK_SIZE4848+#define STACK_TOP ((TASK_SIZE & PAGE_MASK) - SPECIAL_PAGES_SIZE)43494450/*4551 * This decides where the kernel will search for a free chunk of vm···6559#define TASK_SIZE32 0x7fff8000UL6660#define TASK_SIZE 0x10000000000UL6761#define STACK_TOP \6868- (test_thread_flag(TIF_32BIT_ADDR) ? TASK_SIZE32 : TASK_SIZE)6262+ (((test_thread_flag(TIF_32BIT_ADDR) ? \6363+ TASK_SIZE32 : TASK_SIZE) & PAGE_MASK) - SPECIAL_PAGES_SIZE)69647065/*7166 * This decides where the kernel will search for a free chunk of vm
+19
arch/mips/include/asm/stackframe.h
···121121 .endm122122#else123123 .macro get_saved_sp /* Uniprocessor variation */124124+#ifdef CONFIG_CPU_LOONGSON2F125125+ /*126126+ * Clear BTB (branch target buffer), forbid RAS (return address127127+ * stack) to workaround the Out-of-order Issue in Loongson2F128128+ * via its diagnostic register.129129+ */130130+ move k0, ra131131+ jal 1f132132+ nop133133+1: jal 1f134134+ nop135135+1: jal 1f136136+ nop137137+1: jal 1f138138+ nop139139+1: move ra, k0140140+ li k0, 3141141+ mtc0 k0, $22142142+#endif /* CONFIG_CPU_LOONGSON2F */124143#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)125144 lui k1, %hi(kernelsp)126145#else
···11+/*22+ * This file is subject to the terms and conditions of the GNU General Public33+ * License. See the file "COPYING" in the main directory of this archive44+ * for more details.55+ *66+ * Copyright (C) 2009 Cavium Networks77+ */88+99+#ifndef __ASM_VDSO_H1010+#define __ASM_VDSO_H1111+1212+#include <linux/types.h>1313+1414+1515+#ifdef CONFIG_32BIT1616+struct mips_vdso {1717+ u32 signal_trampoline[2];1818+ u32 rt_signal_trampoline[2];1919+};2020+#else /* !CONFIG_32BIT */2121+struct mips_vdso {2222+ u32 o32_signal_trampoline[2];2323+ u32 o32_rt_signal_trampoline[2];2424+ u32 rt_signal_trampoline[2];2525+ u32 n32_rt_signal_trampoline[2];2626+};2727+#endif /* CONFIG_32BIT */2828+2929+#endif /* __ASM_VDSO_H */
···164164 spin_unlock_irqrestore(&loongson2_wait_lock, flags);165165}166166EXPORT_SYMBOL_GPL(loongson2_cpu_wait);167167+168168+MODULE_AUTHOR("Yanhua <yanh@lemote.com>");169169+MODULE_DESCRIPTION("cpufreq driver for Loongson 2F");170170+MODULE_LICENSE("GPL");
+6-1
arch/mips/kernel/process.c
···63636464 smtc_idle_loop_hook();6565#endif6666- if (cpu_wait)6666+6767+ if (cpu_wait) {6868+ /* Don't trace irqs off for idle */6969+ stop_critical_timings();6770 (*cpu_wait)();7171+ start_critical_timings();7272+ }6873 }6974#ifdef CONFIG_HOTPLUG_CPU7075 if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map) &&
-5
arch/mips/kernel/signal-common.h
···2626 */2727extern void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,2828 size_t frame_size);2929-/*3030- * install trampoline code to get back from the sig handler3131- */3232-extern int install_sigtramp(unsigned int __user *tramp, unsigned int syscall);3333-3429/* Check and clear pending FPU exceptions in saved CSR */3530extern int fpcsr_pending(unsigned int __user *fpcsr);3631
+19-67
arch/mips/kernel/signal.c
···3232#include <asm/ucontext.h>3333#include <asm/cpu-features.h>3434#include <asm/war.h>3535+#include <asm/vdso.h>35363637#include "signal-common.h"3738···4544extern asmlinkage int fpu_emulator_save_context(struct sigcontext __user *sc);4645extern asmlinkage int fpu_emulator_restore_context(struct sigcontext __user *sc);47464848-/*4949- * Horribly complicated - with the bloody RM9000 workarounds enabled5050- * the signal trampolines is moving to the end of the structure so we can5151- * increase the alignment without breaking software compatibility.5252- */5353-#if ICACHE_REFILLS_WORKAROUND_WAR == 05454-5547struct sigframe {5648 u32 sf_ass[4]; /* argument save space for o32 */5757- u32 sf_code[2]; /* signal trampoline */4949+ u32 sf_pad[2]; /* Was: signal trampoline */5850 struct sigcontext sf_sc;5951 sigset_t sf_mask;6052};61536254struct rt_sigframe {6355 u32 rs_ass[4]; /* argument save space for o32 */6464- u32 rs_code[2]; /* signal trampoline */5656+ u32 rs_pad[2]; /* Was: signal trampoline */6557 struct siginfo rs_info;6658 struct ucontext rs_uc;6759};6868-6969-#else7070-7171-struct sigframe {7272- u32 sf_ass[4]; /* argument save space for o32 */7373- u32 sf_pad[2];7474- struct sigcontext sf_sc; /* hw context */7575- sigset_t sf_mask;7676- u32 sf_code[8] ____cacheline_aligned; /* signal trampoline */7777-};7878-7979-struct rt_sigframe {8080- u32 rs_ass[4]; /* argument save space for o32 */8181- u32 rs_pad[2];8282- struct siginfo rs_info;8383- struct ucontext rs_uc;8484- u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */8585-};8686-8787-#endif88608961/*9062 * Helper routines···238264 sp = current->sas_ss_sp + current->sas_ss_size;239265240266 return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? ~(cpu_icache_line_size()-1) : ALMASK));241241-}242242-243243-int install_sigtramp(unsigned int __user *tramp, unsigned int syscall)244244-{245245- int err;246246-247247- /*248248- * Set up the return code ...249249- *250250- * li v0, __NR__foo_sigreturn251251- * syscall252252- */253253-254254- err = __put_user(0x24020000 + syscall, tramp + 0);255255- err |= __put_user(0x0000000c , tramp + 1);256256- if (ICACHE_REFILLS_WORKAROUND_WAR) {257257- err |= __put_user(0, tramp + 2);258258- err |= __put_user(0, tramp + 3);259259- err |= __put_user(0, tramp + 4);260260- err |= __put_user(0, tramp + 5);261261- err |= __put_user(0, tramp + 6);262262- err |= __put_user(0, tramp + 7);263263- }264264- flush_cache_sigtramp((unsigned long) tramp);265265-266266- return err;267267}268268269269/*···432484}433485434486#ifdef CONFIG_TRAD_SIGNALS435435-static int setup_frame(struct k_sigaction * ka, struct pt_regs *regs,436436- int signr, sigset_t *set)487487+static int setup_frame(void *sig_return, struct k_sigaction *ka,488488+ struct pt_regs *regs, int signr, sigset_t *set)437489{438490 struct sigframe __user *frame;439491 int err = 0;···441493 frame = get_sigframe(ka, regs, sizeof(*frame));442494 if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))443495 goto give_sigsegv;444444-445445- err |= install_sigtramp(frame->sf_code, __NR_sigreturn);446496447497 err |= setup_sigcontext(regs, &frame->sf_sc);448498 err |= __copy_to_user(&frame->sf_mask, set, sizeof(*set));···461515 regs->regs[ 5] = 0;462516 regs->regs[ 6] = (unsigned long) &frame->sf_sc;463517 regs->regs[29] = (unsigned long) frame;464464- regs->regs[31] = (unsigned long) frame->sf_code;518518+ regs->regs[31] = (unsigned long) sig_return;465519 regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;466520467521 DEBUGP("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%lx\n",···475529}476530#endif477531478478-static int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,479479- int signr, sigset_t *set, siginfo_t *info)532532+static int setup_rt_frame(void *sig_return, struct k_sigaction *ka,533533+ struct pt_regs *regs, int signr, sigset_t *set,534534+ siginfo_t *info)480535{481536 struct rt_sigframe __user *frame;482537 int err = 0;···485538 frame = get_sigframe(ka, regs, sizeof(*frame));486539 if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))487540 goto give_sigsegv;488488-489489- err |= install_sigtramp(frame->rs_code, __NR_rt_sigreturn);490541491542 /* Create siginfo. */492543 err |= copy_siginfo_to_user(&frame->rs_info, info);···518573 regs->regs[ 5] = (unsigned long) &frame->rs_info;519574 regs->regs[ 6] = (unsigned long) &frame->rs_uc;520575 regs->regs[29] = (unsigned long) frame;521521- regs->regs[31] = (unsigned long) frame->rs_code;576576+ regs->regs[31] = (unsigned long) sig_return;522577 regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;523578524579 DEBUGP("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%lx\n",···535590struct mips_abi mips_abi = {536591#ifdef CONFIG_TRAD_SIGNALS537592 .setup_frame = setup_frame,593593+ .signal_return_offset = offsetof(struct mips_vdso, signal_trampoline),538594#endif539595 .setup_rt_frame = setup_rt_frame,596596+ .rt_signal_return_offset =597597+ offsetof(struct mips_vdso, rt_signal_trampoline),540598 .restart = __NR_restart_syscall541599};542600···547599 struct k_sigaction *ka, sigset_t *oldset, struct pt_regs *regs)548600{549601 int ret;602602+ struct mips_abi *abi = current->thread.abi;603603+ void *vdso = current->mm->context.vdso;550604551605 switch(regs->regs[0]) {552606 case ERESTART_RESTARTBLOCK:···569619 regs->regs[0] = 0; /* Don't deal with this again. */570620571621 if (sig_uses_siginfo(ka))572572- ret = current->thread.abi->setup_rt_frame(ka, regs, sig, oldset, info);622622+ ret = abi->setup_rt_frame(vdso + abi->rt_signal_return_offset,623623+ ka, regs, sig, oldset, info);573624 else574574- ret = current->thread.abi->setup_frame(ka, regs, sig, oldset);625625+ ret = abi->setup_frame(vdso + abi->signal_return_offset,626626+ ka, regs, sig, oldset);575627576628 spin_lock_irq(¤t->sighand->siglock);577629 sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask);
+14-41
arch/mips/kernel/signal32.c
···3232#include <asm/system.h>3333#include <asm/fpu.h>3434#include <asm/war.h>3535+#include <asm/vdso.h>35363637#include "signal-common.h"3738···4847/*4948 * Including <asm/unistd.h> would give use the 64-bit syscall numbers ...5049 */5151-#define __NR_O32_sigreturn 41195252-#define __NR_O32_rt_sigreturn 41935350#define __NR_O32_restart_syscall 425354515552/* 32-bit compatibility types */···7677 compat_sigset_t uc_sigmask; /* mask last for extensibility */7778};78797979-/*8080- * Horribly complicated - with the bloody RM9000 workarounds enabled8181- * the signal trampolines is moving to the end of the structure so we can8282- * increase the alignment without breaking software compatibility.8383- */8484-#if ICACHE_REFILLS_WORKAROUND_WAR == 08585-8680struct sigframe32 {8781 u32 sf_ass[4]; /* argument save space for o32 */8888- u32 sf_code[2]; /* signal trampoline */8282+ u32 sf_pad[2]; /* Was: signal trampoline */8983 struct sigcontext32 sf_sc;9084 compat_sigset_t sf_mask;9185};92869387struct rt_sigframe32 {9488 u32 rs_ass[4]; /* argument save space for o32 */9595- u32 rs_code[2]; /* signal trampoline */8989+ u32 rs_pad[2]; /* Was: signal trampoline */9690 compat_siginfo_t rs_info;9791 struct ucontext32 rs_uc;9892};9999-100100-#else /* ICACHE_REFILLS_WORKAROUND_WAR */101101-102102-struct sigframe32 {103103- u32 sf_ass[4]; /* argument save space for o32 */104104- u32 sf_pad[2];105105- struct sigcontext32 sf_sc; /* hw context */106106- compat_sigset_t sf_mask;107107- u32 sf_code[8] ____cacheline_aligned; /* signal trampoline */108108-};109109-110110-struct rt_sigframe32 {111111- u32 rs_ass[4]; /* argument save space for o32 */112112- u32 rs_pad[2];113113- compat_siginfo_t rs_info;114114- struct ucontext32 rs_uc;115115- u32 rs_code[8] __attribute__((aligned(32))); /* signal trampoline */116116-};117117-118118-#endif /* !ICACHE_REFILLS_WORKAROUND_WAR */1199312094/*12195 * sigcontext handlers···570598 force_sig(SIGSEGV, current);571599}572600573573-static int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,574574- int signr, sigset_t *set)601601+static int setup_frame_32(void *sig_return, struct k_sigaction *ka,602602+ struct pt_regs *regs, int signr, sigset_t *set)575603{576604 struct sigframe32 __user *frame;577605 int err = 0;···579607 frame = get_sigframe(ka, regs, sizeof(*frame));580608 if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))581609 goto give_sigsegv;582582-583583- err |= install_sigtramp(frame->sf_code, __NR_O32_sigreturn);584610585611 err |= setup_sigcontext32(regs, &frame->sf_sc);586612 err |= __copy_conv_sigset_to_user(&frame->sf_mask, set);···600630 regs->regs[ 5] = 0;601631 regs->regs[ 6] = (unsigned long) &frame->sf_sc;602632 regs->regs[29] = (unsigned long) frame;603603- regs->regs[31] = (unsigned long) frame->sf_code;633633+ regs->regs[31] = (unsigned long) sig_return;604634 regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;605635606636 DEBUGP("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%lx\n",···614644 return -EFAULT;615645}616646617617-static int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs,618618- int signr, sigset_t *set, siginfo_t *info)647647+static int setup_rt_frame_32(void *sig_return, struct k_sigaction *ka,648648+ struct pt_regs *regs, int signr, sigset_t *set,649649+ siginfo_t *info)619650{620651 struct rt_sigframe32 __user *frame;621652 int err = 0;···625654 frame = get_sigframe(ka, regs, sizeof(*frame));626655 if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))627656 goto give_sigsegv;628628-629629- err |= install_sigtramp(frame->rs_code, __NR_O32_rt_sigreturn);630657631658 /* Convert (siginfo_t -> compat_siginfo_t) and copy to user. */632659 err |= copy_siginfo_to_user32(&frame->rs_info, info);···659690 regs->regs[ 5] = (unsigned long) &frame->rs_info;660691 regs->regs[ 6] = (unsigned long) &frame->rs_uc;661692 regs->regs[29] = (unsigned long) frame;662662- regs->regs[31] = (unsigned long) frame->rs_code;693693+ regs->regs[31] = (unsigned long) sig_return;663694 regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;664695665696 DEBUGP("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%lx\n",···678709 */679710struct mips_abi mips_abi_32 = {680711 .setup_frame = setup_frame_32,712712+ .signal_return_offset =713713+ offsetof(struct mips_vdso, o32_signal_trampoline),681714 .setup_rt_frame = setup_rt_frame_32,715715+ .rt_signal_return_offset =716716+ offsetof(struct mips_vdso, o32_rt_signal_trampoline),682717 .restart = __NR_O32_restart_syscall683718};684719
···8787 return ret;8888}89899090+int sb1250_m3_workaround_needed(void)9191+{9292+ switch (soc_type) {9393+ case K_SYS_SOC_TYPE_BCM1250:9494+ case K_SYS_SOC_TYPE_BCM1250_ALT:9595+ case K_SYS_SOC_TYPE_BCM1250_ALT2:9696+ case K_SYS_SOC_TYPE_BCM1125:9797+ case K_SYS_SOC_TYPE_BCM1125H:9898+ return soc_pass < K_SYS_REVISION_BCM1250_C0;9999+100100+ default:101101+ return 0;102102+ }103103+}104104+90105static int __init setup_bcm112x(void)91106{92107 int ret = 0;
···1919 bool "D-cache flush debugging"2020 depends on SPARC64 && DEBUG_KERNEL21212222-config STACK_DEBUG2323- bool "Stack Overflow Detection Support"2424-2522config MCOUNT2623 bool2724 depends on SPARC642828- depends on STACK_DEBUG || FUNCTION_TRACER2525+ depends on FUNCTION_TRACER2926 default y30273128config FRAME_POINTER
+1-1
arch/sparc/include/asm/cpudata_64.h
···1717 unsigned int __nmi_count;1818 unsigned long clock_tick; /* %tick's per second */1919 unsigned long __pad;2020- unsigned int __pad1;2020+ unsigned int irq0_irqs;2121 unsigned int __pad2;22222323 /* Dcache line 2, rarely used */
+19-2
arch/sparc/include/asm/irqflags_64.h
···7676 */7777static inline unsigned long __raw_local_irq_save(void)7878{7979- unsigned long flags = __raw_local_save_flags();7979+ unsigned long flags, tmp;80808181- raw_local_irq_disable();8181+ /* Disable interrupts to PIL_NORMAL_MAX unless we already8282+ * are using PIL_NMI, in which case PIL_NMI is retained.8383+ *8484+ * The only values we ever program into the %pil are 0,8585+ * PIL_NORMAL_MAX and PIL_NMI.8686+ *8787+ * Since PIL_NMI is the largest %pil value and all bits are8888+ * set in it (0xf), it doesn't matter what PIL_NORMAL_MAX8989+ * actually is.9090+ */9191+ __asm__ __volatile__(9292+ "rdpr %%pil, %0\n\t"9393+ "or %0, %2, %1\n\t"9494+ "wrpr %1, 0x0, %%pil"9595+ : "=r" (flags), "=r" (tmp)9696+ : "i" (PIL_NORMAL_MAX)9797+ : "memory"9898+ );829983100 return flags;84101}
+1-1
arch/sparc/include/asm/thread_info_64.h
···111111#define THREAD_SHIFT PAGE_SHIFT112112#endif /* PAGE_SHIFT == 13 */113113114114-#define PREEMPT_ACTIVE 0x4000000114114+#define PREEMPT_ACTIVE 0x10000000115115116116/*117117 * macros/functions for gaining access to the thread information structure
···2323#include <asm/ptrace.h>2424#include <asm/pcr.h>25252626+#include "kstack.h"2727+2628/* We don't have a real NMI on sparc64, but we can fake one2729 * up using profiling counter overflow interrupts and interrupt2830 * levels.···9492notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs)9593{9694 unsigned int sum, touched = 0;9797- int cpu = smp_processor_id();9595+ void *orig_sp;98969997 clear_softint(1 << irq);10098···102100103101 nmi_enter();104102103103+ orig_sp = set_hardirq_stack();104104+105105 if (notify_die(DIE_NMI, "nmi", regs, 0,106106 pt_regs_trap_type(regs), SIGINT) == NOTIFY_STOP)107107 touched = 1;108108 else109109 pcr_ops->write(PCR_PIC_PRIV);110110111111- sum = kstat_irqs_cpu(0, cpu);111111+ sum = local_cpu_data().irq0_irqs;112112 if (__get_cpu_var(nmi_touch)) {113113 __get_cpu_var(nmi_touch) = 0;114114 touched = 1;···128124 write_pic(picl_value(nmi_hz));129125 pcr_ops->write(pcr_enable);130126 }127127+128128+ restore_hardirq_stack(orig_sp);131129132130 nmi_exit();133131}
···88#include <linux/irq.h>991010#include <linux/perf_event.h>1111+#include <linux/ftrace.h>11121213#include <asm/pil.h>1314#include <asm/pcr.h>···3534 * Therefore in such situations we defer the work by signalling3635 * a lower level cpu IRQ.3736 */3838-void deferred_pcr_work_irq(int irq, struct pt_regs *regs)3737+void __irq_entry deferred_pcr_work_irq(int irq, struct pt_regs *regs)3938{4039 struct pt_regs *old_regs;4140
+11-1
arch/sparc/kernel/rtrap_64.S
···130130 nop131131 call trace_hardirqs_on132132 nop133133- wrpr %l4, %pil133133+ /* Do not actually set the %pil here. We will do that134134+ * below after we clear PSTATE_IE in the %pstate register.135135+ * If we re-enable interrupts here, we can recurse down136136+ * the hardirq stack potentially endlessly, causing a137137+ * stack overflow.138138+ *139139+ * It is tempting to put this test and trace_hardirqs_on140140+ * call at the 'rt_continue' label, but that will not work141141+ * as that path hits unconditionally and we do not want to142142+ * execute this in NMI return paths, for example.143143+ */134144#endif135145rtrap_no_irq_enable:136146 andcc %l1, TSTATE_PRIV, %l3
···5050}51515252/* 16 = double-word, 8 = extra-word, 4 = word, 2 = half-word */5353-static inline int decode_access_size(unsigned int insn)5353+static inline int decode_access_size(struct pt_regs *regs, unsigned int insn)5454{5555 unsigned int tmp;5656···6666 return 2;6767 else {6868 printk("Impossible unaligned trap. insn=%08x\n", insn);6969- die_if_kernel("Byte sized unaligned access?!?!", current_thread_info()->kregs);6969+ die_if_kernel("Byte sized unaligned access?!?!", regs);70707171 /* GCC should never warn that control reaches the end7272 * of this function without returning a value because···286286asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn)287287{288288 enum direction dir = decode_direction(insn);289289- int size = decode_access_size(insn);289289+ int size = decode_access_size(regs, insn);290290 int orig_asi, asi;291291292292 current_thread_info()->kern_una_regs = regs;
···2121#define _ASM_X86_AMD_IOMMU_TYPES_H22222323#include <linux/types.h>2424+#include <linux/mutex.h>2425#include <linux/list.h>2526#include <linux/spinlock.h>2627···141140142141/* constants to configure the command buffer */143142#define CMD_BUFFER_SIZE 8192143143+#define CMD_BUFFER_UNINITIALIZED 1144144#define CMD_BUFFER_ENTRIES 512145145#define MMIO_CMD_SIZE_SHIFT 56146146#define MMIO_CMD_SIZE_512 (0x9ULL << MMIO_CMD_SIZE_SHIFT)···239237 struct list_head list; /* for list of all protection domains */240238 struct list_head dev_list; /* List of all devices in this domain */241239 spinlock_t lock; /* mostly used to lock the page table*/240240+ struct mutex api_lock; /* protect page tables in the iommu-api path */242241 u16 id; /* the domain id written to the device table */243242 int mode; /* paging mode (0-6 levels) */244243 u64 *pt_root; /* page table root pointer */
+23-6
arch/x86/include/asm/lguest_hcall.h
···28282929#ifndef __ASSEMBLY__3030#include <asm/hw_irq.h>3131-#include <asm/kvm_para.h>32313332/*G:0303433 * But first, how does our Guest contact the Host to ask for privileged3534 * operations? There are two ways: the direct way is to make a "hypercall",3635 * to make requests of the Host Itself.3736 *3838- * We use the KVM hypercall mechanism, though completely different hypercall3939- * numbers. Seventeen hypercalls are available: the hypercall number is put in4040- * the %eax register, and the arguments (when required) are placed in %ebx,4141- * %ecx, %edx and %esi. If a return value makes sense, it's returned in %eax.3737+ * Our hypercall mechanism uses the highest unused trap code (traps 32 and3838+ * above are used by real hardware interrupts). Seventeen hypercalls are3939+ * available: the hypercall number is put in the %eax register, and the4040+ * arguments (when required) are placed in %ebx, %ecx, %edx and %esi.4141+ * If a return value makes sense, it's returned in %eax.4242 *4343 * Grossly invalid calls result in Sudden Death at the hands of the vengeful4444 * Host, rather than returning failure. This reflects Winston Churchill's4545 * definition of a gentleman: "someone who is only rude intentionally".4646-:*/4646+ */4747+static inline unsigned long4848+hcall(unsigned long call,4949+ unsigned long arg1, unsigned long arg2, unsigned long arg3,5050+ unsigned long arg4)5151+{5252+ /* "int" is the Intel instruction to trigger a trap. */5353+ asm volatile("int $" __stringify(LGUEST_TRAP_ENTRY)5454+ /* The call in %eax (aka "a") might be overwritten */5555+ : "=a"(call)5656+ /* The arguments are in %eax, %ebx, %ecx, %edx & %esi */5757+ : "a"(call), "b"(arg1), "c"(arg2), "d"(arg3), "S"(arg4)5858+ /* "memory" means this might write somewhere in memory.5959+ * This isn't true for all calls, but it's safe to tell6060+ * gcc that it might happen so it doesn't get clever. */6161+ : "memory");6262+ return call;6363+}47644865/* Can't use our min() macro here: needs to be a constant */4966#define LGUEST_IRQS (NR_IRQS < 32 ? NR_IRQS: 32)
+14-6
arch/x86/kernel/amd_iommu.c
···118118 return false;119119120120 /* No device or no PCI device */121121- if (!dev || dev->bus != &pci_bus_type)121121+ if (dev->bus != &pci_bus_type)122122 return false;123123124124 devid = get_device_id(dev);···392392 u32 tail, head;393393 u8 *target;394394395395+ WARN_ON(iommu->cmd_buf_size & CMD_BUFFER_UNINITIALIZED);395396 tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);396397 target = iommu->cmd_buf + tail;397398 memcpy_toio(target, cmd, sizeof(*cmd));···21872186 struct dma_ops_domain *dma_dom;21882187 u16 devid;2189218821902190- while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {21892189+ for_each_pci_dev(dev) {2191219021922191 /* Do we handle this device? */21932192 if (!check_device(&dev->dev))···22992298 list_for_each_entry_safe(dev_data, next, &domain->dev_list, list) {23002299 struct device *dev = dev_data->dev;2301230023022302- do_detach(dev);23012301+ __detach_device(dev);23032302 atomic_set(&dev_data->bind, 0);23042303 }23052304···23282327 return NULL;2329232823302329 spin_lock_init(&domain->lock);23302330+ mutex_init(&domain->api_lock);23312331 domain->id = domain_id_alloc();23322332 if (!domain->id)23332333 goto out_err;···2381237923822380 free_pagetable(domain);2383238123842384- domain_id_free(domain->id);23852385-23862386- kfree(domain);23822382+ protection_domain_free(domain);2387238323882384 dom->priv = NULL;23892385}···24562456 iova &= PAGE_MASK;24572457 paddr &= PAGE_MASK;2458245824592459+ mutex_lock(&domain->api_lock);24602460+24592461 for (i = 0; i < npages; ++i) {24602462 ret = iommu_map_page(domain, iova, paddr, prot, PM_MAP_4k);24612463 if (ret)···24662464 iova += PAGE_SIZE;24672465 paddr += PAGE_SIZE;24682466 }24672467+24682468+ mutex_unlock(&domain->api_lock);2469246924702470 return 0;24712471}···2481247724822478 iova &= PAGE_MASK;2483247924802480+ mutex_lock(&domain->api_lock);24812481+24842482 for (i = 0; i < npages; ++i) {24852483 iommu_unmap_page(domain, iova, PM_MAP_4k);24862484 iova += PAGE_SIZE;24872485 }2488248624892487 iommu_flush_tlb_pde(domain);24882488+24892489+ mutex_unlock(&domain->api_lock);24902490}2491249124922492static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom,
+33-15
arch/x86/kernel/amd_iommu_init.c
···138138bool amd_iommu_np_cache __read_mostly;139139140140/*141141- * Set to true if ACPI table parsing and hardware intialization went properly141141+ * The ACPI table parsing functions set this variable on an error142142 */143143-static bool amd_iommu_initialized;143143+static int __initdata amd_iommu_init_err;144144145145/*146146 * List of protection domains - used during resume···391391 */392392 for (i = 0; i < table->length; ++i)393393 checksum += p[i];394394- if (checksum != 0)394394+ if (checksum != 0) {395395 /* ACPI table corrupt */396396- return -ENODEV;396396+ amd_iommu_init_err = -ENODEV;397397+ return 0;398398+ }397399398400 p += IVRS_HEADER_LENGTH;399401···438436 if (cmd_buf == NULL)439437 return NULL;440438441441- iommu->cmd_buf_size = CMD_BUFFER_SIZE;439439+ iommu->cmd_buf_size = CMD_BUFFER_SIZE | CMD_BUFFER_UNINITIALIZED;442440443441 return cmd_buf;444442}···474472 &entry, sizeof(entry));475473476474 amd_iommu_reset_cmd_buffer(iommu);475475+ iommu->cmd_buf_size &= ~(CMD_BUFFER_UNINITIALIZED);477476}478477479478static void __init free_command_buffer(struct amd_iommu *iommu)480479{481480 free_pages((unsigned long)iommu->cmd_buf,482482- get_order(iommu->cmd_buf_size));481481+ get_order(iommu->cmd_buf_size & ~(CMD_BUFFER_UNINITIALIZED)));483482}484483485484/* allocates the memory where the IOMMU will log its events to */···923920 h->mmio_phys);924921925922 iommu = kzalloc(sizeof(struct amd_iommu), GFP_KERNEL);926926- if (iommu == NULL)927927- return -ENOMEM;923923+ if (iommu == NULL) {924924+ amd_iommu_init_err = -ENOMEM;925925+ return 0;926926+ }927927+928928 ret = init_iommu_one(iommu, h);929929- if (ret)930930- return ret;929929+ if (ret) {930930+ amd_iommu_init_err = ret;931931+ return 0;932932+ }931933 break;932934 default:933935 break;···941933942934 }943935 WARN_ON(p != end);944944-945945- amd_iommu_initialized = true;946936947937 return 0;948938}···12171211 if (acpi_table_parse("IVRS", find_last_devid_acpi) != 0)12181212 return -ENODEV;1219121312141214+ ret = amd_iommu_init_err;12151215+ if (ret)12161216+ goto out;12171217+12201218 dev_table_size = tbl_size(DEV_TABLE_ENTRY_SIZE);12211219 alias_table_size = tbl_size(ALIAS_TABLE_ENTRY_SIZE);12221220 rlookup_table_size = tbl_size(RLOOKUP_TABLE_ENTRY_SIZE);···12801270 if (acpi_table_parse("IVRS", init_iommu_all) != 0)12811271 goto free;1282127212831283- if (!amd_iommu_initialized)12731273+ if (amd_iommu_init_err) {12741274+ ret = amd_iommu_init_err;12841275 goto free;12761276+ }1285127712861278 if (acpi_table_parse("IVRS", init_memory_definitions) != 0)12871279 goto free;12801280+12811281+ if (amd_iommu_init_err) {12821282+ ret = amd_iommu_init_err;12831283+ goto free;12841284+ }1288128512891286 ret = sysdev_class_register(&amd_iommu_sysdev_class);12901287 if (ret)···13051288 if (ret)13061289 goto free;1307129012911291+ enable_iommus();12921292+13081293 if (iommu_pass_through)13091294 ret = amd_iommu_init_passthrough();13101295 else···13181299 amd_iommu_init_api();1319130013201301 amd_iommu_init_notifier();13211321-13221322- enable_iommus();1323130213241303 if (iommu_pass_through)13251304 goto out;···13321315 return ret;1333131613341317free:13181318+ disable_iommus();1335131913361320 amd_iommu_uninit_devices();13371321
+14-1
arch/x86/kernel/aperture_64.c
···393393 for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) {394394 int bus;395395 int dev_base, dev_limit;396396+ u32 ctl;396397397398 bus = bus_dev_ranges[i].bus;398399 dev_base = bus_dev_ranges[i].dev_base;···407406 gart_iommu_aperture = 1;408407 x86_init.iommu.iommu_init = gart_iommu_init;409408410410- aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7;409409+ ctl = read_pci_config(bus, slot, 3,410410+ AMD64_GARTAPERTURECTL);411411+412412+ /*413413+ * Before we do anything else disable the GART. It may414414+ * still be enabled if we boot into a crash-kernel here.415415+ * Reconfiguring the GART while it is enabled could have416416+ * unknown side-effects.417417+ */418418+ ctl &= ~GARTEN;419419+ write_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL, ctl);420420+421421+ aper_order = (ctl >> 1) & 7;411422 aper_size = (32 * 1024 * 1024) << aper_order;412423 aper_base = read_pci_config(bus, slot, 3, AMD64_GARTAPERTUREBASE) & 0x7fff;413424 aper_base <<= 25;
···1414#define get_bp(bp) asm("movq %%rbp, %0" : "=r" (bp) :)1515#endif16161717+#include <linux/uaccess.h>1818+1719extern void1820show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,1921 unsigned long *stack, unsigned long bp, char *log_lvl);···4442 get_bp(frame);45434644#ifdef CONFIG_FRAME_POINTER4747- while (n--)4848- frame = frame->next_frame;4545+ while (n--) {4646+ if (probe_kernel_address(&frame->next_frame, frame))4747+ break;4848+ }4949#endif50505151 return (unsigned long)frame;
+3
arch/x86/kernel/pci-gart_64.c
···565565566566 enable_gart_translation(dev, __pa(agp_gatt_table));567567 }568568+569569+ /* Flush the GART-TLB to remove stale entries */570570+ k8_flush_garts();568571}569572570573/*
+30-31
arch/x86/lguest/boot.c
···115115 local_irq_save(flags);116116 if (lguest_data.hcall_status[next_call] != 0xFF) {117117 /* Table full, so do normal hcall which will flush table. */118118- kvm_hypercall4(call, arg1, arg2, arg3, arg4);118118+ hcall(call, arg1, arg2, arg3, arg4);119119 } else {120120 lguest_data.hcalls[next_call].arg0 = call;121121 lguest_data.hcalls[next_call].arg1 = arg1;···145145 * So, when we're in lazy mode, we call async_hcall() to store the call for146146 * future processing:147147 */148148-static void lazy_hcall1(unsigned long call,149149- unsigned long arg1)148148+static void lazy_hcall1(unsigned long call, unsigned long arg1)150149{151150 if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE)152152- kvm_hypercall1(call, arg1);151151+ hcall(call, arg1, 0, 0, 0);153152 else154153 async_hcall(call, arg1, 0, 0, 0);155154}156155157156/* You can imagine what lazy_hcall2, 3 and 4 look like. :*/158157static void lazy_hcall2(unsigned long call,159159- unsigned long arg1,160160- unsigned long arg2)158158+ unsigned long arg1,159159+ unsigned long arg2)161160{162161 if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE)163163- kvm_hypercall2(call, arg1, arg2);162162+ hcall(call, arg1, arg2, 0, 0);164163 else165164 async_hcall(call, arg1, arg2, 0, 0);166165}167166168167static void lazy_hcall3(unsigned long call,169169- unsigned long arg1,170170- unsigned long arg2,171171- unsigned long arg3)168168+ unsigned long arg1,169169+ unsigned long arg2,170170+ unsigned long arg3)172171{173172 if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE)174174- kvm_hypercall3(call, arg1, arg2, arg3);173173+ hcall(call, arg1, arg2, arg3, 0);175174 else176175 async_hcall(call, arg1, arg2, arg3, 0);177176}178177179178#ifdef CONFIG_X86_PAE180179static void lazy_hcall4(unsigned long call,181181- unsigned long arg1,182182- unsigned long arg2,183183- unsigned long arg3,184184- unsigned long arg4)180180+ unsigned long arg1,181181+ unsigned long arg2,182182+ unsigned long arg3,183183+ unsigned long arg4)185184{186185 if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_NONE)187187- kvm_hypercall4(call, arg1, arg2, arg3, arg4);186186+ hcall(call, arg1, arg2, arg3, arg4);188187 else189188 async_hcall(call, arg1, arg2, arg3, arg4);190189}···195196:*/196197static void lguest_leave_lazy_mmu_mode(void)197198{198198- kvm_hypercall0(LHCALL_FLUSH_ASYNC);199199+ hcall(LHCALL_FLUSH_ASYNC, 0, 0, 0, 0);199200 paravirt_leave_lazy_mmu();200201}201202202203static void lguest_end_context_switch(struct task_struct *next)203204{204204- kvm_hypercall0(LHCALL_FLUSH_ASYNC);205205+ hcall(LHCALL_FLUSH_ASYNC, 0, 0, 0, 0);205206 paravirt_end_context_switch(next);206207}207208···285286 /* Keep the local copy up to date. */286287 native_write_idt_entry(dt, entrynum, g);287288 /* Tell Host about this new entry. */288288- kvm_hypercall3(LHCALL_LOAD_IDT_ENTRY, entrynum, desc[0], desc[1]);289289+ hcall(LHCALL_LOAD_IDT_ENTRY, entrynum, desc[0], desc[1], 0);289290}290291291292/*···299300 struct desc_struct *idt = (void *)desc->address;300301301302 for (i = 0; i < (desc->size+1)/8; i++)302302- kvm_hypercall3(LHCALL_LOAD_IDT_ENTRY, i, idt[i].a, idt[i].b);303303+ hcall(LHCALL_LOAD_IDT_ENTRY, i, idt[i].a, idt[i].b, 0);303304}304305305306/*···320321 struct desc_struct *gdt = (void *)desc->address;321322322323 for (i = 0; i < (desc->size+1)/8; i++)323323- kvm_hypercall3(LHCALL_LOAD_GDT_ENTRY, i, gdt[i].a, gdt[i].b);324324+ hcall(LHCALL_LOAD_GDT_ENTRY, i, gdt[i].a, gdt[i].b, 0);324325}325326326327/*···333334{334335 native_write_gdt_entry(dt, entrynum, desc, type);335336 /* Tell Host about this new entry. */336336- kvm_hypercall3(LHCALL_LOAD_GDT_ENTRY, entrynum,337337- dt[entrynum].a, dt[entrynum].b);337337+ hcall(LHCALL_LOAD_GDT_ENTRY, entrynum,338338+ dt[entrynum].a, dt[entrynum].b, 0);338339}339340340341/*···930931 }931932932933 /* Please wake us this far in the future. */933933- kvm_hypercall1(LHCALL_SET_CLOCKEVENT, delta);934934+ hcall(LHCALL_SET_CLOCKEVENT, delta, 0, 0, 0);934935 return 0;935936}936937···941942 case CLOCK_EVT_MODE_UNUSED:942943 case CLOCK_EVT_MODE_SHUTDOWN:943944 /* A 0 argument shuts the clock down. */944944- kvm_hypercall0(LHCALL_SET_CLOCKEVENT);945945+ hcall(LHCALL_SET_CLOCKEVENT, 0, 0, 0, 0);945946 break;946947 case CLOCK_EVT_MODE_ONESHOT:947948 /* This is what we expect. */···10991100/* STOP! Until an interrupt comes in. */11001101static void lguest_safe_halt(void)11011102{11021102- kvm_hypercall0(LHCALL_HALT);11031103+ hcall(LHCALL_HALT, 0, 0, 0, 0);11031104}1104110511051106/*···11111112 */11121113static void lguest_power_off(void)11131114{11141114- kvm_hypercall2(LHCALL_SHUTDOWN, __pa("Power down"),11151115- LGUEST_SHUTDOWN_POWEROFF);11151115+ hcall(LHCALL_SHUTDOWN, __pa("Power down"),11161116+ LGUEST_SHUTDOWN_POWEROFF, 0, 0);11161117}1117111811181119/*···11221123 */11231124static int lguest_panic(struct notifier_block *nb, unsigned long l, void *p)11241125{11251125- kvm_hypercall2(LHCALL_SHUTDOWN, __pa(p), LGUEST_SHUTDOWN_POWEROFF);11261126+ hcall(LHCALL_SHUTDOWN, __pa(p), LGUEST_SHUTDOWN_POWEROFF, 0, 0);11261127 /* The hcall won't return, but to keep gcc happy, we're "done". */11271128 return NOTIFY_DONE;11281129}···11611162 len = sizeof(scratch) - 1;11621163 scratch[len] = '\0';11631164 memcpy(scratch, buf, len);11641164- kvm_hypercall1(LHCALL_NOTIFY, __pa(scratch));11651165+ hcall(LHCALL_NOTIFY, __pa(scratch), 0, 0, 0);1165116611661167 /* This routine returns the number of bytes actually written. */11671168 return len;···11731174 */11741175static void lguest_restart(char *reason)11751176{11761176- kvm_hypercall2(LHCALL_SHUTDOWN, __pa(reason), LGUEST_SHUTDOWN_RESTART);11771177+ hcall(LHCALL_SHUTDOWN, __pa(reason), LGUEST_SHUTDOWN_RESTART, 0, 0);11771178}1178117911791180/*G:050
+1-1
arch/x86/lguest/i386_head.S
···3232 */3333 movl $LHCALL_LGUEST_INIT, %eax3434 movl $lguest_data - __PAGE_OFFSET, %ebx3535- .byte 0x0f,0x01,0xc1 /* KVM_HYPERCALL */3535+ int $LGUEST_TRAP_ENTRY36363737 /* Set up the initial stack so we can run C code. */3838 movl $(init_thread_union+THREAD_SIZE),%esp
+11-6
drivers/acpi/acpica/exprep.c
···471471 /* allow full data read from EC address space */472472 if (obj_desc->field.region_obj->region.space_id ==473473 ACPI_ADR_SPACE_EC) {474474- if (obj_desc->common_field.bit_length > 8)475475- obj_desc->common_field.access_bit_width =476476- ACPI_ROUND_UP(obj_desc->common_field.477477- bit_length, 8);474474+ if (obj_desc->common_field.bit_length > 8) {475475+ unsigned width =476476+ ACPI_ROUND_BITS_UP_TO_BYTES(477477+ obj_desc->common_field.bit_length);478478+ // access_bit_width is u8, don't overflow it479479+ if (width > 8)480480+ width = 8;478481 obj_desc->common_field.access_byte_width =479479- ACPI_DIV_8(obj_desc->common_field.480480- access_bit_width);482482+ width;483483+ obj_desc->common_field.access_bit_width =484484+ 8 * width;485485+ }481486 }482487483488 ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
···260260261261 if (mode_config->num_connector) {262262 list_for_each_entry(connector, &mode_config->connector_list, head) {263263- struct intel_output *intel_output = to_intel_output(connector);263263+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);264264265265- if (intel_output->hot_plug)266266- (*intel_output->hot_plug) (intel_output);265265+ if (intel_encoder->hot_plug)266266+ (*intel_encoder->hot_plug) (intel_encoder);267267 }268268 }269269 /* Just fire off a uevent and let userspace tell us what to do */···444444 if (src == NULL)445445 return NULL;446446447447- src_priv = src->driver_private;447447+ src_priv = to_intel_bo(src);448448 if (src_priv->pages == NULL)449449 return NULL;450450
+34-34
drivers/gpu/drm/i915/intel_crt.c
···247247248248static bool intel_crt_detect_ddc(struct drm_connector *connector)249249{250250- struct intel_output *intel_output = to_intel_output(connector);250250+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);251251252252 /* CRT should always be at 0, but check anyway */253253- if (intel_output->type != INTEL_OUTPUT_ANALOG)253253+ if (intel_encoder->type != INTEL_OUTPUT_ANALOG)254254 return false;255255256256- return intel_ddc_probe(intel_output);256256+ return intel_ddc_probe(intel_encoder);257257}258258259259static enum drm_connector_status260260-intel_crt_load_detect(struct drm_crtc *crtc, struct intel_output *intel_output)260260+intel_crt_load_detect(struct drm_crtc *crtc, struct intel_encoder *intel_encoder)261261{262262- struct drm_encoder *encoder = &intel_output->enc;262262+ struct drm_encoder *encoder = &intel_encoder->enc;263263 struct drm_device *dev = encoder->dev;264264 struct drm_i915_private *dev_priv = dev->dev_private;265265 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);···387387static enum drm_connector_status intel_crt_detect(struct drm_connector *connector)388388{389389 struct drm_device *dev = connector->dev;390390- struct intel_output *intel_output = to_intel_output(connector);391391- struct drm_encoder *encoder = &intel_output->enc;390390+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);391391+ struct drm_encoder *encoder = &intel_encoder->enc;392392 struct drm_crtc *crtc;393393 int dpms_mode;394394 enum drm_connector_status status;···405405406406 /* for pre-945g platforms use load detect */407407 if (encoder->crtc && encoder->crtc->enabled) {408408- status = intel_crt_load_detect(encoder->crtc, intel_output);408408+ status = intel_crt_load_detect(encoder->crtc, intel_encoder);409409 } else {410410- crtc = intel_get_load_detect_pipe(intel_output,410410+ crtc = intel_get_load_detect_pipe(intel_encoder,411411 NULL, &dpms_mode);412412 if (crtc) {413413- status = intel_crt_load_detect(crtc, intel_output);414414- intel_release_load_detect_pipe(intel_output, dpms_mode);413413+ status = intel_crt_load_detect(crtc, intel_encoder);414414+ intel_release_load_detect_pipe(intel_encoder, dpms_mode);415415 } else416416 status = connector_status_unknown;417417 }···421421422422static void intel_crt_destroy(struct drm_connector *connector)423423{424424- struct intel_output *intel_output = to_intel_output(connector);424424+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);425425426426- intel_i2c_destroy(intel_output->ddc_bus);426426+ intel_i2c_destroy(intel_encoder->ddc_bus);427427 drm_sysfs_connector_remove(connector);428428 drm_connector_cleanup(connector);429429 kfree(connector);···432432static int intel_crt_get_modes(struct drm_connector *connector)433433{434434 int ret;435435- struct intel_output *intel_output = to_intel_output(connector);435435+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);436436 struct i2c_adapter *ddcbus;437437 struct drm_device *dev = connector->dev;438438439439440440- ret = intel_ddc_get_modes(intel_output);440440+ ret = intel_ddc_get_modes(intel_encoder);441441 if (ret || !IS_G4X(dev))442442 goto end;443443444444- ddcbus = intel_output->ddc_bus;444444+ ddcbus = intel_encoder->ddc_bus;445445 /* Try to probe digital port for output in DVI-I -> VGA mode. */446446- intel_output->ddc_bus =446446+ intel_encoder->ddc_bus =447447 intel_i2c_create(connector->dev, GPIOD, "CRTDDC_D");448448449449- if (!intel_output->ddc_bus) {450450- intel_output->ddc_bus = ddcbus;449449+ if (!intel_encoder->ddc_bus) {450450+ intel_encoder->ddc_bus = ddcbus;451451 dev_printk(KERN_ERR, &connector->dev->pdev->dev,452452 "DDC bus registration failed for CRTDDC_D.\n");453453 goto end;454454 }455455 /* Try to get modes by GPIOD port */456456- ret = intel_ddc_get_modes(intel_output);456456+ ret = intel_ddc_get_modes(intel_encoder);457457 intel_i2c_destroy(ddcbus);458458459459end:···506506void intel_crt_init(struct drm_device *dev)507507{508508 struct drm_connector *connector;509509- struct intel_output *intel_output;509509+ struct intel_encoder *intel_encoder;510510 struct drm_i915_private *dev_priv = dev->dev_private;511511 u32 i2c_reg;512512513513- intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL);514514- if (!intel_output)513513+ intel_encoder = kzalloc(sizeof(struct intel_encoder), GFP_KERNEL);514514+ if (!intel_encoder)515515 return;516516517517- connector = &intel_output->base;518518- drm_connector_init(dev, &intel_output->base,517517+ connector = &intel_encoder->base;518518+ drm_connector_init(dev, &intel_encoder->base,519519 &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);520520521521- drm_encoder_init(dev, &intel_output->enc, &intel_crt_enc_funcs,521521+ drm_encoder_init(dev, &intel_encoder->enc, &intel_crt_enc_funcs,522522 DRM_MODE_ENCODER_DAC);523523524524- drm_mode_connector_attach_encoder(&intel_output->base,525525- &intel_output->enc);524524+ drm_mode_connector_attach_encoder(&intel_encoder->base,525525+ &intel_encoder->enc);526526527527 /* Set up the DDC bus. */528528 if (HAS_PCH_SPLIT(dev))···533533 if (dev_priv->crt_ddc_bus != 0)534534 i2c_reg = dev_priv->crt_ddc_bus;535535 }536536- intel_output->ddc_bus = intel_i2c_create(dev, i2c_reg, "CRTDDC_A");537537- if (!intel_output->ddc_bus) {536536+ intel_encoder->ddc_bus = intel_i2c_create(dev, i2c_reg, "CRTDDC_A");537537+ if (!intel_encoder->ddc_bus) {538538 dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "539539 "failed.\n");540540 return;541541 }542542543543- intel_output->type = INTEL_OUTPUT_ANALOG;544544- intel_output->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |543543+ intel_encoder->type = INTEL_OUTPUT_ANALOG;544544+ intel_encoder->clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |545545 (1 << INTEL_ANALOG_CLONE_BIT) |546546 (1 << INTEL_SDVO_LVDS_CLONE_BIT);547547- intel_output->crtc_mask = (1 << 0) | (1 << 1);547547+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1);548548 connector->interlace_allowed = 0;549549 connector->doublescan_allowed = 0;550550551551- drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs);551551+ drm_encoder_helper_add(&intel_encoder->enc, &intel_crt_helper_funcs);552552 drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);553553554554 drm_sysfs_connector_add(connector);
+48-48
drivers/gpu/drm/i915/intel_display.c
···747747 list_for_each_entry(l_entry, &mode_config->connector_list, head) {748748 if (l_entry->encoder &&749749 l_entry->encoder->crtc == crtc) {750750- struct intel_output *intel_output = to_intel_output(l_entry);751751- if (intel_output->type == type)750750+ struct intel_encoder *intel_encoder = to_intel_encoder(l_entry);751751+ if (intel_encoder->type == type)752752 return true;753753 }754754 }755755 return false;756756}757757758758-struct drm_connector *759759-intel_pipe_get_output (struct drm_crtc *crtc)758758+static struct drm_connector *759759+intel_pipe_get_connector (struct drm_crtc *crtc)760760{761761 struct drm_device *dev = crtc->dev;762762 struct drm_mode_config *mode_config = &dev->mode_config;···10031003 struct drm_i915_private *dev_priv = dev->dev_private;10041004 struct drm_framebuffer *fb = crtc->fb;10051005 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);10061006- struct drm_i915_gem_object *obj_priv = intel_fb->obj->driver_private;10061006+ struct drm_i915_gem_object *obj_priv = to_intel_bo(intel_fb->obj);10071007 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);10081008 int plane, i;10091009 u32 fbc_ctl, fbc_ctl2;···10801080 struct drm_i915_private *dev_priv = dev->dev_private;10811081 struct drm_framebuffer *fb = crtc->fb;10821082 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);10831083- struct drm_i915_gem_object *obj_priv = intel_fb->obj->driver_private;10831083+ struct drm_i915_gem_object *obj_priv = to_intel_bo(intel_fb->obj);10841084 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);10851085 int plane = (intel_crtc->plane == 0 ? DPFC_CTL_PLANEA :10861086 DPFC_CTL_PLANEB);···11761176 return;1177117711781178 intel_fb = to_intel_framebuffer(fb);11791179- obj_priv = intel_fb->obj->driver_private;11791179+ obj_priv = to_intel_bo(intel_fb->obj);1180118011811181 /*11821182 * If FBC is already on, we just have to verify that we can···12431243static int12441244intel_pin_and_fence_fb_obj(struct drm_device *dev, struct drm_gem_object *obj)12451245{12461246- struct drm_i915_gem_object *obj_priv = obj->driver_private;12461246+ struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);12471247 u32 alignment;12481248 int ret;12491249···1323132313241324 intel_fb = to_intel_framebuffer(crtc->fb);13251325 obj = intel_fb->obj;13261326- obj_priv = obj->driver_private;13261326+ obj_priv = to_intel_bo(obj);1327132713281328 mutex_lock(&dev->struct_mutex);13291329 ret = intel_pin_and_fence_fb_obj(dev, obj);···1401140114021402 if (old_fb) {14031403 intel_fb = to_intel_framebuffer(old_fb);14041404- obj_priv = intel_fb->obj->driver_private;14041404+ obj_priv = to_intel_bo(intel_fb->obj);14051405 i915_gem_object_unpin(intel_fb->obj);14061406 }14071407 intel_increase_pllclock(crtc, true);···29172917 int dspsize_reg = (plane == 0) ? DSPASIZE : DSPBSIZE;29182918 int dsppos_reg = (plane == 0) ? DSPAPOS : DSPBPOS;29192919 int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC;29202920- int refclk, num_outputs = 0;29202920+ int refclk, num_connectors = 0;29212921 intel_clock_t clock, reduced_clock;29222922 u32 dpll = 0, fp = 0, fp2 = 0, dspcntr, pipeconf;29232923 bool ok, has_reduced_clock = false, is_sdvo = false, is_dvo = false;···29432943 drm_vblank_pre_modeset(dev, pipe);2944294429452945 list_for_each_entry(connector, &mode_config->connector_list, head) {29462946- struct intel_output *intel_output = to_intel_output(connector);29462946+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);2947294729482948 if (!connector->encoder || connector->encoder->crtc != crtc)29492949 continue;2950295029512951- switch (intel_output->type) {29512951+ switch (intel_encoder->type) {29522952 case INTEL_OUTPUT_LVDS:29532953 is_lvds = true;29542954 break;29552955 case INTEL_OUTPUT_SDVO:29562956 case INTEL_OUTPUT_HDMI:29572957 is_sdvo = true;29582958- if (intel_output->needs_tv_clock)29582958+ if (intel_encoder->needs_tv_clock)29592959 is_tv = true;29602960 break;29612961 case INTEL_OUTPUT_DVO:···29752975 break;29762976 }2977297729782978- num_outputs++;29782978+ num_connectors++;29792979 }2980298029812981- if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2) {29812981+ if (is_lvds && dev_priv->lvds_use_ssc && num_connectors < 2) {29822982 refclk = dev_priv->lvds_ssc_freq * 1000;29832983 DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",29842984 refclk / 1000);···30493049 if (is_edp) {30503050 struct drm_connector *edp;30513051 target_clock = mode->clock;30523052- edp = intel_pipe_get_output(crtc);30533053- intel_edp_link_config(to_intel_output(edp),30523052+ edp = intel_pipe_get_connector(crtc);30533053+ intel_edp_link_config(to_intel_encoder(edp),30543054 &lane, &link_bw);30553055 } else {30563056 /* DP over FDI requires target mode clock···32313231 /* XXX: just matching BIOS for now */32323232 /* dpll |= PLL_REF_INPUT_TVCLKINBC; */32333233 dpll |= 3;32343234- else if (is_lvds && dev_priv->lvds_use_ssc && num_outputs < 2)32343234+ else if (is_lvds && dev_priv->lvds_use_ssc && num_connectors < 2)32353235 dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;32363236 else32373237 dpll |= PLL_REF_INPUT_DREFCLK;···35113511 if (!bo)35123512 return -ENOENT;3513351335143514- obj_priv = bo->driver_private;35143514+ obj_priv = to_intel_bo(bo);3515351535163516 if (bo->size < width * height * 4) {35173517 DRM_ERROR("buffer is to small\n");···36553655 * detection.36563656 *36573657 * It will be up to the load-detect code to adjust the pipe as appropriate for36583658- * its requirements. The pipe will be connected to no other outputs.36583658+ * its requirements. The pipe will be connected to no other encoders.36593659 *36603660- * Currently this code will only succeed if there is a pipe with no outputs36603660+ * Currently this code will only succeed if there is a pipe with no encoders36613661 * configured for it. In the future, it could choose to temporarily disable36623662 * some outputs to free up a pipe for its use.36633663 *···36703670 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),36713671};3672367236733673-struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output,36733673+struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,36743674 struct drm_display_mode *mode,36753675 int *dpms_mode)36763676{36773677 struct intel_crtc *intel_crtc;36783678 struct drm_crtc *possible_crtc;36793679 struct drm_crtc *supported_crtc =NULL;36803680- struct drm_encoder *encoder = &intel_output->enc;36803680+ struct drm_encoder *encoder = &intel_encoder->enc;36813681 struct drm_crtc *crtc = NULL;36823682 struct drm_device *dev = encoder->dev;36833683 struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;···37293729 }3730373037313731 encoder->crtc = crtc;37323732- intel_output->base.encoder = encoder;37333733- intel_output->load_detect_temp = true;37323732+ intel_encoder->base.encoder = encoder;37333733+ intel_encoder->load_detect_temp = true;3734373437353735 intel_crtc = to_intel_crtc(crtc);37363736 *dpms_mode = intel_crtc->dpms_mode;···37553755 return crtc;37563756}3757375737583758-void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_mode)37583758+void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, int dpms_mode)37593759{37603760- struct drm_encoder *encoder = &intel_output->enc;37603760+ struct drm_encoder *encoder = &intel_encoder->enc;37613761 struct drm_device *dev = encoder->dev;37623762 struct drm_crtc *crtc = encoder->crtc;37633763 struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;37643764 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;3765376537663766- if (intel_output->load_detect_temp) {37663766+ if (intel_encoder->load_detect_temp) {37673767 encoder->crtc = NULL;37683768- intel_output->base.encoder = NULL;37693769- intel_output->load_detect_temp = false;37683768+ intel_encoder->base.encoder = NULL;37693769+ intel_encoder->load_detect_temp = false;37703770 crtc->enabled = drm_helper_crtc_in_use(crtc);37713771 drm_helper_disable_unused_functions(dev);37723772 }3773377337743774- /* Switch crtc and output back off if necessary */37743774+ /* Switch crtc and encoder back off if necessary */37753775 if (crtc->enabled && dpms_mode != DRM_MODE_DPMS_ON) {37763776 if (encoder->crtc == crtc)37773777 encoder_funcs->dpms(encoder, dpms_mode);···41564156 work = intel_crtc->unpin_work;41574157 if (work == NULL || !work->pending) {41584158 if (work && !work->pending) {41594159- obj_priv = work->pending_flip_obj->driver_private;41594159+ obj_priv = to_intel_bo(work->pending_flip_obj);41604160 DRM_DEBUG_DRIVER("flip finish: %p (%d) not pending?\n",41614161 obj_priv,41624162 atomic_read(&obj_priv->pending_flip));···4181418141824182 spin_unlock_irqrestore(&dev->event_lock, flags);4183418341844184- obj_priv = work->pending_flip_obj->driver_private;41844184+ obj_priv = to_intel_bo(work->pending_flip_obj);4185418541864186 /* Initial scanout buffer will have a 0 pending flip count */41874187 if ((atomic_read(&obj_priv->pending_flip) == 0) ||···42524252 ret = intel_pin_and_fence_fb_obj(dev, obj);42534253 if (ret != 0) {42544254 DRM_DEBUG_DRIVER("flip queue: %p pin & fence failed\n",42554255- obj->driver_private);42554255+ to_intel_bo(obj));42564256 kfree(work);42574257 intel_crtc->unpin_work = NULL;42584258 mutex_unlock(&dev->struct_mutex);···42664266 crtc->fb = fb;42674267 i915_gem_object_flush_write_domain(obj);42684268 drm_vblank_get(dev, intel_crtc->pipe);42694269- obj_priv = obj->driver_private;42694269+ obj_priv = to_intel_bo(obj);42704270 atomic_inc(&obj_priv->pending_flip);42714271 work->pending_flip_obj = obj;42724272···43994399 int entry = 0;4400440044014401 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {44024402- struct intel_output *intel_output = to_intel_output(connector);44034403- if (type_mask & intel_output->clone_mask)44024402+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);44034403+ if (type_mask & intel_encoder->clone_mask)44044404 index_mask |= (1 << entry);44054405 entry++;44064406 }···44954495 intel_tv_init(dev);4496449644974497 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {44984498- struct intel_output *intel_output = to_intel_output(connector);44994499- struct drm_encoder *encoder = &intel_output->enc;44984498+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);44994499+ struct drm_encoder *encoder = &intel_encoder->enc;4500450045014501- encoder->possible_crtcs = intel_output->crtc_mask;45014501+ encoder->possible_crtcs = intel_encoder->crtc_mask;45024502 encoder->possible_clones = intel_connector_clones(dev,45034503- intel_output->clone_mask);45034503+ intel_encoder->clone_mask);45044504 }45054505}45064506···47794779 struct drm_i915_gem_object *obj_priv = NULL;4780478047814781 if (dev_priv->pwrctx) {47824782- obj_priv = dev_priv->pwrctx->driver_private;47824782+ obj_priv = to_intel_bo(dev_priv->pwrctx);47834783 } else {47844784 struct drm_gem_object *pwrctx;4785478547864786 pwrctx = intel_alloc_power_context(dev);47874787 if (pwrctx) {47884788 dev_priv->pwrctx = pwrctx;47894789- obj_priv = pwrctx->driver_private;47894789+ obj_priv = to_intel_bo(pwrctx);47904790 }47914791 }47924792···48154815 dev_priv->display.fbc_enabled = g4x_fbc_enabled;48164816 dev_priv->display.enable_fbc = g4x_enable_fbc;48174817 dev_priv->display.disable_fbc = g4x_disable_fbc;48184818- } else if (IS_I965GM(dev) || IS_I945GM(dev) || IS_I915GM(dev)) {48184818+ } else if (IS_I965GM(dev)) {48194819 dev_priv->display.fbc_enabled = i8xx_fbc_enabled;48204820 dev_priv->display.enable_fbc = i8xx_enable_fbc;48214821 dev_priv->display.disable_fbc = i8xx_disable_fbc;···49574957 if (dev_priv->pwrctx) {49584958 struct drm_i915_gem_object *obj_priv;4959495949604960- obj_priv = dev_priv->pwrctx->driver_private;49604960+ obj_priv = to_intel_bo(dev_priv->pwrctx);49614961 I915_WRITE(PWRCTXA, obj_priv->gtt_offset &~ PWRCTX_EN);49624962 I915_READ(PWRCTXA);49634963 i915_gem_object_unpin(dev_priv->pwrctx);···49784978*/49794979struct drm_encoder *intel_best_encoder(struct drm_connector *connector)49804980{49814981- struct intel_output *intel_output = to_intel_output(connector);49814981+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);4982498249834983- return &intel_output->enc;49834983+ return &intel_encoder->enc;49844984}4985498549864986/*
+128-128
drivers/gpu/drm/i915/intel_dp.c
···5555 uint8_t link_bw;5656 uint8_t lane_count;5757 uint8_t dpcd[4];5858- struct intel_output *intel_output;5858+ struct intel_encoder *intel_encoder;5959 struct i2c_adapter adapter;6060 struct i2c_algo_dp_aux_data algo;6161};62626363static void6464-intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,6464+intel_dp_link_train(struct intel_encoder *intel_encoder, uint32_t DP,6565 uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE]);66666767static void6868-intel_dp_link_down(struct intel_output *intel_output, uint32_t DP);6868+intel_dp_link_down(struct intel_encoder *intel_encoder, uint32_t DP);69697070void7171-intel_edp_link_config (struct intel_output *intel_output,7171+intel_edp_link_config (struct intel_encoder *intel_encoder,7272 int *lane_num, int *link_bw)7373{7474- struct intel_dp_priv *dp_priv = intel_output->dev_priv;7474+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;75757676 *lane_num = dp_priv->lane_count;7777 if (dp_priv->link_bw == DP_LINK_BW_1_62)···8181}82828383static int8484-intel_dp_max_lane_count(struct intel_output *intel_output)8484+intel_dp_max_lane_count(struct intel_encoder *intel_encoder)8585{8686- struct intel_dp_priv *dp_priv = intel_output->dev_priv;8686+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;8787 int max_lane_count = 4;88888989 if (dp_priv->dpcd[0] >= 0x11) {···9999}100100101101static int102102-intel_dp_max_link_bw(struct intel_output *intel_output)102102+intel_dp_max_link_bw(struct intel_encoder *intel_encoder)103103{104104- struct intel_dp_priv *dp_priv = intel_output->dev_priv;104104+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;105105 int max_link_bw = dp_priv->dpcd[1];106106107107 switch (max_link_bw) {···127127/* I think this is a fiction */128128static int129129intel_dp_link_required(struct drm_device *dev,130130- struct intel_output *intel_output, int pixel_clock)130130+ struct intel_encoder *intel_encoder, int pixel_clock)131131{132132 struct drm_i915_private *dev_priv = dev->dev_private;133133134134- if (IS_eDP(intel_output))134134+ if (IS_eDP(intel_encoder))135135 return (pixel_clock * dev_priv->edp_bpp) / 8;136136 else137137 return pixel_clock * 3;···141141intel_dp_mode_valid(struct drm_connector *connector,142142 struct drm_display_mode *mode)143143{144144- struct intel_output *intel_output = to_intel_output(connector);145145- int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_output));146146- int max_lanes = intel_dp_max_lane_count(intel_output);144144+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);145145+ int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_encoder));146146+ int max_lanes = intel_dp_max_lane_count(intel_encoder);147147148148- if (intel_dp_link_required(connector->dev, intel_output, mode->clock)148148+ if (intel_dp_link_required(connector->dev, intel_encoder, mode->clock)149149 > max_link_clock * max_lanes)150150 return MODE_CLOCK_HIGH;151151···209209}210210211211static int212212-intel_dp_aux_ch(struct intel_output *intel_output,212212+intel_dp_aux_ch(struct intel_encoder *intel_encoder,213213 uint8_t *send, int send_bytes,214214 uint8_t *recv, int recv_size)215215{216216- struct intel_dp_priv *dp_priv = intel_output->dev_priv;216216+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;217217 uint32_t output_reg = dp_priv->output_reg;218218- struct drm_device *dev = intel_output->base.dev;218218+ struct drm_device *dev = intel_encoder->base.dev;219219 struct drm_i915_private *dev_priv = dev->dev_private;220220 uint32_t ch_ctl = output_reg + 0x10;221221 uint32_t ch_data = ch_ctl + 4;···230230 * and would like to run at 2MHz. So, take the231231 * hrawclk value and divide by 2 and use that232232 */233233- if (IS_eDP(intel_output))233233+ if (IS_eDP(intel_encoder))234234 aux_clock_divider = 225; /* eDP input clock at 450Mhz */235235 else if (HAS_PCH_SPLIT(dev))236236 aux_clock_divider = 62; /* IRL input clock fixed at 125Mhz */···313313314314/* Write data to the aux channel in native mode */315315static int316316-intel_dp_aux_native_write(struct intel_output *intel_output,316316+intel_dp_aux_native_write(struct intel_encoder *intel_encoder,317317 uint16_t address, uint8_t *send, int send_bytes)318318{319319 int ret;···330330 memcpy(&msg[4], send, send_bytes);331331 msg_bytes = send_bytes + 4;332332 for (;;) {333333- ret = intel_dp_aux_ch(intel_output, msg, msg_bytes, &ack, 1);333333+ ret = intel_dp_aux_ch(intel_encoder, msg, msg_bytes, &ack, 1);334334 if (ret < 0)335335 return ret;336336 if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)···345345346346/* Write a single byte to the aux channel in native mode */347347static int348348-intel_dp_aux_native_write_1(struct intel_output *intel_output,348348+intel_dp_aux_native_write_1(struct intel_encoder *intel_encoder,349349 uint16_t address, uint8_t byte)350350{351351- return intel_dp_aux_native_write(intel_output, address, &byte, 1);351351+ return intel_dp_aux_native_write(intel_encoder, address, &byte, 1);352352}353353354354/* read bytes from a native aux channel */355355static int356356-intel_dp_aux_native_read(struct intel_output *intel_output,356356+intel_dp_aux_native_read(struct intel_encoder *intel_encoder,357357 uint16_t address, uint8_t *recv, int recv_bytes)358358{359359 uint8_t msg[4];···372372 reply_bytes = recv_bytes + 1;373373374374 for (;;) {375375- ret = intel_dp_aux_ch(intel_output, msg, msg_bytes,375375+ ret = intel_dp_aux_ch(intel_encoder, msg, msg_bytes,376376 reply, reply_bytes);377377 if (ret == 0)378378 return -EPROTO;···398398 struct intel_dp_priv *dp_priv = container_of(adapter,399399 struct intel_dp_priv,400400 adapter);401401- struct intel_output *intel_output = dp_priv->intel_output;401401+ struct intel_encoder *intel_encoder = dp_priv->intel_encoder;402402 uint16_t address = algo_data->address;403403 uint8_t msg[5];404404 uint8_t reply[2];···437437 }438438439439 for (;;) {440440- ret = intel_dp_aux_ch(intel_output,440440+ ret = intel_dp_aux_ch(intel_encoder,441441 msg, msg_bytes,442442 reply, reply_bytes);443443 if (ret < 0) {···465465}466466467467static int468468-intel_dp_i2c_init(struct intel_output *intel_output, const char *name)468468+intel_dp_i2c_init(struct intel_encoder *intel_encoder, const char *name)469469{470470- struct intel_dp_priv *dp_priv = intel_output->dev_priv;470470+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;471471472472 DRM_DEBUG_KMS("i2c_init %s\n", name);473473 dp_priv->algo.running = false;···480480 strncpy (dp_priv->adapter.name, name, sizeof(dp_priv->adapter.name) - 1);481481 dp_priv->adapter.name[sizeof(dp_priv->adapter.name) - 1] = '\0';482482 dp_priv->adapter.algo_data = &dp_priv->algo;483483- dp_priv->adapter.dev.parent = &intel_output->base.kdev;483483+ dp_priv->adapter.dev.parent = &intel_encoder->base.kdev;484484485485 return i2c_dp_aux_add_bus(&dp_priv->adapter);486486}···489489intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,490490 struct drm_display_mode *adjusted_mode)491491{492492- struct intel_output *intel_output = enc_to_intel_output(encoder);493493- struct intel_dp_priv *dp_priv = intel_output->dev_priv;492492+ struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);493493+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;494494 int lane_count, clock;495495- int max_lane_count = intel_dp_max_lane_count(intel_output);496496- int max_clock = intel_dp_max_link_bw(intel_output) == DP_LINK_BW_2_7 ? 1 : 0;495495+ int max_lane_count = intel_dp_max_lane_count(intel_encoder);496496+ int max_clock = intel_dp_max_link_bw(intel_encoder) == DP_LINK_BW_2_7 ? 1 : 0;497497 static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };498498499499 for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {500500 for (clock = 0; clock <= max_clock; clock++) {501501 int link_avail = intel_dp_link_clock(bws[clock]) * lane_count;502502503503- if (intel_dp_link_required(encoder->dev, intel_output, mode->clock)503503+ if (intel_dp_link_required(encoder->dev, intel_encoder, mode->clock)504504 <= link_avail) {505505 dp_priv->link_bw = bws[clock];506506 dp_priv->lane_count = lane_count;···562562 struct intel_dp_m_n m_n;563563564564 /*565565- * Find the lane count in the intel_output private565565+ * Find the lane count in the intel_encoder private566566 */567567 list_for_each_entry(connector, &mode_config->connector_list, head) {568568- struct intel_output *intel_output = to_intel_output(connector);569569- struct intel_dp_priv *dp_priv = intel_output->dev_priv;568568+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);569569+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;570570571571 if (!connector->encoder || connector->encoder->crtc != crtc)572572 continue;573573574574- if (intel_output->type == INTEL_OUTPUT_DISPLAYPORT) {574574+ if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT) {575575 lane_count = dp_priv->lane_count;576576 break;577577 }···626626intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,627627 struct drm_display_mode *adjusted_mode)628628{629629- struct intel_output *intel_output = enc_to_intel_output(encoder);630630- struct intel_dp_priv *dp_priv = intel_output->dev_priv;631631- struct drm_crtc *crtc = intel_output->enc.crtc;629629+ struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);630630+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;631631+ struct drm_crtc *crtc = intel_encoder->enc.crtc;632632 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);633633634634 dp_priv->DP = (DP_LINK_TRAIN_OFF |···667667 if (intel_crtc->pipe == 1)668668 dp_priv->DP |= DP_PIPEB_SELECT;669669670670- if (IS_eDP(intel_output)) {670670+ if (IS_eDP(intel_encoder)) {671671 /* don't miss out required setting for eDP */672672 dp_priv->DP |= DP_PLL_ENABLE;673673 if (adjusted_mode->clock < 200000)···702702static void703703intel_dp_dpms(struct drm_encoder *encoder, int mode)704704{705705- struct intel_output *intel_output = enc_to_intel_output(encoder);706706- struct intel_dp_priv *dp_priv = intel_output->dev_priv;707707- struct drm_device *dev = intel_output->base.dev;705705+ struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);706706+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;707707+ struct drm_device *dev = intel_encoder->base.dev;708708 struct drm_i915_private *dev_priv = dev->dev_private;709709 uint32_t dp_reg = I915_READ(dp_priv->output_reg);710710711711 if (mode != DRM_MODE_DPMS_ON) {712712 if (dp_reg & DP_PORT_EN) {713713- intel_dp_link_down(intel_output, dp_priv->DP);714714- if (IS_eDP(intel_output))713713+ intel_dp_link_down(intel_encoder, dp_priv->DP);714714+ if (IS_eDP(intel_encoder))715715 ironlake_edp_backlight_off(dev);716716 }717717 } else {718718 if (!(dp_reg & DP_PORT_EN)) {719719- intel_dp_link_train(intel_output, dp_priv->DP, dp_priv->link_configuration);720720- if (IS_eDP(intel_output))719719+ intel_dp_link_train(intel_encoder, dp_priv->DP, dp_priv->link_configuration);720720+ if (IS_eDP(intel_encoder))721721 ironlake_edp_backlight_on(dev);722722 }723723 }···729729 * link status information730730 */731731static bool732732-intel_dp_get_link_status(struct intel_output *intel_output,732732+intel_dp_get_link_status(struct intel_encoder *intel_encoder,733733 uint8_t link_status[DP_LINK_STATUS_SIZE])734734{735735 int ret;736736737737- ret = intel_dp_aux_native_read(intel_output,737737+ ret = intel_dp_aux_native_read(intel_encoder,738738 DP_LANE0_1_STATUS,739739 link_status, DP_LINK_STATUS_SIZE);740740 if (ret != DP_LINK_STATUS_SIZE)···752752static void753753intel_dp_save(struct drm_connector *connector)754754{755755- struct intel_output *intel_output = to_intel_output(connector);756756- struct drm_device *dev = intel_output->base.dev;755755+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);756756+ struct drm_device *dev = intel_encoder->base.dev;757757 struct drm_i915_private *dev_priv = dev->dev_private;758758- struct intel_dp_priv *dp_priv = intel_output->dev_priv;758758+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;759759760760 dp_priv->save_DP = I915_READ(dp_priv->output_reg);761761- intel_dp_aux_native_read(intel_output, DP_LINK_BW_SET,761761+ intel_dp_aux_native_read(intel_encoder, DP_LINK_BW_SET,762762 dp_priv->save_link_configuration,763763 sizeof (dp_priv->save_link_configuration));764764}···825825}826826827827static void828828-intel_get_adjust_train(struct intel_output *intel_output,828828+intel_get_adjust_train(struct intel_encoder *intel_encoder,829829 uint8_t link_status[DP_LINK_STATUS_SIZE],830830 int lane_count,831831 uint8_t train_set[4])···942942}943943944944static bool945945-intel_dp_set_link_train(struct intel_output *intel_output,945945+intel_dp_set_link_train(struct intel_encoder *intel_encoder,946946 uint32_t dp_reg_value,947947 uint8_t dp_train_pat,948948 uint8_t train_set[4],949949 bool first)950950{951951- struct drm_device *dev = intel_output->base.dev;951951+ struct drm_device *dev = intel_encoder->base.dev;952952 struct drm_i915_private *dev_priv = dev->dev_private;953953- struct intel_dp_priv *dp_priv = intel_output->dev_priv;953953+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;954954 int ret;955955956956 I915_WRITE(dp_priv->output_reg, dp_reg_value);···958958 if (first)959959 intel_wait_for_vblank(dev);960960961961- intel_dp_aux_native_write_1(intel_output,961961+ intel_dp_aux_native_write_1(intel_encoder,962962 DP_TRAINING_PATTERN_SET,963963 dp_train_pat);964964965965- ret = intel_dp_aux_native_write(intel_output,965965+ ret = intel_dp_aux_native_write(intel_encoder,966966 DP_TRAINING_LANE0_SET, train_set, 4);967967 if (ret != 4)968968 return false;···971971}972972973973static void974974-intel_dp_link_train(struct intel_output *intel_output, uint32_t DP,974974+intel_dp_link_train(struct intel_encoder *intel_encoder, uint32_t DP,975975 uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE])976976{977977- struct drm_device *dev = intel_output->base.dev;977977+ struct drm_device *dev = intel_encoder->base.dev;978978 struct drm_i915_private *dev_priv = dev->dev_private;979979- struct intel_dp_priv *dp_priv = intel_output->dev_priv;979979+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;980980 uint8_t train_set[4];981981 uint8_t link_status[DP_LINK_STATUS_SIZE];982982 int i;···987987 int tries;988988989989 /* Write the link configuration data */990990- intel_dp_aux_native_write(intel_output, 0x100,990990+ intel_dp_aux_native_write(intel_encoder, 0x100,991991 link_configuration, DP_LINK_CONFIGURATION_SIZE);992992993993 DP |= DP_PORT_EN;···10011001 uint32_t signal_levels = intel_dp_signal_levels(train_set[0], dp_priv->lane_count);10021002 DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;1003100310041004- if (!intel_dp_set_link_train(intel_output, DP | DP_LINK_TRAIN_PAT_1,10041004+ if (!intel_dp_set_link_train(intel_encoder, DP | DP_LINK_TRAIN_PAT_1,10051005 DP_TRAINING_PATTERN_1, train_set, first))10061006 break;10071007 first = false;10081008 /* Set training pattern 1 */1009100910101010 udelay(100);10111011- if (!intel_dp_get_link_status(intel_output, link_status))10111011+ if (!intel_dp_get_link_status(intel_encoder, link_status))10121012 break;1013101310141014 if (intel_clock_recovery_ok(link_status, dp_priv->lane_count)) {···10331033 voltage = train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;1034103410351035 /* Compute new train_set as requested by target */10361036- intel_get_adjust_train(intel_output, link_status, dp_priv->lane_count, train_set);10361036+ intel_get_adjust_train(intel_encoder, link_status, dp_priv->lane_count, train_set);10371037 }1038103810391039 /* channel equalization */···10451045 DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;1046104610471047 /* channel eq pattern */10481048- if (!intel_dp_set_link_train(intel_output, DP | DP_LINK_TRAIN_PAT_2,10481048+ if (!intel_dp_set_link_train(intel_encoder, DP | DP_LINK_TRAIN_PAT_2,10491049 DP_TRAINING_PATTERN_2, train_set,10501050 false))10511051 break;1052105210531053 udelay(400);10541054- if (!intel_dp_get_link_status(intel_output, link_status))10541054+ if (!intel_dp_get_link_status(intel_encoder, link_status))10551055 break;1056105610571057 if (intel_channel_eq_ok(link_status, dp_priv->lane_count)) {···10641064 break;1065106510661066 /* Compute new train_set as requested by target */10671067- intel_get_adjust_train(intel_output, link_status, dp_priv->lane_count, train_set);10671067+ intel_get_adjust_train(intel_encoder, link_status, dp_priv->lane_count, train_set);10681068 ++tries;10691069 }1070107010711071 I915_WRITE(dp_priv->output_reg, DP | DP_LINK_TRAIN_OFF);10721072 POSTING_READ(dp_priv->output_reg);10731073- intel_dp_aux_native_write_1(intel_output,10731073+ intel_dp_aux_native_write_1(intel_encoder,10741074 DP_TRAINING_PATTERN_SET, DP_TRAINING_PATTERN_DISABLE);10751075}1076107610771077static void10781078-intel_dp_link_down(struct intel_output *intel_output, uint32_t DP)10781078+intel_dp_link_down(struct intel_encoder *intel_encoder, uint32_t DP)10791079{10801080- struct drm_device *dev = intel_output->base.dev;10801080+ struct drm_device *dev = intel_encoder->base.dev;10811081 struct drm_i915_private *dev_priv = dev->dev_private;10821082- struct intel_dp_priv *dp_priv = intel_output->dev_priv;10821082+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;1083108310841084 DRM_DEBUG_KMS("\n");1085108510861086- if (IS_eDP(intel_output)) {10861086+ if (IS_eDP(intel_encoder)) {10871087 DP &= ~DP_PLL_ENABLE;10881088 I915_WRITE(dp_priv->output_reg, DP);10891089 POSTING_READ(dp_priv->output_reg);···1096109610971097 udelay(17000);1098109810991099- if (IS_eDP(intel_output))10991099+ if (IS_eDP(intel_encoder))11001100 DP |= DP_LINK_TRAIN_OFF;11011101 I915_WRITE(dp_priv->output_reg, DP & ~DP_PORT_EN);11021102 POSTING_READ(dp_priv->output_reg);···11051105static void11061106intel_dp_restore(struct drm_connector *connector)11071107{11081108- struct intel_output *intel_output = to_intel_output(connector);11091109- struct intel_dp_priv *dp_priv = intel_output->dev_priv;11081108+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);11091109+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;1110111011111111 if (dp_priv->save_DP & DP_PORT_EN)11121112- intel_dp_link_train(intel_output, dp_priv->save_DP, dp_priv->save_link_configuration);11121112+ intel_dp_link_train(intel_encoder, dp_priv->save_DP, dp_priv->save_link_configuration);11131113 else11141114- intel_dp_link_down(intel_output, dp_priv->save_DP);11141114+ intel_dp_link_down(intel_encoder, dp_priv->save_DP);11151115}1116111611171117/*···11241124 */1125112511261126static void11271127-intel_dp_check_link_status(struct intel_output *intel_output)11271127+intel_dp_check_link_status(struct intel_encoder *intel_encoder)11281128{11291129- struct intel_dp_priv *dp_priv = intel_output->dev_priv;11291129+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;11301130 uint8_t link_status[DP_LINK_STATUS_SIZE];1131113111321132- if (!intel_output->enc.crtc)11321132+ if (!intel_encoder->enc.crtc)11331133 return;1134113411351135- if (!intel_dp_get_link_status(intel_output, link_status)) {11361136- intel_dp_link_down(intel_output, dp_priv->DP);11351135+ if (!intel_dp_get_link_status(intel_encoder, link_status)) {11361136+ intel_dp_link_down(intel_encoder, dp_priv->DP);11371137 return;11381138 }1139113911401140 if (!intel_channel_eq_ok(link_status, dp_priv->lane_count))11411141- intel_dp_link_train(intel_output, dp_priv->DP, dp_priv->link_configuration);11411141+ intel_dp_link_train(intel_encoder, dp_priv->DP, dp_priv->link_configuration);11421142}1143114311441144static enum drm_connector_status11451145ironlake_dp_detect(struct drm_connector *connector)11461146{11471147- struct intel_output *intel_output = to_intel_output(connector);11481148- struct intel_dp_priv *dp_priv = intel_output->dev_priv;11471147+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);11481148+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;11491149 enum drm_connector_status status;1150115011511151 status = connector_status_disconnected;11521152- if (intel_dp_aux_native_read(intel_output,11521152+ if (intel_dp_aux_native_read(intel_encoder,11531153 0x000, dp_priv->dpcd,11541154 sizeof (dp_priv->dpcd)) == sizeof (dp_priv->dpcd))11551155 {···11681168static enum drm_connector_status11691169intel_dp_detect(struct drm_connector *connector)11701170{11711171- struct intel_output *intel_output = to_intel_output(connector);11721172- struct drm_device *dev = intel_output->base.dev;11711171+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);11721172+ struct drm_device *dev = intel_encoder->base.dev;11731173 struct drm_i915_private *dev_priv = dev->dev_private;11741174- struct intel_dp_priv *dp_priv = intel_output->dev_priv;11741174+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;11751175 uint32_t temp, bit;11761176 enum drm_connector_status status;11771177···12101210 return connector_status_disconnected;1211121112121212 status = connector_status_disconnected;12131213- if (intel_dp_aux_native_read(intel_output,12131213+ if (intel_dp_aux_native_read(intel_encoder,12141214 0x000, dp_priv->dpcd,12151215 sizeof (dp_priv->dpcd)) == sizeof (dp_priv->dpcd))12161216 {···1222122212231223static int intel_dp_get_modes(struct drm_connector *connector)12241224{12251225- struct intel_output *intel_output = to_intel_output(connector);12261226- struct drm_device *dev = intel_output->base.dev;12251225+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);12261226+ struct drm_device *dev = intel_encoder->base.dev;12271227 struct drm_i915_private *dev_priv = dev->dev_private;12281228 int ret;1229122912301230 /* We should parse the EDID data and find out if it has an audio sink12311231 */1232123212331233- ret = intel_ddc_get_modes(intel_output);12331233+ ret = intel_ddc_get_modes(intel_encoder);12341234 if (ret)12351235 return ret;1236123612371237 /* if eDP has no EDID, try to use fixed panel mode from VBT */12381238- if (IS_eDP(intel_output)) {12381238+ if (IS_eDP(intel_encoder)) {12391239 if (dev_priv->panel_fixed_mode != NULL) {12401240 struct drm_display_mode *mode;12411241 mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode);···12491249static void12501250intel_dp_destroy (struct drm_connector *connector)12511251{12521252- struct intel_output *intel_output = to_intel_output(connector);12521252+ struct intel_encoder *intel_encoder = to_intel_encoder(connector);1253125312541254- if (intel_output->i2c_bus)12551255- intel_i2c_destroy(intel_output->i2c_bus);12541254+ if (intel_encoder->i2c_bus)12551255+ intel_i2c_destroy(intel_encoder->i2c_bus);12561256 drm_sysfs_connector_remove(connector);12571257 drm_connector_cleanup(connector);12581258- kfree(intel_output);12581258+ kfree(intel_encoder);12591259}1260126012611261static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = {···12911291};1292129212931293void12941294-intel_dp_hot_plug(struct intel_output *intel_output)12941294+intel_dp_hot_plug(struct intel_encoder *intel_encoder)12951295{12961296- struct intel_dp_priv *dp_priv = intel_output->dev_priv;12961296+ struct intel_dp_priv *dp_priv = intel_encoder->dev_priv;1297129712981298 if (dp_priv->dpms_mode == DRM_MODE_DPMS_ON)12991299- intel_dp_check_link_status(intel_output);12991299+ intel_dp_check_link_status(intel_encoder);13001300}1301130113021302void···13041304{13051305 struct drm_i915_private *dev_priv = dev->dev_private;13061306 struct drm_connector *connector;13071307- struct intel_output *intel_output;13071307+ struct intel_encoder *intel_encoder;13081308 struct intel_dp_priv *dp_priv;13091309 const char *name = NULL;1310131013111311- intel_output = kcalloc(sizeof(struct intel_output) + 13111311+ intel_encoder = kcalloc(sizeof(struct intel_encoder) +13121312 sizeof(struct intel_dp_priv), 1, GFP_KERNEL);13131313- if (!intel_output)13131313+ if (!intel_encoder)13141314 return;1315131513161316- dp_priv = (struct intel_dp_priv *)(intel_output + 1);13161316+ dp_priv = (struct intel_dp_priv *)(intel_encoder + 1);1317131713181318- connector = &intel_output->base;13181318+ connector = &intel_encoder->base;13191319 drm_connector_init(dev, connector, &intel_dp_connector_funcs,13201320 DRM_MODE_CONNECTOR_DisplayPort);13211321 drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);1322132213231323 if (output_reg == DP_A)13241324- intel_output->type = INTEL_OUTPUT_EDP;13241324+ intel_encoder->type = INTEL_OUTPUT_EDP;13251325 else13261326- intel_output->type = INTEL_OUTPUT_DISPLAYPORT;13261326+ intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;1327132713281328 if (output_reg == DP_B || output_reg == PCH_DP_B)13291329- intel_output->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);13291329+ intel_encoder->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);13301330 else if (output_reg == DP_C || output_reg == PCH_DP_C)13311331- intel_output->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);13311331+ intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);13321332 else if (output_reg == DP_D || output_reg == PCH_DP_D)13331333- intel_output->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);13331333+ intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);1334133413351335- if (IS_eDP(intel_output))13361336- intel_output->clone_mask = (1 << INTEL_EDP_CLONE_BIT);13351335+ if (IS_eDP(intel_encoder))13361336+ intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT);1337133713381338- intel_output->crtc_mask = (1 << 0) | (1 << 1);13381338+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1);13391339 connector->interlace_allowed = true;13401340 connector->doublescan_allowed = 0;1341134113421342- dp_priv->intel_output = intel_output;13421342+ dp_priv->intel_encoder = intel_encoder;13431343 dp_priv->output_reg = output_reg;13441344 dp_priv->has_audio = false;13451345 dp_priv->dpms_mode = DRM_MODE_DPMS_ON;13461346- intel_output->dev_priv = dp_priv;13461346+ intel_encoder->dev_priv = dp_priv;1347134713481348- drm_encoder_init(dev, &intel_output->enc, &intel_dp_enc_funcs,13481348+ drm_encoder_init(dev, &intel_encoder->enc, &intel_dp_enc_funcs,13491349 DRM_MODE_ENCODER_TMDS);13501350- drm_encoder_helper_add(&intel_output->enc, &intel_dp_helper_funcs);13501350+ drm_encoder_helper_add(&intel_encoder->enc, &intel_dp_helper_funcs);1351135113521352- drm_mode_connector_attach_encoder(&intel_output->base,13531353- &intel_output->enc);13521352+ drm_mode_connector_attach_encoder(&intel_encoder->base,13531353+ &intel_encoder->enc);13541354 drm_sysfs_connector_add(connector);1355135513561356 /* Set up the DDC bus. */···13781378 break;13791379 }1380138013811381- intel_dp_i2c_init(intel_output, name);13811381+ intel_dp_i2c_init(intel_encoder, name);1382138213831383- intel_output->ddc_bus = &dp_priv->adapter;13841384- intel_output->hot_plug = intel_dp_hot_plug;13831383+ intel_encoder->ddc_bus = &dp_priv->adapter;13841384+ intel_encoder->hot_plug = intel_dp_hot_plug;1385138513861386 if (output_reg == DP_A) {13871387 /* initialize panel mode from VBT if available for eDP */
···539539540540 struct it87_data *data = dev_get_drvdata(dev);541541 long val;542542+ u8 reg;542543543544 if (strict_strtol(buf, 10, &val) < 0)544545 return -EINVAL;545546546546- mutex_lock(&data->update_lock);547547-548548- data->sensor &= ~(1 << nr);549549- data->sensor &= ~(8 << nr);547547+ reg = it87_read_value(data, IT87_REG_TEMP_ENABLE);548548+ reg &= ~(1 << nr);549549+ reg &= ~(8 << nr);550550 if (val == 2) { /* backwards compatibility */551551 dev_warn(dev, "Sensor type 2 is deprecated, please use 4 "552552 "instead\n");···554554 }555555 /* 3 = thermal diode; 4 = thermistor; 0 = disabled */556556 if (val == 3)557557- data->sensor |= 1 << nr;557557+ reg |= 1 << nr;558558 else if (val == 4)559559- data->sensor |= 8 << nr;560560- else if (val != 0) {561561- mutex_unlock(&data->update_lock);559559+ reg |= 8 << nr;560560+ else if (val != 0)562561 return -EINVAL;563563- }562562+563563+ mutex_lock(&data->update_lock);564564+ data->sensor = reg;564565 it87_write_value(data, IT87_REG_TEMP_ENABLE, data->sensor);566566+ data->valid = 0; /* Force cache refresh */565567 mutex_unlock(&data->update_lock);566568 return count;567569}···18431841 it87_write_value(data, IT87_REG_TEMP_HIGH(i), 127);18441842 }1845184318461846- /* Check if temperature channels are reset manually or by some reason */18471847- tmp = it87_read_value(data, IT87_REG_TEMP_ENABLE);18481848- if ((tmp & 0x3f) == 0) {18491849- /* Temp1,Temp3=thermistor; Temp2=thermal diode */18501850- tmp = (tmp & 0xc0) | 0x2a;18511851- it87_write_value(data, IT87_REG_TEMP_ENABLE, tmp);18521852- }18531853- data->sensor = tmp;18441844+ /* Temperature channels are not forcibly enabled, as they can be18451845+ * set to two different sensor types and we can't guess which one18461846+ * is correct for a given system. These channels can be enabled at18471847+ * run-time through the temp{1-3}_type sysfs accessors if needed. */1854184818551849 /* Check if voltage monitors are reset manually or by some reason */18561850 tmp = it87_read_value(data, IT87_REG_VIN_ENABLE);
+9-4
drivers/hwmon/sht15.c
···303303 **/304304static inline int sht15_calc_temp(struct sht15_data *data)305305{306306- int d1 = 0;306306+ int d1 = temppoints[0].d1;307307 int i;308308309309- for (i = 1; i < ARRAY_SIZE(temppoints); i++)309309+ for (i = ARRAY_SIZE(temppoints) - 1; i > 0; i--)310310 /* Find pointer to interpolate */311311 if (data->supply_uV > temppoints[i - 1].vdd) {312312- d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd)312312+ d1 = (data->supply_uV - temppoints[i - 1].vdd)313313 * (temppoints[i].d1 - temppoints[i - 1].d1)314314 / (temppoints[i].vdd - temppoints[i - 1].vdd)315315 + temppoints[i - 1].d1;···542542/* If a regulator is available, query what the supply voltage actually is!*/543543 data->reg = regulator_get(data->dev, "vcc");544544 if (!IS_ERR(data->reg)) {545545- data->supply_uV = regulator_get_voltage(data->reg);545545+ int voltage;546546+547547+ voltage = regulator_get_voltage(data->reg);548548+ if (voltage)549549+ data->supply_uV = voltage;550550+546551 regulator_enable(data->reg);547552 /* setup a notifier block to update this if another device548553 * causes the voltage to change */
+8-1
drivers/input/input.c
···660660int input_get_keycode(struct input_dev *dev,661661 unsigned int scancode, unsigned int *keycode)662662{663663- return dev->getkeycode(dev, scancode, keycode);663663+ unsigned long flags;664664+ int retval;665665+666666+ spin_lock_irqsave(&dev->event_lock, flags);667667+ retval = dev->getkeycode(dev, scancode, keycode);668668+ spin_unlock_irqrestore(&dev->event_lock, flags);669669+670670+ return retval;664671}665672EXPORT_SYMBOL(input_get_keycode);666673
···39394040static bool i8042_nomux;4141module_param_named(nomux, i8042_nomux, bool, 0);4242-MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing conrtoller is present.");4242+MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing controller is present.");43434444static bool i8042_unlock;4545module_param_named(unlock, i8042_unlock, bool, 0);
+33-19
drivers/input/sparse-keymap.c
···6868 unsigned int scancode,6969 unsigned int *keycode)7070{7171- const struct key_entry *key =7272- sparse_keymap_entry_from_scancode(dev, scancode);7171+ const struct key_entry *key;73727474- if (key && key->type == KE_KEY) {7575- *keycode = key->keycode;7676- return 0;7373+ if (dev->keycode) {7474+ key = sparse_keymap_entry_from_scancode(dev, scancode);7575+ if (key && key->type == KE_KEY) {7676+ *keycode = key->keycode;7777+ return 0;7878+ }7779 }78807981 return -EINVAL;···8886 struct key_entry *key;8987 int old_keycode;90889191- if (keycode < 0 || keycode > KEY_MAX)9292- return -EINVAL;9393-9494- key = sparse_keymap_entry_from_scancode(dev, scancode);9595- if (key && key->type == KE_KEY) {9696- old_keycode = key->keycode;9797- key->keycode = keycode;9898- set_bit(keycode, dev->keybit);9999- if (!sparse_keymap_entry_from_keycode(dev, old_keycode))100100- clear_bit(old_keycode, dev->keybit);101101- return 0;8989+ if (dev->keycode) {9090+ key = sparse_keymap_entry_from_scancode(dev, scancode);9191+ if (key && key->type == KE_KEY) {9292+ old_keycode = key->keycode;9393+ key->keycode = keycode;9494+ set_bit(keycode, dev->keybit);9595+ if (!sparse_keymap_entry_from_keycode(dev, old_keycode))9696+ clear_bit(old_keycode, dev->keybit);9797+ return 0;9898+ }10299 }103100104101 return -EINVAL;···165164 return 0;166165167166 err_out:168168- kfree(keymap);167167+ kfree(map);169168 return error;170169171170}···177176 *178177 * This function is used to free memory allocated by sparse keymap179178 * in an input device that was set up by sparse_keymap_setup().179179+ * NOTE: It is safe to cal this function while input device is180180+ * still registered (however the drivers should care not to try to181181+ * use freed keymap and thus have to shut off interrups/polling182182+ * before freeing the keymap).180183 */181184void sparse_keymap_free(struct input_dev *dev)182185{186186+ unsigned long flags;187187+188188+ /*189189+ * Take event lock to prevent racing with input_get_keycode()190190+ * and input_set_keycode() if we are called while input device191191+ * is still registered.192192+ */193193+ spin_lock_irqsave(&dev->event_lock, flags);194194+183195 kfree(dev->keycode);184196 dev->keycode = NULL;185197 dev->keycodemax = 0;186186- dev->getkeycode = NULL;187187- dev->setkeycode = NULL;198198+199199+ spin_unlock_irqrestore(&dev->event_lock, flags);188200}189201EXPORT_SYMBOL(sparse_keymap_free);190202
+7-5
drivers/input/tablet/wacom_sys.c
···673673 int rv;674674675675 mutex_lock(&wacom->lock);676676- if (wacom->open) {676676+677677+ /* switch to wacom mode first */678678+ wacom_query_tablet_data(intf, features);679679+680680+ if (wacom->open)677681 rv = usb_submit_urb(wacom->irq, GFP_NOIO);678678- /* switch to wacom mode if needed */679679- if (!wacom_retrieve_hid_descriptor(intf, features))680680- wacom_query_tablet_data(intf, features);681681- } else682682+ else682683 rv = 0;684684+683685 mutex_unlock(&wacom->lock);684686685687 return rv;
···1414 */15151616#include "gigaset.h"1717-#include <linux/ctype.h>1817#include <linux/module.h>1918#include <linux/moduleparam.h>2020-#include <linux/slab.h>21192220/* Version Information */2321#define DRIVER_AUTHOR "Hansjoerg Lipp <hjlipp@web.de>, Tilman Schmidt <tilman@imap.cc>, Stefan Eilers"
···15151616#include "gigaset.h"1717#include <linux/isdnif.h>1818-#include <linux/slab.h>19182019#define HW_HDR_LEN 2 /* Header size used to store ack info */2120
···178178179179 /* We set the status. */180180 to_lgdev(vdev)->desc->status = status;181181- kvm_hypercall1(LHCALL_NOTIFY, (max_pfn << PAGE_SHIFT) + offset);181181+ hcall(LHCALL_NOTIFY, (max_pfn << PAGE_SHIFT) + offset, 0, 0, 0);182182}183183184184static void lg_set_status(struct virtio_device *vdev, u8 status)···229229 */230230 struct lguest_vq_info *lvq = vq->priv;231231232232- kvm_hypercall1(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT);232232+ hcall(LHCALL_NOTIFY, lvq->config.pfn << PAGE_SHIFT, 0, 0, 0);233233}234234235235/* An extern declaration inside a C file is bad form. Don't do it. */
+12
drivers/lguest/x86/core.c
···288288 insn = lgread(cpu, physaddr, u8);289289290290 /*291291+ * Around 2.6.33, the kernel started using an emulation for the292292+ * cmpxchg8b instruction in early boot on many configurations. This293293+ * code isn't paravirtualized, and it tries to disable interrupts.294294+ * Ignore it, which will Mostly Work.295295+ */296296+ if (insn == 0xfa) {297297+ /* "cli", or Clear Interrupt Enable instruction. Skip it. */298298+ cpu->regs->eip++;299299+ return 1;300300+ }301301+302302+ /*291303 * 0x66 is an "operand prefix". It means it's using the upper 16 bits292304 * of the eax register.293305 */
···808808 }809809 }810810811811+ /*812812+ * The above algorithm sometimes fails when the ucode813813+ * reports 0 for all chains. It's not clear why that814814+ * happens to start with, but it is then causing trouble815815+ * because this can make us enable more chains than the816816+ * hardware really has.817817+ *818818+ * To be safe, simply mask out any chains that we know819819+ * are not on the device.820820+ */821821+ active_chains &= priv->hw_params.valid_rx_ant;822822+811823 num_tx_chains = 0;812824 for (i = 0; i < NUM_RX_CHAINS; i++) {813825 /* loops on all the bits of
···203203#define EEPROM_REG_BAND_52_HT40_CHANNELS ((0x92)\204204 | INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 22 bytes */205205206206+/* 6000 regulatory - indirect access */207207+#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS ((0x80)\208208+ | INDIRECT_ADDRESS | INDIRECT_REGULATORY) /* 14 bytes */209209+206210/* 6000 and up regulatory tx power - indirect access */207211/* max. elements per section */208212#define EEPROM_MAX_TXPOWER_SECTION_ELEMENTS (8)
+20-11
drivers/net/wireless/iwlwifi/iwl-scan.c
···470470471471static int iwl_scan_initiate(struct iwl_priv *priv)472472{473473+ WARN_ON(!mutex_is_locked(&priv->mutex));474474+473475 IWL_DEBUG_INFO(priv, "Starting scan...\n");474476 set_bit(STATUS_SCANNING, &priv->status);475477 priv->is_internal_short_scan = false;···549547 * internal short scan, this function should only been called while associated.550548 * It will reset and tune the radio to prevent possible RF related problem551549 */552552-int iwl_internal_short_hw_scan(struct iwl_priv *priv)550550+void iwl_internal_short_hw_scan(struct iwl_priv *priv)553551{554554- int ret = 0;552552+ queue_work(priv->workqueue, &priv->start_internal_scan);553553+}554554+555555+static void iwl_bg_start_internal_scan(struct work_struct *work)556556+{557557+ struct iwl_priv *priv =558558+ container_of(work, struct iwl_priv, start_internal_scan);559559+560560+ mutex_lock(&priv->mutex);555561556562 if (!iwl_is_ready_rf(priv)) {557557- ret = -EIO;558563 IWL_DEBUG_SCAN(priv, "not ready or exit pending\n");559559- goto out;564564+ goto unlock;560565 }566566+561567 if (test_bit(STATUS_SCANNING, &priv->status)) {562568 IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");563563- ret = -EAGAIN;564564- goto out;569569+ goto unlock;565570 }571571+566572 if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {567573 IWL_DEBUG_SCAN(priv, "Scan request while abort pending\n");568568- ret = -EAGAIN;569569- goto out;574574+ goto unlock;570575 }571576572577 priv->scan_bands = 0;···586577 set_bit(STATUS_SCANNING, &priv->status);587578 priv->is_internal_short_scan = true;588579 queue_work(priv->workqueue, &priv->request_scan);589589-590590-out:591591- return ret;580580+ unlock:581581+ mutex_unlock(&priv->mutex);592582}593583594584#define IWL_SCAN_CHECK_WATCHDOG (7 * HZ)···971963 INIT_WORK(&priv->scan_completed, iwl_bg_scan_completed);972964 INIT_WORK(&priv->request_scan, iwl_bg_request_scan);973965 INIT_WORK(&priv->abort_scan, iwl_bg_abort_scan);966966+ INIT_WORK(&priv->start_internal_scan, iwl_bg_start_internal_scan);974967 INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);975968}976969EXPORT_SYMBOL(iwl_setup_scan_deferred_work);
+7-2
drivers/pcmcia/cistpl.c
···14841484 if (!s)14851485 return -EINVAL;1486148614871487+ if (s->functions) {14881488+ WARN_ON(1);14891489+ return -EINVAL;14901490+ }14911491+14871492 /* We do not want to validate the CIS cache... */14881493 mutex_lock(&s->ops_mutex);14891494 destroy_cis_cache(s);···16441639 count = 0;16451640 else {16461641 struct pcmcia_socket *s;16471647- unsigned int chains;16421642+ unsigned int chains = 1;1648164316491644 if (off + count > size)16501645 count = size - off;···1653164816541649 if (!(s->state & SOCKET_PRESENT))16551650 return -ENODEV;16561656- if (pccard_validate_cis(s, &chains))16511651+ if (!s->functions && pccard_validate_cis(s, &chains))16571652 return -EIO;16581653 if (!chains)16591654 return -ENODATA;
+3-1
drivers/pcmcia/db1xxx_ss.c
···166166167167 ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq,168168 IRQF_DISABLED, "pcmcia_insert", sock);169169- if (ret)169169+ if (ret) {170170+ local_irq_restore(flags);170171 goto out1;172172+ }171173172174 ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq,173175 IRQF_DISABLED, "pcmcia_eject", sock);
+14-8
drivers/pcmcia/ds.c
···687687 new_funcs = mfc.nfn;688688 else689689 new_funcs = 1;690690- if (old_funcs > new_funcs) {690690+ if (old_funcs != new_funcs) {691691+ /* we need to re-start */691692 pcmcia_card_remove(s, NULL);692693 pcmcia_card_add(s);693693- } else if (new_funcs > old_funcs) {694694- s->functions = new_funcs;695695- pcmcia_device_add(s, 1);696694 }697695 }698696···726728 struct pcmcia_socket *s = dev->socket;727729 const struct firmware *fw;728730 int ret = -ENOMEM;731731+ cistpl_longlink_mfc_t mfc;732732+ int old_funcs, new_funcs = 1;729733730734 if (!filename)731735 return -EINVAL;···750750 goto release;751751 }752752753753+ /* we need to re-start if the number of functions changed */754754+ old_funcs = s->functions;755755+ if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC,756756+ &mfc))757757+ new_funcs = mfc.nfn;758758+759759+ if (old_funcs != new_funcs)760760+ ret = -EBUSY;753761754762 /* update information */755763 pcmcia_device_query(dev);···866858 if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) {867859 dev_dbg(&dev->dev, "device needs a fake CIS\n");868860 if (!dev->socket->fake_cis)869869- pcmcia_load_firmware(dev, did->cisfile);870870-871871- if (!dev->socket->fake_cis)872872- return 0;861861+ if (pcmcia_load_firmware(dev, did->cisfile))862862+ return 0;873863 }874864875865 if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) {
+5-5
drivers/pcmcia/pcmcia_resource.c
···755755 else756756 printk(KERN_WARNING "pcmcia: Driver needs updating to support IRQ sharing.\n");757757758758-#ifdef CONFIG_PCMCIA_PROBE759759-760760- if (s->irq.AssignedIRQ != 0) {761761- /* If the interrupt is already assigned, it must be the same */758758+ /* If the interrupt is already assigned, it must be the same */759759+ if (s->irq.AssignedIRQ != 0)762760 irq = s->irq.AssignedIRQ;763763- } else {761761+762762+#ifdef CONFIG_PCMCIA_PROBE763763+ if (!irq) {764764 int try;765765 u32 mask = s->irq_mask;766766 void *data = p_dev; /* something unique to this device */
+12-4
drivers/pcmcia/rsrc_nonstatic.c
···214214 return;215215 }216216 for (i = base, most = 0; i < base+num; i += 8) {217217- res = claim_region(NULL, i, 8, IORESOURCE_IO, "PCMCIA ioprobe");217217+ res = claim_region(s, i, 8, IORESOURCE_IO, "PCMCIA ioprobe");218218 if (!res)219219 continue;220220 hole = inb(i);···231231232232 bad = any = 0;233233 for (i = base; i < base+num; i += 8) {234234- res = claim_region(NULL, i, 8, IORESOURCE_IO, "PCMCIA ioprobe");235235- if (!res)234234+ res = claim_region(s, i, 8, IORESOURCE_IO, "PCMCIA ioprobe");235235+ if (!res) {236236+ if (!any)237237+ printk(" excluding");238238+ if (!bad)239239+ bad = any = i;236240 continue;241241+ }237242 for (j = 0; j < 8; j++)238243 if (inb(i+j) != most)239244 break;···258253 }259254 if (bad) {260255 if ((num > 16) && (bad == base) && (i == base+num)) {256256+ sub_interval(&s_data->io_db, bad, i-bad);261257 printk(" nothing: probe failed.\n");262258 return;263259 } else {···810804static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long start, unsigned long end)811805{812806 struct socket_data *data = s->resource_data;813813- unsigned long size = end - start + 1;807807+ unsigned long size;814808 int ret = 0;815809816810#if defined(CONFIG_X86)···819813 if (start < 0x100)820814 start = 0x100;821815#endif816816+817817+ size = end - start + 1;822818823819 if (end < start)824820 return -EINVAL;
···246246 .pci_ops = &ssb_pcicore_pciops,247247 .io_resource = &ssb_pcicore_io_resource,248248 .mem_resource = &ssb_pcicore_mem_resource,249249- .mem_offset = 0x24000000,250249};251251-252252-static u32 ssb_pcicore_pcibus_iobase = 0x100;253253-static u32 ssb_pcicore_pcibus_membase = SSB_PCI_DMA;254250255251/* This function is called when doing a pci_enable_device().256252 * We must first check if the device is a device on the PCI-core bridge. */257253int ssb_pcicore_plat_dev_init(struct pci_dev *d)258254{259259- struct resource *res;260260- int pos, size;261261- u32 *base;262262-263255 if (d->bus->ops != &ssb_pcicore_pciops) {264256 /* This is not a device on the PCI-core bridge. */265257 return -ENODEV;···260268 ssb_printk(KERN_INFO "PCI: Fixing up device %s\n",261269 pci_name(d));262270263263- /* Fix up resource bases */264264- for (pos = 0; pos < 6; pos++) {265265- res = &d->resource[pos];266266- if (res->flags & IORESOURCE_IO)267267- base = &ssb_pcicore_pcibus_iobase;268268- else269269- base = &ssb_pcicore_pcibus_membase;270270- res->flags |= IORESOURCE_PCI_FIXED;271271- if (res->end) {272272- size = res->end - res->start + 1;273273- if (*base & (size - 1))274274- *base = (*base + size) & ~(size - 1);275275- res->start = *base;276276- res->end = res->start + size - 1;277277- *base += size;278278- pci_write_config_dword(d, PCI_BASE_ADDRESS_0 + (pos << 2), res->start);279279- }280280- /* Fix up PCI bridge BAR0 only */281281- if (d->bus->number == 0 && PCI_SLOT(d->devfn) == 0)282282- break;283283- }284271 /* Fix up interrupt lines */285272 d->irq = ssb_mips_irq(extpci_core->dev) + 2;286273 pci_write_config_byte(d, PCI_INTERRUPT_LINE, d->irq);
+4-4
drivers/watchdog/Kconfig
···194194195195config OMAP_WATCHDOG196196 tristate "OMAP Watchdog"197197- depends on ARCH_OMAP16XX || ARCH_OMAP2 || ARCH_OMAP3197197+ depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS198198 help199199- Support for TI OMAP1610/OMAP1710/OMAP2420/OMAP3430 watchdog. Say 'Y'200200- here to enable the OMAP1610/OMAP1710/OMAP2420/OMAP3430 watchdog timer.199199+ Support for TI OMAP1610/OMAP1710/OMAP2420/OMAP3430/OMAP4430 watchdog. Say 'Y'200200+ here to enable the OMAP1610/OMAP1710/OMAP2420/OMAP3430/OMAP4430 watchdog timer.201201202202config PNX4008_WATCHDOG203203 tristate "PNX4008 Watchdog"···302302303303config MAX63XX_WATCHDOG304304 tristate "Max63xx watchdog"305305- depends on ARM305305+ depends on ARM && HAS_IOMEM306306 help307307 Support for memory mapped max63{69,70,71,72,73,74} watchdog timer.308308
···154154155155static void max63xx_wdt_disable(void)156156{157157+ u8 val;158158+157159 spin_lock(&io_lock);158160159159- __raw_writeb(3, wdt_base);161161+ val = __raw_readb(wdt_base);162162+ val &= ~MAX6369_WDSET;163163+ val |= 3;164164+ __raw_writeb(val, wdt_base);160165161166 spin_unlock(&io_lock);162167
+15-5
fs/btrfs/extent-tree.c
···32353235 u64 bytes)32363236{32373237 struct btrfs_space_info *data_sinfo;32383238- int ret = 0, committed = 0;32383238+ u64 used;32393239+ int ret = 0, committed = 0, flushed = 0;3239324032403241 /* make sure bytes are sectorsize aligned */32413242 bytes = (bytes + root->sectorsize - 1) & ~((u64)root->sectorsize - 1);···32483247again:32493248 /* make sure we have enough space to handle the data first */32503249 spin_lock(&data_sinfo->lock);32513251- if (data_sinfo->total_bytes - data_sinfo->bytes_used -32523252- data_sinfo->bytes_delalloc - data_sinfo->bytes_reserved -32533253- data_sinfo->bytes_pinned - data_sinfo->bytes_readonly -32543254- data_sinfo->bytes_may_use - data_sinfo->bytes_super < bytes) {32503250+ used = data_sinfo->bytes_used + data_sinfo->bytes_delalloc +32513251+ data_sinfo->bytes_reserved + data_sinfo->bytes_pinned +32523252+ data_sinfo->bytes_readonly + data_sinfo->bytes_may_use +32533253+ data_sinfo->bytes_super;32543254+32553255+ if (used + bytes > data_sinfo->total_bytes) {32553256 struct btrfs_trans_handle *trans;32573257+32583258+ if (!flushed) {32593259+ spin_unlock(&data_sinfo->lock);32603260+ flush_delalloc(root, data_sinfo);32613261+ flushed = 1;32623262+ goto again;32633263+ }3256326432573265 /*32583266 * if we don't have enough free bytes in this space then we need
+6
fs/btrfs/volumes.c
···22502250 if (!looped)22512251 calc_size = max_t(u64, min_stripe_size, calc_size);2252225222532253+ /*22542254+ * we're about to do_div by the stripe_len so lets make sure22552255+ * we end up with something bigger than a stripe22562256+ */22572257+ calc_size = max_t(u64, calc_size, stripe_len * 4);22582258+22532259 do_div(calc_size, stripe_len);22542260 calc_size *= stripe_len;22552261
+30-32
fs/ceph/addr.c
···337337/*338338 * Get ref for the oldest snapc for an inode with dirty data... that is, the339339 * only snap context we are allowed to write back.340340- *341341- * Caller holds i_lock.342340 */343343-static struct ceph_snap_context *__get_oldest_context(struct inode *inode,344344- u64 *snap_size)341341+static struct ceph_snap_context *get_oldest_context(struct inode *inode,342342+ u64 *snap_size)345343{346344 struct ceph_inode_info *ci = ceph_inode(inode);347345 struct ceph_snap_context *snapc = NULL;348346 struct ceph_cap_snap *capsnap = NULL;349347348348+ spin_lock(&inode->i_lock);350349 list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {351350 dout(" cap_snap %p snapc %p has %d dirty pages\n", capsnap,352351 capsnap->context, capsnap->dirty_pages);···356357 break;357358 }358359 }359359- if (!snapc && ci->i_snap_realm) {360360- snapc = ceph_get_snap_context(ci->i_snap_realm->cached_context);360360+ if (!snapc && ci->i_head_snapc) {361361+ snapc = ceph_get_snap_context(ci->i_head_snapc);361362 dout(" head snapc %p has %d dirty pages\n",362363 snapc, ci->i_wrbuffer_ref_head);363364 }364364- return snapc;365365-}366366-367367-static struct ceph_snap_context *get_oldest_context(struct inode *inode,368368- u64 *snap_size)369369-{370370- struct ceph_snap_context *snapc = NULL;371371-372372- spin_lock(&inode->i_lock);373373- snapc = __get_oldest_context(inode, snap_size);374365 spin_unlock(&inode->i_lock);375366 return snapc;376367}···381392 int len = PAGE_CACHE_SIZE;382393 loff_t i_size;383394 int err = 0;384384- struct ceph_snap_context *snapc;395395+ struct ceph_snap_context *snapc, *oldest;385396 u64 snap_size = 0;386397 long writeback_stat;387398···402413 dout("writepage %p page %p not dirty?\n", inode, page);403414 goto out;404415 }405405- if (snapc != get_oldest_context(inode, &snap_size)) {416416+ oldest = get_oldest_context(inode, &snap_size);417417+ if (snapc->seq > oldest->seq) {406418 dout("writepage %p page %p snapc %p not writeable - noop\n",407419 inode, page, (void *)page->private);408420 /* we should only noop if called by kswapd */409421 WARN_ON((current->flags & PF_MEMALLOC) == 0);422422+ ceph_put_snap_context(oldest);410423 goto out;411424 }425425+ ceph_put_snap_context(oldest);412426413427 /* is this a partial page at end of file? */414428 if (snap_size)···450458 ClearPagePrivate(page);451459 end_page_writeback(page);452460 ceph_put_wrbuffer_cap_refs(ci, 1, snapc);453453- ceph_put_snap_context(snapc);461461+ ceph_put_snap_context(snapc); /* page's reference */454462out:455463 return err;456464}···550558 dout("inode %p skipping page %p\n", inode, page);551559 wbc->pages_skipped++;552560 }561561+ ceph_put_snap_context((void *)page->private);553562 page->private = 0;554563 ClearPagePrivate(page);555555- ceph_put_snap_context(snapc);556564 dout("unlocking %d %p\n", i, page);557565 end_page_writeback(page);558566···610618 int range_whole = 0;611619 int should_loop = 1;612620 pgoff_t max_pages = 0, max_pages_ever = 0;613613- struct ceph_snap_context *snapc = NULL, *last_snapc = NULL;621621+ struct ceph_snap_context *snapc = NULL, *last_snapc = NULL, *pgsnapc;614622 struct pagevec pvec;615623 int done = 0;616624 int rc = 0;···762770 }763771764772 /* only if matching snap context */765765- if (snapc != (void *)page->private) {766766- dout("page snapc %p != oldest %p\n",767767- (void *)page->private, snapc);773773+ pgsnapc = (void *)page->private;774774+ if (pgsnapc->seq > snapc->seq) {775775+ dout("page snapc %p %lld > oldest %p %lld\n",776776+ pgsnapc, pgsnapc->seq, snapc, snapc->seq);768777 unlock_page(page);769778 if (!locked_pages)770779 continue; /* keep looking for snap */···907914 struct ceph_snap_context *snapc)908915{909916 struct ceph_snap_context *oldest = get_oldest_context(inode, NULL);910910- return !oldest || snapc->seq <= oldest->seq;917917+ int ret = !oldest || snapc->seq <= oldest->seq;918918+919919+ ceph_put_snap_context(oldest);920920+ return ret;911921}912922913923/*···932936 int pos_in_page = pos & ~PAGE_CACHE_MASK;933937 int end_in_page = pos_in_page + len;934938 loff_t i_size;935935- struct ceph_snap_context *snapc;936939 int r;940940+ struct ceph_snap_context *snapc, *oldest;937941938942retry_locked:939943 /* writepages currently holds page lock, but if we change that later, */···943947 BUG_ON(!ci->i_snap_realm);944948 down_read(&mdsc->snap_rwsem);945949 BUG_ON(!ci->i_snap_realm->cached_context);946946- if (page->private &&947947- (void *)page->private != ci->i_snap_realm->cached_context) {950950+ snapc = (void *)page->private;951951+ if (snapc && snapc != ci->i_head_snapc) {948952 /*949953 * this page is already dirty in another (older) snap950954 * context! is it writeable now?951955 */952952- snapc = get_oldest_context(inode, NULL);956956+ oldest = get_oldest_context(inode, NULL);953957 up_read(&mdsc->snap_rwsem);954958955955- if (snapc != (void *)page->private) {959959+ if (snapc->seq > oldest->seq) {960960+ ceph_put_snap_context(oldest);956961 dout(" page %p snapc %p not current or oldest\n",957957- page, (void *)page->private);962962+ page, snapc);958963 /*959964 * queue for writeback, and wait for snapc to960965 * be writeable or written961966 */962962- snapc = ceph_get_snap_context((void *)page->private);967967+ snapc = ceph_get_snap_context(snapc);963968 unlock_page(page);964969 ceph_queue_writeback(inode);965970 r = wait_event_interruptible(ci->i_cap_wq,···970973 return r;971974 return -EAGAIN;972975 }976976+ ceph_put_snap_context(oldest);973977974978 /* yay, writeable, do it now (without dropping page lock) */975979 dout(" page %p snapc %p not current, but oldest\n",
+32-10
fs/ceph/caps.c
···12051205 if (capsnap->dirty_pages || capsnap->writing)12061206 continue;1207120712081208+ /*12091209+ * if cap writeback already occurred, we should have dropped12101210+ * the capsnap in ceph_put_wrbuffer_cap_refs.12111211+ */12121212+ BUG_ON(capsnap->dirty == 0);12131213+12081214 /* pick mds, take s_mutex */12091215 mds = __ceph_get_cap_mds(ci, &mseq);12101216 if (session && session->s_mds != mds) {···21242118 }21252119 spin_unlock(&inode->i_lock);2126212021272127- dout("put_cap_refs %p had %s %s\n", inode, ceph_cap_string(had),21282128- last ? "last" : "");21212121+ dout("put_cap_refs %p had %s%s%s\n", inode, ceph_cap_string(had),21222122+ last ? " last" : "", put ? " put" : "");2129212321302124 if (last && !flushsnaps)21312125 ceph_check_caps(ci, 0, NULL);···21492143{21502144 struct inode *inode = &ci->vfs_inode;21512145 int last = 0;21522152- int last_snap = 0;21462146+ int complete_capsnap = 0;21472147+ int drop_capsnap = 0;21532148 int found = 0;21542149 struct ceph_cap_snap *capsnap = NULL;21552150···21732166 list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {21742167 if (capsnap->context == snapc) {21752168 found = 1;21762176- capsnap->dirty_pages -= nr;21772177- last_snap = !capsnap->dirty_pages;21782169 break;21792170 }21802171 }21812172 BUG_ON(!found);21732173+ capsnap->dirty_pages -= nr;21742174+ if (capsnap->dirty_pages == 0) {21752175+ complete_capsnap = 1;21762176+ if (capsnap->dirty == 0)21772177+ /* cap writeback completed before we created21782178+ * the cap_snap; no FLUSHSNAP is needed */21792179+ drop_capsnap = 1;21802180+ }21822181 dout("put_wrbuffer_cap_refs on %p cap_snap %p "21832183- " snap %lld %d/%d -> %d/%d %s%s\n",21822182+ " snap %lld %d/%d -> %d/%d %s%s%s\n",21842183 inode, capsnap, capsnap->context->seq,21852184 ci->i_wrbuffer_ref+nr, capsnap->dirty_pages + nr,21862185 ci->i_wrbuffer_ref, capsnap->dirty_pages,21872186 last ? " (wrbuffer last)" : "",21882188- last_snap ? " (capsnap last)" : "");21872187+ complete_capsnap ? " (complete capsnap)" : "",21882188+ drop_capsnap ? " (drop capsnap)" : "");21892189+ if (drop_capsnap) {21902190+ ceph_put_snap_context(capsnap->context);21912191+ list_del(&capsnap->ci_item);21922192+ list_del(&capsnap->flushing_item);21932193+ ceph_put_cap_snap(capsnap);21942194+ }21892195 }2190219621912197 spin_unlock(&inode->i_lock);···22062186 if (last) {22072187 ceph_check_caps(ci, CHECK_CAPS_AUTHONLY, NULL);22082188 iput(inode);22092209- } else if (last_snap) {21892189+ } else if (complete_capsnap) {22102190 ceph_flush_snaps(ci);22112191 wake_up(&ci->i_cap_wq);22122192 }21932193+ if (drop_capsnap)21942194+ iput(inode);22132195}2214219622152197/*···24872465 break;24882466 }24892467 WARN_ON(capsnap->dirty_pages || capsnap->writing);24902490- dout(" removing cap_snap %p follows %lld\n",24912491- capsnap, follows);24682468+ dout(" removing %p cap_snap %p follows %lld\n",24692469+ inode, capsnap, follows);24922470 ceph_put_snap_context(capsnap->context);24932471 list_del(&capsnap->ci_item);24942472 list_del(&capsnap->flushing_item);
···1294129412951295 /* Initialise the client representation from the mount data */12961296 server->flags = data->flags;12971297- server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR;12971297+ server->caps |= NFS_CAP_ATOMIC_OPEN|NFS_CAP_CHANGE_ATTR|12981298+ NFS_CAP_POSIX_LOCK;12981299 server->options = data->options;1299130013001301 /* Get a client record */
···3333 Note that this behavior is currently deprecated and may go away in3434 future. Please use notification via netlink socket instead.35353636+config QUOTA_DEBUG3737+ bool "Additional quota sanity checks"3838+ depends on QUOTA3939+ default n4040+ help4141+ If you say Y here, quota subsystem will perform some additional4242+ sanity checks of quota internal structures. If unsure, say N.4343+3644# Generic support for tree structured quota files. Selected when needed.3745config QUOTA_TREE3846 tristate
+16-12
fs/quota/dquot.c
···80808181#include <asm/uaccess.h>82828383-#define __DQUOT_PARANOIA8484-8583/*8684 * There are three quota SMP locks. dq_list_lock protects all lists with quotas8785 * and quota formats, dqstats structure containing statistics about the lists···693695694696 if (!dquot)695697 return;696696-#ifdef __DQUOT_PARANOIA698698+#ifdef CONFIG_QUOTA_DEBUG697699 if (!atomic_read(&dquot->dq_count)) {698700 printk("VFS: dqput: trying to free free dquot\n");699701 printk("VFS: device %s, dquot of %s %d\n",···746748 goto we_slept;747749 }748750 atomic_dec(&dquot->dq_count);749749-#ifdef __DQUOT_PARANOIA751751+#ifdef CONFIG_QUOTA_DEBUG750752 /* sanity check */751753 BUG_ON(!list_empty(&dquot->dq_free));752754#endif···843845 dquot = NULL;844846 goto out;845847 }846846-#ifdef __DQUOT_PARANOIA848848+#ifdef CONFIG_QUOTA_DEBUG847849 BUG_ON(!dquot->dq_sb); /* Has somebody invalidated entry under us? */848850#endif849851out:···872874static void add_dquot_ref(struct super_block *sb, int type)873875{874876 struct inode *inode, *old_inode = NULL;877877+#ifdef CONFIG_QUOTA_DEBUG875878 int reserved = 0;879879+#endif876880877881 spin_lock(&inode_lock);878882 list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {879883 if (inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE|I_NEW))880884 continue;885885+#ifdef CONFIG_QUOTA_DEBUG881886 if (unlikely(inode_get_rsv_space(inode) > 0))882887 reserved = 1;888888+#endif883889 if (!atomic_read(&inode->i_writecount))884890 continue;885891 if (!dqinit_needed(inode, type))···905903 spin_unlock(&inode_lock);906904 iput(old_inode);907905906906+#ifdef CONFIG_QUOTA_DEBUG908907 if (reserved) {909908 printk(KERN_WARNING "VFS (%s): Writes happened before quota"910909 " was turned on thus quota information is probably "911910 "inconsistent. Please run quotacheck(8).\n", sb->s_id);912911 }912912+#endif913913}914914915915/*···938934 inode->i_dquot[type] = NULL;939935 if (dquot) {940936 if (dqput_blocks(dquot)) {941941-#ifdef __DQUOT_PARANOIA937937+#ifdef CONFIG_QUOTA_DEBUG942938 if (atomic_read(&dquot->dq_count) != 1)943939 printk(KERN_WARNING "VFS: Adding dquot with dq_count %d to dispose list.\n", atomic_read(&dquot->dq_count));944940#endif···23262322 if (di->dqb_valid & QIF_SPACE) {23272323 dm->dqb_curspace = di->dqb_curspace - dm->dqb_rsvspace;23282324 check_blim = 1;23292329- __set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);23252325+ set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);23302326 }23312327 if (di->dqb_valid & QIF_BLIMITS) {23322328 dm->dqb_bsoftlimit = qbtos(di->dqb_bsoftlimit);23332329 dm->dqb_bhardlimit = qbtos(di->dqb_bhardlimit);23342330 check_blim = 1;23352335- __set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);23312331+ set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);23362332 }23372333 if (di->dqb_valid & QIF_INODES) {23382334 dm->dqb_curinodes = di->dqb_curinodes;23392335 check_ilim = 1;23402340- __set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);23362336+ set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);23412337 }23422338 if (di->dqb_valid & QIF_ILIMITS) {23432339 dm->dqb_isoftlimit = di->dqb_isoftlimit;23442340 dm->dqb_ihardlimit = di->dqb_ihardlimit;23452341 check_ilim = 1;23462346- __set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);23422342+ set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);23472343 }23482344 if (di->dqb_valid & QIF_BTIME) {23492345 dm->dqb_btime = di->dqb_btime;23502346 check_blim = 1;23512351- __set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);23472347+ set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);23522348 }23532349 if (di->dqb_valid & QIF_ITIME) {23542350 dm->dqb_itime = di->dqb_itime;23552351 check_ilim = 1;23562356- __set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);23522352+ set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);23572353 }2358235423592355 if (check_blim) {
···820820 * call into reclaim to find it in a clean state instead of waiting for821821 * it now. We also don't return errors here - if the error is transient822822 * then the next reclaim pass will flush the inode, and if the error823823- * is permanent then the next sync reclaim will relcaim the inode and823823+ * is permanent then the next sync reclaim will reclaim the inode and824824 * pass on the error.825825 */826826- if (error && !XFS_FORCED_SHUTDOWN(ip->i_mount)) {826826+ if (error && error != EAGAIN && !XFS_FORCED_SHUTDOWN(ip->i_mount)) {827827 xfs_fs_cmn_err(CE_WARN, ip->i_mount,828828 "inode 0x%llx background reclaim flush failed with %d",829829 (long long)ip->i_ino, error);
+26-12
fs/xfs/xfs_log.c
···745745746746/*747747 * Determine if we have a transaction that has gone to disk748748- * that needs to be covered. Log activity needs to be idle (no AIL and749749- * nothing in the iclogs). And, we need to be in the right state indicating750750- * something has gone out.748748+ * that needs to be covered. To begin the transition to the idle state749749+ * firstly the log needs to be idle (no AIL and nothing in the iclogs).750750+ * If we are then in a state where covering is needed, the caller is informed751751+ * that dummy transactions are required to move the log into the idle state.752752+ *753753+ * Because this is called as part of the sync process, we should also indicate754754+ * that dummy transactions should be issued in anything but the covered or755755+ * idle states. This ensures that the log tail is accurately reflected in756756+ * the log at the end of the sync, hence if a crash occurrs avoids replay757757+ * of transactions where the metadata is already on disk.751758 */752759int753760xfs_log_need_covered(xfs_mount_t *mp)···766759 return 0;767760768761 spin_lock(&log->l_icloglock);769769- if (((log->l_covered_state == XLOG_STATE_COVER_NEED) ||770770- (log->l_covered_state == XLOG_STATE_COVER_NEED2))771771- && !xfs_trans_ail_tail(log->l_ailp)772772- && xlog_iclogs_empty(log)) {773773- if (log->l_covered_state == XLOG_STATE_COVER_NEED)774774- log->l_covered_state = XLOG_STATE_COVER_DONE;775775- else {776776- ASSERT(log->l_covered_state == XLOG_STATE_COVER_NEED2);777777- log->l_covered_state = XLOG_STATE_COVER_DONE2;762762+ switch (log->l_covered_state) {763763+ case XLOG_STATE_COVER_DONE:764764+ case XLOG_STATE_COVER_DONE2:765765+ case XLOG_STATE_COVER_IDLE:766766+ break;767767+ case XLOG_STATE_COVER_NEED:768768+ case XLOG_STATE_COVER_NEED2:769769+ if (!xfs_trans_ail_tail(log->l_ailp) &&770770+ xlog_iclogs_empty(log)) {771771+ if (log->l_covered_state == XLOG_STATE_COVER_NEED)772772+ log->l_covered_state = XLOG_STATE_COVER_DONE;773773+ else774774+ log->l_covered_state = XLOG_STATE_COVER_DONE2;778775 }776776+ /* FALLTHRU */777777+ default:779778 needed = 1;779779+ break;780780 }781781 spin_unlock(&log->l_icloglock);782782 return needed;
···11/*22 * Char device interface.33 *44- * Copyright (C) 2005-2006 Kristian Hoegsberg <krh@bitplanet.net>44+ * Copyright (C) 2005-2007 Kristian Hoegsberg <krh@bitplanet.net>55 *66- * This program is free software; you can redistribute it and/or modify77- * it under the terms of the GNU General Public License as published by88- * the Free Software Foundation; either version 2 of the License, or99- * (at your option) any later version.66+ * Permission is hereby granted, free of charge, to any person obtaining a77+ * copy of this software and associated documentation files (the "Software"),88+ * to deal in the Software without restriction, including without limitation99+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,1010+ * and/or sell copies of the Software, and to permit persons to whom the1111+ * Software is furnished to do so, subject to the following conditions:1012 *1111- * This program is distributed in the hope that it will be useful,1212- * but WITHOUT ANY WARRANTY; without even the implied warranty of1313- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1414- * GNU General Public License for more details.1313+ * The above copyright notice and this permission notice (including the next1414+ * paragraph) shall be included in all copies or substantial portions of the1515+ * Software.1516 *1616- * You should have received a copy of the GNU General Public License1717- * along with this program; if not, write to the Free Software Foundation,1818- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.1717+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1818+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1919+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL2020+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR2121+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,2222+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER2323+ * DEALINGS IN THE SOFTWARE.1924 */20252126#ifndef _LINUX_FIREWIRE_CDEV_H···443438 * @type: %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE444439 * @header_size: Header size to strip for receive contexts445440 * @channel: Channel to bind to446446- * @speed: Speed to transmit at441441+ * @speed: Speed for transmit contexts447442 * @closure: To be returned in &fw_cdev_event_iso_interrupt448443 * @handle: Handle to context, written back by kernel449444 *···455450 *456451 * If a context was successfully created, the kernel writes back a handle to the457452 * context, which must be passed in for subsequent operations on that context.453453+ *454454+ * For receive contexts, @header_size must be at least 4 and must be a multiple455455+ * of 4.458456 *459457 * Note that the effect of a @header_size > 4 depends on460458 * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt.···489481 *490482 * &struct fw_cdev_iso_packet is used to describe isochronous packet queues.491483 *492492- * Use the FW_CDEV_ISO_ macros to fill in @control. The sy and tag fields are493493- * specified by IEEE 1394a and IEC 61883.484484+ * Use the FW_CDEV_ISO_ macros to fill in @control.494485 *495495- * FIXME - finish this documentation486486+ * For transmit packets, the header length must be a multiple of 4 and specifies487487+ * the numbers of bytes in @header that will be prepended to the packet's488488+ * payload; these bytes are copied into the kernel and will not be accessed489489+ * after the ioctl has returned. The sy and tag fields are copied to the iso490490+ * packet header (these fields are specified by IEEE 1394a and IEC 61883-1).491491+ * The skip flag specifies that no packet is to be sent in a frame; when using492492+ * this, all other fields except the interrupt flag must be zero.493493+ *494494+ * For receive packets, the header length must be a multiple of the context's495495+ * header size; if the header length is larger than the context's header size,496496+ * multiple packets are queued for this entry. The sy and tag fields are497497+ * ignored. If the sync flag is set, the context drops all packets until498498+ * a packet with a matching sy field is received (the sync value to wait for is499499+ * specified in the &fw_cdev_start_iso structure). The payload length defines500500+ * how many payload bytes can be received for one packet (in addition to payload501501+ * quadlets that have been defined as headers and are stripped and returned in502502+ * the &fw_cdev_event_iso_interrupt structure). If more bytes are received, the503503+ * additional bytes are dropped. If less bytes are received, the remaining504504+ * bytes in this part of the payload buffer will not be written to, not even by505505+ * the next packet, i.e., packets received in consecutive frames will not506506+ * necessarily be consecutive in memory. If an entry has queued multiple507507+ * packets, the payload length is divided equally among them.508508+ *509509+ * When a packet with the interrupt flag set has been completed, the510510+ * &fw_cdev_event_iso_interrupt event will be sent. An entry that has queued511511+ * multiple receive packets is completed when its last packet is completed.496512 */497513struct fw_cdev_iso_packet {498514 __u32 control;···533501 * Queue a number of isochronous packets for reception or transmission.534502 * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs,535503 * which describe how to transmit from or receive into a contiguous region536536- * of a mmap()'ed payload buffer. As part of the packet descriptors,504504+ * of a mmap()'ed payload buffer. As part of transmit packet descriptors,537505 * a series of headers can be supplied, which will be prepended to the538506 * payload during DMA.539507 *···652620 * instead of allocated.653621 * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.654622 *655655- * To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources656656- * for the lifetime of the fd or handle.623623+ * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources624624+ * for the lifetime of the fd or @handle.657625 * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources658626 * for the duration of a bus generation.659627 *
+27-2
include/linux/firewire-constants.h
···11+/*22+ * IEEE 1394 constants.33+ *44+ * Copyright (C) 2005-2007 Kristian Hoegsberg <krh@bitplanet.net>55+ *66+ * Permission is hereby granted, free of charge, to any person obtaining a77+ * copy of this software and associated documentation files (the "Software"),88+ * to deal in the Software without restriction, including without limitation99+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,1010+ * and/or sell copies of the Software, and to permit persons to whom the1111+ * Software is furnished to do so, subject to the following conditions:1212+ *1313+ * The above copyright notice and this permission notice (including the next1414+ * paragraph) shall be included in all copies or substantial portions of the1515+ * Software.1616+ *1717+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1818+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1919+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL2020+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR2121+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,2222+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER2323+ * DEALINGS IN THE SOFTWARE.2424+ */2525+126#ifndef _LINUX_FIREWIRE_CONSTANTS_H227#define _LINUX_FIREWIRE_CONSTANTS_H328···4621#define EXTCODE_WRAP_ADD 0x64722#define EXTCODE_VENDOR_DEPENDENT 0x748234949-/* Juju specific tcodes */2424+/* Linux firewire-core (Juju) specific tcodes */5025#define TCODE_LOCK_MASK_SWAP (0x10 | EXTCODE_MASK_SWAP)5126#define TCODE_LOCK_COMPARE_SWAP (0x10 | EXTCODE_COMPARE_SWAP)5227#define TCODE_LOCK_FETCH_ADD (0x10 | EXTCODE_FETCH_ADD)···6136#define RCODE_TYPE_ERROR 0x66237#define RCODE_ADDRESS_ERROR 0x763386464-/* Juju specific rcodes */3939+/* Linux firewire-core (Juju) specific rcodes */6540#define RCODE_SEND_ERROR 0x106641#define RCODE_CANCELLED 0x116742#define RCODE_BUSY 0x12
+2
include/linux/input/matrix_keypad.h
···4444 * @active_low: gpio polarity4545 * @wakeup: controls whether the device should be set up as wakeup4646 * source4747+ * @no_autorepeat: disable key autorepeat4748 *4849 * This structure represents platform-specific data that use used by4950 * matrix_keypad driver to perform proper initialization.···65646665 bool active_low;6766 bool wakeup;6767+ bool no_autorepeat;6868};69697070/**
+1
include/linux/nfs_fs_sb.h
···176176#define NFS_CAP_ATIME (1U << 11)177177#define NFS_CAP_CTIME (1U << 12)178178#define NFS_CAP_MTIME (1U << 13)179179+#define NFS_CAP_POSIX_LOCK (1U << 14)179180180181181182/* maximum number of slots to use */
+56-9
include/linux/rcupdate.h
···101101# define rcu_read_release_sched() \102102 lock_release(&rcu_sched_lock_map, 1, _THIS_IP_)103103104104-static inline int debug_lockdep_rcu_enabled(void)105105-{106106- return likely(rcu_scheduler_active && debug_locks);107107-}104104+extern int debug_lockdep_rcu_enabled(void);108105109106/**110107 * rcu_read_lock_held - might we be in RCU read-side critical section?···192195193196/**194197 * rcu_dereference_check - rcu_dereference with debug checking198198+ * @p: The pointer to read, prior to dereferencing199199+ * @c: The conditions under which the dereference will take place195200 *196196- * Do an rcu_dereference(), but check that the context is correct.197197- * For example, rcu_dereference_check(gp, rcu_read_lock_held()) to198198- * ensure that the rcu_dereference_check() executes within an RCU199199- * read-side critical section. It is also possible to check for200200- * locks being held, for example, by using lockdep_is_held().201201+ * Do an rcu_dereference(), but check that the conditions under which the202202+ * dereference will take place are correct. Typically the conditions indicate203203+ * the various locking conditions that should be held at that point. The check204204+ * should return true if the conditions are satisfied.205205+ *206206+ * For example:207207+ *208208+ * bar = rcu_dereference_check(foo->bar, rcu_read_lock_held() ||209209+ * lockdep_is_held(&foo->lock));210210+ *211211+ * could be used to indicate to lockdep that foo->bar may only be dereferenced212212+ * if either the RCU read lock is held, or that the lock required to replace213213+ * the bar struct at foo->bar is held.214214+ *215215+ * Note that the list of conditions may also include indications of when a lock216216+ * need not be held, for example during initialisation or destruction of the217217+ * target struct:218218+ *219219+ * bar = rcu_dereference_check(foo->bar, rcu_read_lock_held() ||220220+ * lockdep_is_held(&foo->lock) ||221221+ * atomic_read(&foo->usage) == 0);201222 */202223#define rcu_dereference_check(p, c) \203224 ({ \···224209 rcu_dereference_raw(p); \225210 })226211212212+/**213213+ * rcu_dereference_protected - fetch RCU pointer when updates prevented214214+ *215215+ * Return the value of the specified RCU-protected pointer, but omit216216+ * both the smp_read_barrier_depends() and the ACCESS_ONCE(). This217217+ * is useful in cases where update-side locks prevent the value of the218218+ * pointer from changing. Please note that this primitive does -not-219219+ * prevent the compiler from repeating this reference or combining it220220+ * with other references, so it should not be used without protection221221+ * of appropriate locks.222222+ */223223+#define rcu_dereference_protected(p, c) \224224+ ({ \225225+ if (debug_lockdep_rcu_enabled() && !(c)) \226226+ lockdep_rcu_dereference(__FILE__, __LINE__); \227227+ (p); \228228+ })229229+227230#else /* #ifdef CONFIG_PROVE_RCU */228231229232#define rcu_dereference_check(p, c) rcu_dereference_raw(p)233233+#define rcu_dereference_protected(p, c) (p)230234231235#endif /* #else #ifdef CONFIG_PROVE_RCU */236236+237237+/**238238+ * rcu_access_pointer - fetch RCU pointer with no dereferencing239239+ *240240+ * Return the value of the specified RCU-protected pointer, but omit the241241+ * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is useful242242+ * when the value of this pointer is accessed, but the pointer is not243243+ * dereferenced, for example, when testing an RCU-protected pointer against244244+ * NULL. This may also be used in cases where update-side locks prevent245245+ * the value of the pointer from changing, but rcu_dereference_protected()246246+ * is a lighter-weight primitive for this use case.247247+ */248248+#define rcu_access_pointer(p) ACCESS_ONCE(p)232249233250/**234251 * rcu_read_lock - mark the beginning of an RCU read-side critical section.
+1-1
kernel/power/user.c
···420420 * User space encodes device types as two-byte values,421421 * so we need to recode them422422 */423423- swdev = old_decode_dev(swap_area.dev);423423+ swdev = new_decode_dev(swap_area.dev);424424 if (swdev) {425425 offset = swap_area.offset;426426 data->swap = swap_type_of(swdev, offset, NULL);
+7
kernel/rcupdate.c
···69697070#ifdef CONFIG_DEBUG_LOCK_ALLOC71717272+int debug_lockdep_rcu_enabled(void)7373+{7474+ return rcu_scheduler_active && debug_locks &&7575+ current->lockdep_recursion == 0;7676+}7777+EXPORT_SYMBOL_GPL(debug_lockdep_rcu_enabled);7878+7279/**7380 * rcu_read_lock_bh_held - might we be in RCU-bh read-side critical section?7481 *
+1-1
lib/Kconfig.debug
···356356config DEBUG_KMEMLEAK357357 bool "Kernel memory leak detector"358358 depends on DEBUG_KERNEL && EXPERIMENTAL && !MEMORY_HOTPLUG && \359359- (X86 || ARM || PPC || S390 || SUPERH || MICROBLAZE)359359+ (X86 || ARM || PPC || S390 || SPARC64 || SUPERH || MICROBLAZE)360360361361 select DEBUG_FS if SYSFS362362 select STACKTRACE if STACKTRACE_SUPPORT
+1-1
lib/dma-debug.c
···570570 * Now parse out the first token and use it as the name for the571571 * driver to filter for.572572 */573573- for (i = 0; i < NAME_MAX_LEN; ++i) {573573+ for (i = 0; i < NAME_MAX_LEN - 1; ++i) {574574 current_driver_name[i] = buf[i];575575 if (isspace(buf[i]) || buf[i] == ' ' || buf[i] == 0)576576 break;
+5-5
lib/vsprintf.c
···408408};409409410410struct printf_spec {411411- u16 type;412412- s16 field_width; /* width of output field */411411+ u8 type; /* format_type enum */413412 u8 flags; /* flags to number() */414414- u8 base;415415- s8 precision; /* # of digits/chars */416416- u8 qualifier;413413+ u8 base; /* number base, 8, 10 or 16 only */414414+ u8 qualifier; /* number qualifier, one of 'hHlLtzZ' */415415+ s16 field_width; /* width of output field */416416+ s16 precision; /* # of digits/chars */417417};418418419419static char *number(char *buf, char *end, unsigned long long num,
+70-40
mm/mmap.c
···507507 struct address_space *mapping = NULL;508508 struct prio_tree_root *root = NULL;509509 struct file *file = vma->vm_file;510510- struct anon_vma *anon_vma = NULL;511510 long adjust_next = 0;512511 int remove_next = 0;513512514513 if (next && !insert) {514514+ struct vm_area_struct *exporter = NULL;515515+515516 if (end >= next->vm_end) {516517 /*517518 * vma expands, overlapping all the next, and···520519 */521520again: remove_next = 1 + (end > next->vm_end);522521 end = next->vm_end;523523- anon_vma = next->anon_vma;522522+ exporter = next;524523 importer = vma;525524 } else if (end > next->vm_start) {526525 /*···528527 * mprotect case 5 shifting the boundary up.529528 */530529 adjust_next = (end - next->vm_start) >> PAGE_SHIFT;531531- anon_vma = next->anon_vma;530530+ exporter = next;532531 importer = vma;533532 } else if (end < vma->vm_end) {534533 /*···537536 * mprotect case 4 shifting the boundary down.538537 */539538 adjust_next = - ((vma->vm_end - end) >> PAGE_SHIFT);540540- anon_vma = next->anon_vma;539539+ exporter = vma;541540 importer = next;542541 }543543- }544542545545- /*546546- * When changing only vma->vm_end, we don't really need anon_vma lock.547547- */548548- if (vma->anon_vma && (insert || importer || start != vma->vm_start))549549- anon_vma = vma->anon_vma;550550- if (anon_vma) {551543 /*552544 * Easily overlooked: when mprotect shifts the boundary,553545 * make sure the expanding vma has anon_vma set if the554546 * shrinking vma had, to cover any anon pages imported.555547 */556556- if (importer && !importer->anon_vma) {557557- /* Block reverse map lookups until things are set up. */558558- if (anon_vma_clone(importer, vma)) {548548+ if (exporter && exporter->anon_vma && !importer->anon_vma) {549549+ if (anon_vma_clone(importer, exporter))559550 return -ENOMEM;560560- }561561- importer->anon_vma = anon_vma;551551+ importer->anon_vma = exporter->anon_vma;562552 }563553 }564554···817825}818826819827/*828828+ * Rough compatbility check to quickly see if it's even worth looking829829+ * at sharing an anon_vma.830830+ *831831+ * They need to have the same vm_file, and the flags can only differ832832+ * in things that mprotect may change.833833+ *834834+ * NOTE! The fact that we share an anon_vma doesn't _have_ to mean that835835+ * we can merge the two vma's. For example, we refuse to merge a vma if836836+ * there is a vm_ops->close() function, because that indicates that the837837+ * driver is doing some kind of reference counting. But that doesn't838838+ * really matter for the anon_vma sharing case.839839+ */840840+static int anon_vma_compatible(struct vm_area_struct *a, struct vm_area_struct *b)841841+{842842+ return a->vm_end == b->vm_start &&843843+ mpol_equal(vma_policy(a), vma_policy(b)) &&844844+ a->vm_file == b->vm_file &&845845+ !((a->vm_flags ^ b->vm_flags) & ~(VM_READ|VM_WRITE|VM_EXEC)) &&846846+ b->vm_pgoff == a->vm_pgoff + ((b->vm_start - a->vm_start) >> PAGE_SHIFT);847847+}848848+849849+/*850850+ * Do some basic sanity checking to see if we can re-use the anon_vma851851+ * from 'old'. The 'a'/'b' vma's are in VM order - one of them will be852852+ * the same as 'old', the other will be the new one that is trying853853+ * to share the anon_vma.854854+ *855855+ * NOTE! This runs with mm_sem held for reading, so it is possible that856856+ * the anon_vma of 'old' is concurrently in the process of being set up857857+ * by another page fault trying to merge _that_. But that's ok: if it858858+ * is being set up, that automatically means that it will be a singleton859859+ * acceptable for merging, so we can do all of this optimistically. But860860+ * we do that ACCESS_ONCE() to make sure that we never re-load the pointer.861861+ *862862+ * IOW: that the "list_is_singular()" test on the anon_vma_chain only863863+ * matters for the 'stable anon_vma' case (ie the thing we want to avoid864864+ * is to return an anon_vma that is "complex" due to having gone through865865+ * a fork).866866+ *867867+ * We also make sure that the two vma's are compatible (adjacent,868868+ * and with the same memory policies). That's all stable, even with just869869+ * a read lock on the mm_sem.870870+ */871871+static struct anon_vma *reusable_anon_vma(struct vm_area_struct *old, struct vm_area_struct *a, struct vm_area_struct *b)872872+{873873+ if (anon_vma_compatible(a, b)) {874874+ struct anon_vma *anon_vma = ACCESS_ONCE(old->anon_vma);875875+876876+ if (anon_vma && list_is_singular(&old->anon_vma_chain))877877+ return anon_vma;878878+ }879879+ return NULL;880880+}881881+882882+/*820883 * find_mergeable_anon_vma is used by anon_vma_prepare, to check821884 * neighbouring vmas for a suitable anon_vma, before it goes off822885 * to allocate a new anon_vma. It checks because a repetitive···881834 */882835struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *vma)883836{837837+ struct anon_vma *anon_vma;884838 struct vm_area_struct *near;885885- unsigned long vm_flags;886839887840 near = vma->vm_next;888841 if (!near)889842 goto try_prev;890843891891- /*892892- * Since only mprotect tries to remerge vmas, match flags893893- * which might be mprotected into each other later on.894894- * Neither mlock nor madvise tries to remerge at present,895895- * so leave their flags as obstructing a merge.896896- */897897- vm_flags = vma->vm_flags & ~(VM_READ|VM_WRITE|VM_EXEC);898898- vm_flags |= near->vm_flags & (VM_READ|VM_WRITE|VM_EXEC);899899-900900- if (near->anon_vma && vma->vm_end == near->vm_start &&901901- mpol_equal(vma_policy(vma), vma_policy(near)) &&902902- can_vma_merge_before(near, vm_flags,903903- NULL, vma->vm_file, vma->vm_pgoff +904904- ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT)))905905- return near->anon_vma;844844+ anon_vma = reusable_anon_vma(near, vma, near);845845+ if (anon_vma)846846+ return anon_vma;906847try_prev:907848 /*908849 * It is potentially slow to have to call find_vma_prev here.···903868 if (!near)904869 goto none;905870906906- vm_flags = vma->vm_flags & ~(VM_READ|VM_WRITE|VM_EXEC);907907- vm_flags |= near->vm_flags & (VM_READ|VM_WRITE|VM_EXEC);908908-909909- if (near->anon_vma && near->vm_end == vma->vm_start &&910910- mpol_equal(vma_policy(near), vma_policy(vma)) &&911911- can_vma_merge_after(near, vm_flags,912912- NULL, vma->vm_file, vma->vm_pgoff))913913- return near->anon_vma;871871+ anon_vma = reusable_anon_vma(near, near, vma);872872+ if (anon_vma)873873+ return anon_vma;914874none:915875 /*916876 * There's no absolute need to look only at touching neighbours:
+20-4
mm/rmap.c
···182182{183183 struct anon_vma_chain *avc, *pavc;184184185185- list_for_each_entry(pavc, &src->anon_vma_chain, same_vma) {185185+ list_for_each_entry_reverse(pavc, &src->anon_vma_chain, same_vma) {186186 avc = anon_vma_chain_alloc();187187 if (!avc)188188 goto enomem_failure;···730730 * @page: the page to add the mapping to731731 * @vma: the vm area in which the mapping is added732732 * @address: the user virtual address mapped733733+ * @exclusive: the page is exclusively owned by the current process733734 */734735static void __page_set_anon_rmap(struct page *page,735735- struct vm_area_struct *vma, unsigned long address)736736+ struct vm_area_struct *vma, unsigned long address, int exclusive)736737{737738 struct anon_vma *anon_vma = vma->anon_vma;738739739740 BUG_ON(!anon_vma);741741+742742+ /*743743+ * If the page isn't exclusively mapped into this vma,744744+ * we must use the _oldest_ possible anon_vma for the745745+ * page mapping!746746+ *747747+ * So take the last AVC chain entry in the vma, which is748748+ * the deepest ancestor, and use the anon_vma from that.749749+ */750750+ if (!exclusive) {751751+ struct anon_vma_chain *avc;752752+ avc = list_entry(vma->anon_vma_chain.prev, struct anon_vma_chain, same_vma);753753+ anon_vma = avc->anon_vma;754754+ }755755+740756 anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;741757 page->mapping = (struct address_space *) anon_vma;742758 page->index = linear_page_index(vma, address);···807791 VM_BUG_ON(!PageLocked(page));808792 VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end);809793 if (first)810810- __page_set_anon_rmap(page, vma, address);794794+ __page_set_anon_rmap(page, vma, address, 0);811795 else812796 __page_check_anon_rmap(page, vma, address);813797}···829813 SetPageSwapBacked(page);830814 atomic_set(&page->_mapcount, 0); /* increment count (starts at -1) */831815 __inc_zone_page_state(page, NR_ANON_PAGES);832832- __page_set_anon_rmap(page, vma, address);816816+ __page_set_anon_rmap(page, vma, address, 1);833817 if (page_evictable(page, vma))834818 lru_cache_add_lru(page, LRU_ACTIVE_ANON);835819 else
+1-1
net/bridge/br_multicast.c
···727727 group = grec->grec_mca;728728 type = grec->grec_type;729729730730- len += grec->grec_nsrcs * 4;730730+ len += ntohs(grec->grec_nsrcs) * 4;731731 if (!pskb_may_pull(skb, len))732732 return -EINVAL;733733
+6-2
net/core/dev.c
···20152015 if (dev->real_num_tx_queues > 1)20162016 queue_index = skb_tx_hash(dev, skb);2017201720182018- if (sk && rcu_dereference_check(sk->sk_dst_cache, 1))20192019- sk_tx_queue_set(sk, queue_index);20182018+ if (sk) {20192019+ struct dst_entry *dst = rcu_dereference_check(sk->sk_dst_cache, 1);20202020+20212021+ if (dst && skb_dst(skb) == dst)20222022+ sk_tx_queue_set(sk, queue_index);20232023+ }20202024 }20212025 }20222026
···10181018 skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);1019101910201020 t1 = (struct tcphdr *) skb_push(buff, tot_len);10211021- skb_reset_transport_header(skb);10211021+ skb_reset_transport_header(buff);1022102210231023 /* Swap the send and the receive. */10241024 memset(t1, 0, sizeof(*t1));
-1
net/mac80211/agg-tx.c
···184184 HT_AGG_STATE_REQ_STOP_BA_MSK)) !=185185 HT_ADDBA_REQUESTED_MSK) {186186 spin_unlock_bh(&sta->lock);187187- *state = HT_AGG_STATE_IDLE;188187#ifdef CONFIG_MAC80211_HT_DEBUG189188 printk(KERN_DEBUG "timer expired on tid %d but we are not "190189 "(or no longer) expecting addBA response there",
···22282228 case SIOCGIFDSTADDR:22292229 case SIOCSIFDSTADDR:22302230 case SIOCSIFFLAGS:22312231- if (!net_eq(sock_net(sk), &init_net))22322232- return -ENOIOCTLCMD;22332231 return inet_dgram_ops.ioctl(sock, cmd, arg);22342232#endif22352233
+4-1
net/sunrpc/xprtrdma/svc_rdma_transport.c
···679679 int ret;680680681681 dprintk("svcrdma: Creating RDMA socket\n");682682-682682+ if (sa->sa_family != AF_INET) {683683+ dprintk("svcrdma: Address family %d is not supported.\n", sa->sa_family);684684+ return ERR_PTR(-EAFNOSUPPORT);685685+ }683686 cma_xprt = rdma_create_xprt(serv, 1);684687 if (!cma_xprt)685688 return ERR_PTR(-ENOMEM);
···986986 DEFINE_WAIT(wait);987987 long timeout = msecs_to_jiffies(50);988988989989+ if (ep->umidi->disconnected)990990+ return;989991 /*990992 * The substream buffer is empty, but some data might still be in the991993 * currently active URBs, so we have to wait for those to complete.···11251123 * Frees an output endpoint.11261124 * May be called when ep hasn't been initialized completely.11271125 */11281128-static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint* ep)11261126+static void snd_usbmidi_out_endpoint_clear(struct snd_usb_midi_out_endpoint *ep)11291127{11301128 unsigned int i;1131112911321130 for (i = 0; i < OUTPUT_URBS; ++i)11331133- if (ep->urbs[i].urb)11311131+ if (ep->urbs[i].urb) {11341132 free_urb_and_buffer(ep->umidi, ep->urbs[i].urb,11351133 ep->max_transfer);11341134+ ep->urbs[i].urb = NULL;11351135+ }11361136+}11371137+11381138+static void snd_usbmidi_out_endpoint_delete(struct snd_usb_midi_out_endpoint *ep)11391139+{11401140+ snd_usbmidi_out_endpoint_clear(ep);11361141 kfree(ep);11371142}11381143···12711262 usb_kill_urb(ep->out->urbs[j].urb);12721263 if (umidi->usb_protocol_ops->finish_out_endpoint)12731264 umidi->usb_protocol_ops->finish_out_endpoint(ep->out);12651265+ ep->out->active_urbs = 0;12661266+ if (ep->out->drain_urbs) {12671267+ ep->out->drain_urbs = 0;12681268+ wake_up(&ep->out->drain_wait);12691269+ }12741270 }12751271 if (ep->in)12761272 for (j = 0; j < INPUT_URBS; ++j)12771273 usb_kill_urb(ep->in->urbs[j]);12781274 /* free endpoints here; later call can result in Oops */12791279- if (ep->out) {12801280- snd_usbmidi_out_endpoint_delete(ep->out);12811281- ep->out = NULL;12821282- }12751275+ if (ep->out)12761276+ snd_usbmidi_out_endpoint_clear(ep->out);12831277 if (ep->in) {12841278 snd_usbmidi_in_endpoint_delete(ep->in);12851279 ep->in = NULL;