Merge branches 'sh/urgent', 'sh/core', 'sh/clockevents', 'sh/asm-generic' and 'sh/trivial' into sh-fixes-for-linus
This commit is contained in:
commit
380622e9ff
3984 changed files with 219274 additions and 105297 deletions
|
@ -8,6 +8,7 @@ header-y += int-ll64.h
|
|||
header-y += ioctl.h
|
||||
header-y += ioctls.h
|
||||
header-y += ipcbuf.h
|
||||
header-y += kvm_para.h
|
||||
header-y += mman-common.h
|
||||
header-y += mman.h
|
||||
header-y += msgbuf.h
|
||||
|
|
|
@ -28,5 +28,9 @@
|
|||
#error Inconsistent word size. Check asm/bitsperlong.h
|
||||
#endif
|
||||
|
||||
#ifndef BITS_PER_LONG_LONG
|
||||
#define BITS_PER_LONG_LONG 64
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ASM_GENERIC_BITS_PER_LONG */
|
||||
|
|
|
@ -3,13 +3,15 @@
|
|||
|
||||
#ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT
|
||||
/*
|
||||
* These two functions are only for dma allocator.
|
||||
* These three functions are only for dma allocator.
|
||||
* Don't use them in device drivers.
|
||||
*/
|
||||
int dma_alloc_from_coherent(struct device *dev, ssize_t size,
|
||||
dma_addr_t *dma_handle, void **ret);
|
||||
int dma_release_from_coherent(struct device *dev, int order, void *vaddr);
|
||||
|
||||
int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma,
|
||||
void *cpu_addr, size_t size, int *ret);
|
||||
/*
|
||||
* Standard interface
|
||||
*/
|
||||
|
|
28
include/asm-generic/dma-contiguous.h
Normal file
28
include/asm-generic/dma-contiguous.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
#ifndef ASM_DMA_CONTIGUOUS_H
|
||||
#define ASM_DMA_CONTIGUOUS_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#ifdef CONFIG_CMA
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-contiguous.h>
|
||||
|
||||
static inline struct cma *dev_get_cma_area(struct device *dev)
|
||||
{
|
||||
if (dev && dev->cma_area)
|
||||
return dev->cma_area;
|
||||
return dma_contiguous_default_area;
|
||||
}
|
||||
|
||||
static inline void dev_set_cma_area(struct device *dev, struct cma *cma)
|
||||
{
|
||||
if (dev)
|
||||
dev->cma_area = cma;
|
||||
if (!dev || !dma_contiguous_default_area)
|
||||
dma_contiguous_default_area = cma;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -142,9 +142,9 @@ extern int __must_check gpiochip_reserve(int start, int ngpio);
|
|||
/* add/remove chips */
|
||||
extern int gpiochip_add(struct gpio_chip *chip);
|
||||
extern int __must_check gpiochip_remove(struct gpio_chip *chip);
|
||||
extern struct gpio_chip *gpiochip_find(const void *data,
|
||||
extern struct gpio_chip *gpiochip_find(void *data,
|
||||
int (*match)(struct gpio_chip *chip,
|
||||
const void *data));
|
||||
void *data));
|
||||
|
||||
|
||||
/* Always use the library code for GPIO management calls,
|
||||
|
@ -179,6 +179,8 @@ extern void gpio_free_array(const struct gpio *array, size_t num);
|
|||
|
||||
/* bindings for managed devices that want to request gpios */
|
||||
int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
|
||||
int devm_gpio_request_one(struct device *dev, unsigned gpio,
|
||||
unsigned long flags, const char *label);
|
||||
void devm_gpio_free(struct device *dev, unsigned int gpio);
|
||||
|
||||
#ifdef CONFIG_GPIO_SYSFS
|
||||
|
|
22
include/asm-generic/kvm_para.h
Normal file
22
include/asm-generic/kvm_para.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#ifndef _ASM_GENERIC_KVM_PARA_H
|
||||
#define _ASM_GENERIC_KVM_PARA_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
* This function is used by architectures that support kvm to avoid issuing
|
||||
* false soft lockup messages.
|
||||
*/
|
||||
static inline bool kvm_check_and_clear_guest_paused(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline unsigned int kvm_arch_para_features(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _KERNEL__ */
|
||||
|
||||
#endif
|
|
@ -158,9 +158,8 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm,
|
|||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_PMDP_SPLITTING_FLUSH
|
||||
extern pmd_t pmdp_splitting_flush(struct vm_area_struct *vma,
|
||||
unsigned long address,
|
||||
pmd_t *pmdp);
|
||||
extern void pmdp_splitting_flush(struct vm_area_struct *vma,
|
||||
unsigned long address, pmd_t *pmdp);
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_PTE_SAME
|
||||
|
@ -446,6 +445,18 @@ static inline int pmd_write(pmd_t pmd)
|
|||
#endif /* __HAVE_ARCH_PMD_WRITE */
|
||||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
|
||||
#ifndef pmd_read_atomic
|
||||
static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
|
||||
{
|
||||
/*
|
||||
* Depend on compiler for an atomic pmd read. NOTE: this is
|
||||
* only going to work, if the pmdval_t isn't larger than
|
||||
* an unsigned long.
|
||||
*/
|
||||
return *pmdp;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This function is meant to be used by sites walking pagetables with
|
||||
* the mmap_sem hold in read mode to protect against MADV_DONTNEED and
|
||||
|
@ -459,11 +470,17 @@ static inline int pmd_write(pmd_t pmd)
|
|||
* undefined so behaving like if the pmd was none is safe (because it
|
||||
* can return none anyway). The compiler level barrier() is critically
|
||||
* important to compute the two checks atomically on the same pmdval.
|
||||
*
|
||||
* For 32bit kernels with a 64bit large pmd_t this automatically takes
|
||||
* care of reading the pmd atomically to avoid SMP race conditions
|
||||
* against pmd_populate() when the mmap_sem is hold for reading by the
|
||||
* caller (a special atomic read not done by "gcc" as in the generic
|
||||
* version above, is also needed when THP is disabled because the page
|
||||
* fault can populate the pmd from under us).
|
||||
*/
|
||||
static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
|
||||
{
|
||||
/* depend on compiler for an atomic pmd read */
|
||||
pmd_t pmdval = *pmd;
|
||||
pmd_t pmdval = pmd_read_atomic(pmd);
|
||||
/*
|
||||
* The barrier will stabilize the pmdval in a register or on
|
||||
* the stack so that it will stop changing under the code.
|
||||
|
|
|
@ -23,10 +23,6 @@ typedef __kernel_ulong_t __kernel_ino_t;
|
|||
typedef unsigned int __kernel_mode_t;
|
||||
#endif
|
||||
|
||||
#ifndef __kernel_nlink_t
|
||||
typedef __kernel_ulong_t __kernel_nlink_t;
|
||||
#endif
|
||||
|
||||
#ifndef __kernel_pid_t
|
||||
typedef int __kernel_pid_t;
|
||||
#endif
|
||||
|
|
52
include/asm-generic/word-at-a-time.h
Normal file
52
include/asm-generic/word-at-a-time.h
Normal file
|
@ -0,0 +1,52 @@
|
|||
#ifndef _ASM_WORD_AT_A_TIME_H
|
||||
#define _ASM_WORD_AT_A_TIME_H
|
||||
|
||||
/*
|
||||
* This says "generic", but it's actually big-endian only.
|
||||
* Little-endian can use more efficient versions of these
|
||||
* interfaces, see for example
|
||||
* arch/x86/include/asm/word-at-a-time.h
|
||||
* for those.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
||||
struct word_at_a_time {
|
||||
const unsigned long high_bits, low_bits;
|
||||
};
|
||||
|
||||
#define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0xfe) + 1, REPEAT_BYTE(0x7f) }
|
||||
|
||||
/* Bit set in the bytes that have a zero */
|
||||
static inline long prep_zero_mask(unsigned long val, unsigned long rhs, const struct word_at_a_time *c)
|
||||
{
|
||||
unsigned long mask = (val & c->low_bits) + c->low_bits;
|
||||
return ~(mask | rhs);
|
||||
}
|
||||
|
||||
#define create_zero_mask(mask) (mask)
|
||||
|
||||
static inline long find_zero(unsigned long mask)
|
||||
{
|
||||
long byte = 0;
|
||||
#ifdef CONFIG_64BIT
|
||||
if (mask >> 32)
|
||||
mask >>= 32;
|
||||
else
|
||||
byte = 4;
|
||||
#endif
|
||||
if (mask >> 16)
|
||||
mask >>= 16;
|
||||
else
|
||||
byte += 2;
|
||||
return (mask >> 8) ? byte : byte + 1;
|
||||
}
|
||||
|
||||
static inline bool has_zero(unsigned long val, unsigned long *data, const struct word_at_a_time *c)
|
||||
{
|
||||
unsigned long rhs = val | c->low_bits;
|
||||
*data = rhs;
|
||||
return (val + c->high_bits) & ~rhs;
|
||||
}
|
||||
|
||||
#endif /* _ASM_WORD_AT_A_TIME_H */
|
Loading…
Add table
Add a link
Reference in a new issue