aboutsummaryrefslogtreecommitdiffstats
path: root/target
Commit message (Expand)AuthorAgeFilesLines
* kernel: enable CONFIG_ADVISE_SYSCALLSRosen Penev2017-10-271-1/+1
* ar71xx: fix board.bin used by QCA9886 in Archer C58/C59/C60Henryk Heisig2017-10-271-0/+2
* ar71xx: Archer C58/C59/C60 fix qca9886 wireless interfaceHenryk Heisig2017-10-263-7/+9
* treewide: do not use IMG_PREFIX in Image/PrepareJonas Gorski2017-10-263-12/+12
* ramips: remove erroneous "wdt rst" DTS entriesKevin Darbyshire-Bryant2017-10-253-3/+3
* ipq806x: fix Zyxel NBG6817 WiFi buttonTolga Cakir2017-10-251-2/+3
* ar71xx: fix LED names for GL-AR150Paul Wassi2017-10-253-4/+12
* ar71xx: base-files: alphabetical reorderingPaul Wassi2017-10-257-98/+88
* mpc85xx: use image metadataMathias Kresin2017-10-252-92/+7
* mpc85xx: use the generic board detectMathias Kresin2017-10-257-53/+9
* mpc85xx: fix TL-WDR4900 v1 compatible stringMathias Kresin2017-10-252-2/+2
* mpc85xx: update HiveAP-330 dtsChris Blake2017-10-252-22/+6
* mpc85xx: cleanup kernel configMathias Kresin2017-10-253-17/+29
* mpc85xx: use new build code styleChris Blake2017-10-257-127/+74
* ramips: don't enable usb for the WT3020-4MMathias Kresin2017-10-252-9/+8
* ramips: fix default usb support for nexx wt3020-8MAlberto Bursi2017-10-251-0/+1
* lantiq: xway: rename nas0/ptm0 to dsl0Mathias Kresin2017-10-253-9/+2
* lantiq: match default adsl annex and firmwareMathias Kresin2017-10-251-2/+31
* lantiq: add missing default lan interfaceMathias Kresin2017-10-251-0/+2
* bcm53xx: Fix Generic profile descriptionFlorian Fainelli2017-10-241-2/+3
* orion: Switch to 4.9 kernelFlorian Fainelli2017-10-241-1/+1
* orion: Add support for 4.9 kernelFlorian Fainelli2017-10-246-0/+946
* uml: Switch to 4.9 kernelFlorian Fainelli2017-10-241-1/+1
* uml: Add 4.9 kernel patchesFlorian Fainelli2017-10-246-0/+646
* pending-4.9: 610-netfilter_match_bypass_default_check: fix 32bit compat layerHans Dedecker2017-10-241-4/+21
* pending-4.4: 610-netfilter_match_bypass_default_check: fix 32bit compat layerHans Dedecker2017-10-241-4/+21
* pending-3.18: 610-netfilter_match_bypass_default_check: fix 32bit compat layerHans Dedecker2017-10-241-4/+21
* ar71xx: re-enable 4k sectors for the mikrotik subtargetsFelix Fietkau2017-10-241-0/+1
* ar71xx: fix mikrotik routerboard nand driver issues with linux 4.9Felix Fietkau2017-10-243-27/+108
* ar71xx: fix secondary gpio controller base valuesFelix Fietkau2017-10-245-29/+29
* ar71xx: lzma loader use LTOJulien Dusser2017-10-241-3/+5
* ar71xx: fix lzma loader performance issuesJulien Dusser2017-10-241-0/+13
* config: set ARCH if powerpc64 is selected in the configurationFlorian Larysch2017-10-241-0/+1
* bcm53xx: Fix SmartRG SR400AC initramfs imageFlorian Fainelli2017-10-231-0/+2
* kernel: bump 4.9 to 4.9.58Stijn Tintel2017-10-238-215/+193
* brcm2708: restore /boot/config.txt before rebootStijn Tintel2017-10-232-0/+2
* ar71xx: deactivate some boards with too small kernel partitionsHauke Mehrtens2017-10-223-5/+2
* ar71xx: use kernel 4.9 by defaultHauke Mehrtens2017-10-221-1/+1
* at91: remove unused at91part driverHauke Mehrtens2017-10-221-122/+0
* at91: update to kernel 4.9Hauke Mehrtens2017-10-229-23/+26
* kernel: add config optionHauke Mehrtens2017-10-221-0/+1
* ar71xx: add support for TP-LINK Archer C7 v4Felix Fietkau2017-10-1911-2/+292
* ar71xx: add support for Nokia WI2A-AC200iFelix Fietkau2017-10-1914-0/+286
* brcm47xx: use kernel 4.9 by defaultHauke Mehrtens2017-10-181-1/+1
* kernel: fix ftrace support on 4.9Felix Fietkau2017-10-181-0/+27
* lantiq: ARV752DPW22: fix wireless mac addressMathias Kresin2017-10-181-0/+1
* lantiq: ARV752DPW22: set correct wireless led triggerMathias Kresin2017-10-181-0/+3
* omap: clean up configurationHauke Mehrtens2017-10-182-17/+1
* omap: Add support for kernel 4.9Hauke Mehrtens2017-10-184-1/+759
* kernel: bump 4.9 to 4.9.57Kevin Darbyshire-Bryant2017-10-1821-234/+250
ass="cm"> * @x: Value to copy to user space. * @ptr: Destination address, in user space. * * Context: User context only. This function may sleep. * * This macro copies a single simple value from kernel space to user * space. It supports simple types like char and int, but not larger * data types like structures or arrays. * * @ptr must have pointer-to-simple-variable type, and @x must be assignable * to the result of dereferencing @ptr. * * Returns zero on success, or -EFAULT on error. */ #define put_user(x,ptr) \ __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) /** * __get_user: - Get a simple variable from user space, with less checking. * @x: Variable to store result. * @ptr: Source address, in user space. * * Context: User context only. This function may sleep. * * This macro copies a single simple variable from user space to kernel * space. It supports simple types like char and int, but not larger * data types like structures or arrays. * * @ptr must have pointer-to-simple-variable type, and the result of * dereferencing @ptr must be assignable to @x without a cast. * * Caller must check the pointer with access_ok() before calling this * function. * * Returns zero on success, or -EFAULT on error. * On error, the variable @x is set to zero. */ #define __get_user(x,ptr) \ __get_user_nocheck((x),(ptr),sizeof(*(ptr))) /** * __put_user: - Write a simple value into user space, with less checking. * @x: Value to copy to user space. * @ptr: Destination address, in user space. * * Context: User context only. This function may sleep. * * This macro copies a single simple value from kernel space to user * space. It supports simple types like char and int, but not larger * data types like structures or arrays. * * @ptr must have pointer-to-simple-variable type, and @x must be assignable * to the result of dereferencing @ptr. * * Caller must check the pointer with access_ok() before calling this * function. * * Returns zero on success, or -EFAULT on error. */ #define __put_user(x,ptr) \ __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) #define __put_user_nocheck(x,ptr,size) \ ({ \ long __pu_err; \ __put_user_size((x),(ptr),(size),__pu_err,-EFAULT); \ __pu_err; \ }) #define __put_user_check(x,ptr,size) \ ({ \ long __pu_err = -EFAULT; \ __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ if (__addr_ok(__pu_addr)) \ __put_user_size((x),__pu_addr,(size),__pu_err,-EFAULT); \ __pu_err; \ }) #define __get_user_nocheck(x,ptr,size) \ ({ \ long __gu_err; \ __get_user_size((x),(ptr),(size),__gu_err,-EFAULT); \ __gu_err; \ }) #define __get_user_check(x,ptr,size) \ ({ \ long __gu_err; \ __typeof__(*(ptr)) __user *__gu_addr = (ptr); \ __get_user_size((x),__gu_addr,(size),__gu_err,-EFAULT); \ if (!__addr_ok(__gu_addr)) __gu_err = -EFAULT; \ __gu_err; \ }) struct __large_struct { unsigned long buf[100]; }; #define __m(x) (*(const struct __large_struct *)(x)) /* * Tell gcc we read from memory instead of writing: this is because * we do not write to any memory gcc knows about, so there are no * aliasing issues. */ #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \ __asm__ __volatile__( \ "1: mov"itype" %"rtype"1,%2\n" \ "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: mov %3,%0\n" \ " jmp 2b\n" \ ".previous\n" \ ".section __ex_table,\"a\"\n" \ " "__FIXUP_ALIGN"\n" \ " "__FIXUP_WORD" 1b,3b\n" \ ".previous" \ : "=r"(err) \ : ltype (x), "m"(__m(addr)), "i"(errret), "0"(err)) #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \ __asm__ __volatile__( \ "1: mov"itype" %2,%"rtype"1\n" \ "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: mov %3,%0\n" \ " xor"itype" %"rtype"1,%"rtype"1\n" \ " jmp 2b\n" \ ".previous\n" \ ".section __ex_table,\"a\"\n" \ " "__FIXUP_ALIGN"\n" \ " "__FIXUP_WORD" 1b,3b\n" \ ".previous" \ : "=r"(err), ltype (x) \ : "m"(__m(addr)), "i"(errret), "0"(err)) /** * __copy_to_user: - Copy a block of data into user space, with less checking * @to: Destination address, in user space. * @from: Source address, in kernel space. * @n: Number of bytes to copy. * * Context: User context only. This function may sleep. * * Copy data from kernel space to user space. Caller must check * the specified block with access_ok() before calling this function. * * Returns number of bytes that could not be copied. * On success, this will be zero. */ static always_inline unsigned long __copy_to_user(void __user *to, const void *from, unsigned long n) { if (__builtin_constant_p(n)) { unsigned long ret; switch (n) { case 1: __put_user_size(*(const u8 *)from, (u8 __user *)to, 1, ret, 1); return ret; case 2: __put_user_size(*(const u16 *)from, (u16 __user *)to, 2, ret, 2); return ret; case 4: __put_user_size(*(const u32 *)from, (u32 __user *)to, 4, ret, 4); return ret; case 8: __put_user_size(*(const u64 *)from, (u64 __user *)to, 8, ret, 8); return ret; } } return __copy_to_user_ll(to, from, n); } /** * __copy_from_user: - Copy a block of data from user space, with less checking * @to: Destination address, in kernel space. * @from: Source address, in user space. * @n: Number of bytes to copy. * * Context: User context only. This function may sleep. * * Copy data from user space to kernel space. Caller must check * the specified block with access_ok() before calling this function. * * Returns number of bytes that could not be copied. * On success, this will be zero. * * If some data could not be copied, this function will pad the copied * data to the requested size using zero bytes. */ static always_inline unsigned long __copy_from_user(void *to, const void __user *from, unsigned long n) { if (__builtin_constant_p(n)) { unsigned long ret; switch (n) { case 1: __get_user_size(*(u8 *)to, from, 1, ret, 1); return ret; case 2: __get_user_size(*(u16 *)to, from, 2, ret, 2); return ret; case 4: __get_user_size(*(u32 *)to, from, 4, ret, 4); return ret; case 8: __get_user_size(*(u64*)to, from, 8, ret, 8); return ret; } } return __copy_from_user_ll(to, from, n); } /* * The exception table consists of pairs of addresses: the first is the * address of an instruction that is allowed to fault, and the second is * the address at which the program should continue. No registers are * modified, so it is entirely up to the continuation code to figure out * what to do. * * All the routines below use bits of fixup code that are out of line * with the main instruction path. This means when everything is well, * we don't even have to jump over them. Further, they do not intrude * on our cache or tlb entries. */ struct exception_table_entry { unsigned long insn, fixup; }; extern unsigned long search_exception_table(unsigned long); extern void sort_exception_tables(void); #endif /* __X86_UACCESS_H__ */