Merge Linus master into drm-next
The merge is clean, but the arm build fails afterwards, due to API changes in the regulator tree. I've included the patch into the merge to fix the build. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -4,44 +4,6 @@
|
||||
#include <uapi/linux/a.out.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#if defined (M_OLDSUN2)
|
||||
#else
|
||||
#endif
|
||||
#if defined (M_68010)
|
||||
#else
|
||||
#endif
|
||||
#if defined (M_68020)
|
||||
#else
|
||||
#endif
|
||||
#if defined (M_SPARC)
|
||||
#else
|
||||
#endif
|
||||
#if !defined (N_MAGIC)
|
||||
#endif
|
||||
#if !defined (N_BADMAG)
|
||||
#endif
|
||||
#if !defined (N_TXTOFF)
|
||||
#endif
|
||||
#if !defined (N_DATOFF)
|
||||
#endif
|
||||
#if !defined (N_TRELOFF)
|
||||
#endif
|
||||
#if !defined (N_DRELOFF)
|
||||
#endif
|
||||
#if !defined (N_SYMOFF)
|
||||
#endif
|
||||
#if !defined (N_STROFF)
|
||||
#endif
|
||||
#if !defined (N_TXTADDR)
|
||||
#endif
|
||||
#if defined(vax) || defined(hp300) || defined(pyr)
|
||||
#endif
|
||||
#ifdef sony
|
||||
#endif /* Sony. */
|
||||
#ifdef is68k
|
||||
#endif
|
||||
#if defined(m68k) && defined(PORTAR)
|
||||
#endif
|
||||
#ifdef linux
|
||||
#include <asm/page.h>
|
||||
#if defined(__i386__) || defined(__mc68000__)
|
||||
@@ -51,34 +13,5 @@
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifndef N_DATADDR
|
||||
#endif
|
||||
#if !defined (N_BSSADDR)
|
||||
#endif
|
||||
#if !defined (N_NLIST_DECLARED)
|
||||
#endif /* no N_NLIST_DECLARED. */
|
||||
#if !defined (N_UNDF)
|
||||
#endif
|
||||
#if !defined (N_ABS)
|
||||
#endif
|
||||
#if !defined (N_TEXT)
|
||||
#endif
|
||||
#if !defined (N_DATA)
|
||||
#endif
|
||||
#if !defined (N_BSS)
|
||||
#endif
|
||||
#if !defined (N_FN)
|
||||
#endif
|
||||
#if !defined (N_EXT)
|
||||
#endif
|
||||
#if !defined (N_TYPE)
|
||||
#endif
|
||||
#if !defined (N_STAB)
|
||||
#endif
|
||||
#if !defined (N_RELOCATION_INFO_DECLARED)
|
||||
#ifdef NS32K
|
||||
#else
|
||||
#endif
|
||||
#endif /* no N_RELOCATION_INFO_DECLARED. */
|
||||
#endif /*__ASSEMBLY__ */
|
||||
#endif /* __A_OUT_GNU_H__ */
|
||||
|
@@ -53,10 +53,16 @@ static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
|
||||
return adev ? adev->handle : NULL;
|
||||
}
|
||||
|
||||
#define ACPI_COMPANION(dev) ((dev)->acpi_node.companion)
|
||||
#define ACPI_COMPANION_SET(dev, adev) ACPI_COMPANION(dev) = (adev)
|
||||
#define ACPI_COMPANION(dev) acpi_node((dev)->fwnode)
|
||||
#define ACPI_COMPANION_SET(dev, adev) set_primary_fwnode(dev, (adev) ? \
|
||||
acpi_fwnode_handle(adev) : NULL)
|
||||
#define ACPI_HANDLE(dev) acpi_device_handle(ACPI_COMPANION(dev))
|
||||
|
||||
static inline bool has_acpi_companion(struct device *dev)
|
||||
{
|
||||
return is_acpi_node(dev->fwnode);
|
||||
}
|
||||
|
||||
static inline void acpi_preset_companion(struct device *dev,
|
||||
struct acpi_device *parent, u64 addr)
|
||||
{
|
||||
@@ -471,6 +477,11 @@ static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline bool has_acpi_companion(struct device *dev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline const char *acpi_dev_name(struct acpi_device *adev)
|
||||
{
|
||||
return NULL;
|
||||
|
@@ -1,86 +1,23 @@
|
||||
#ifndef __LINUX__AIO_H
|
||||
#define __LINUX__AIO_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/aio_abi.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
#include <linux/atomic.h>
|
||||
|
||||
struct kioctx;
|
||||
struct kiocb;
|
||||
struct mm_struct;
|
||||
|
||||
#define KIOCB_KEY 0
|
||||
|
||||
/*
|
||||
* We use ki_cancel == KIOCB_CANCELLED to indicate that a kiocb has been either
|
||||
* cancelled or completed (this makes a certain amount of sense because
|
||||
* successful cancellation - io_cancel() - does deliver the completion to
|
||||
* userspace).
|
||||
*
|
||||
* And since most things don't implement kiocb cancellation and we'd really like
|
||||
* kiocb completion to be lockless when possible, we use ki_cancel to
|
||||
* synchronize cancellation and completion - we only set it to KIOCB_CANCELLED
|
||||
* with xchg() or cmpxchg(), see batch_complete_aio() and kiocb_cancel().
|
||||
*/
|
||||
#define KIOCB_CANCELLED ((void *) (~0ULL))
|
||||
|
||||
typedef int (kiocb_cancel_fn)(struct kiocb *);
|
||||
|
||||
struct kiocb {
|
||||
struct file *ki_filp;
|
||||
struct kioctx *ki_ctx; /* NULL for sync ops */
|
||||
kiocb_cancel_fn *ki_cancel;
|
||||
void *private;
|
||||
|
||||
union {
|
||||
void __user *user;
|
||||
struct task_struct *tsk;
|
||||
} ki_obj;
|
||||
|
||||
__u64 ki_user_data; /* user's data for completion */
|
||||
loff_t ki_pos;
|
||||
size_t ki_nbytes; /* copy of iocb->aio_nbytes */
|
||||
|
||||
struct list_head ki_list; /* the aio core uses this
|
||||
* for cancellation */
|
||||
|
||||
/*
|
||||
* If the aio_resfd field of the userspace iocb is not zero,
|
||||
* this is the underlying eventfd context to deliver events to.
|
||||
*/
|
||||
struct eventfd_ctx *ki_eventfd;
|
||||
};
|
||||
|
||||
static inline bool is_sync_kiocb(struct kiocb *kiocb)
|
||||
{
|
||||
return kiocb->ki_ctx == NULL;
|
||||
}
|
||||
|
||||
static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
|
||||
{
|
||||
*kiocb = (struct kiocb) {
|
||||
.ki_ctx = NULL,
|
||||
.ki_filp = filp,
|
||||
.ki_obj.tsk = current,
|
||||
};
|
||||
}
|
||||
|
||||
/* prototypes */
|
||||
#ifdef CONFIG_AIO
|
||||
extern ssize_t wait_on_sync_kiocb(struct kiocb *iocb);
|
||||
extern void aio_complete(struct kiocb *iocb, long res, long res2);
|
||||
struct mm_struct;
|
||||
extern void exit_aio(struct mm_struct *mm);
|
||||
extern long do_io_submit(aio_context_t ctx_id, long nr,
|
||||
struct iocb __user *__user *iocbpp, bool compat);
|
||||
void kiocb_set_cancel_fn(struct kiocb *req, kiocb_cancel_fn *cancel);
|
||||
#else
|
||||
static inline ssize_t wait_on_sync_kiocb(struct kiocb *iocb) { return 0; }
|
||||
static inline void aio_complete(struct kiocb *iocb, long res, long res2) { }
|
||||
struct mm_struct;
|
||||
static inline void exit_aio(struct mm_struct *mm) { }
|
||||
static inline long do_io_submit(aio_context_t ctx_id, long nr,
|
||||
struct iocb __user * __user *iocbpp,
|
||||
@@ -89,11 +26,6 @@ static inline void kiocb_set_cancel_fn(struct kiocb *req,
|
||||
kiocb_cancel_fn *cancel) { }
|
||||
#endif /* CONFIG_AIO */
|
||||
|
||||
static inline struct kiocb *list_kiocb(struct list_head *h)
|
||||
{
|
||||
return list_entry(h, struct kiocb, ki_list);
|
||||
}
|
||||
|
||||
/* for sysctl: */
|
||||
extern unsigned long aio_nr;
|
||||
extern unsigned long aio_max_nr;
|
||||
|
@@ -94,6 +94,8 @@ enum {
|
||||
ATA_ID_SECTOR_SIZE = 106,
|
||||
ATA_ID_WWN = 108,
|
||||
ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */
|
||||
ATA_ID_COMMAND_SET_3 = 119,
|
||||
ATA_ID_COMMAND_SET_4 = 120,
|
||||
ATA_ID_LAST_LUN = 126,
|
||||
ATA_ID_DLF = 128,
|
||||
ATA_ID_CSFO = 129,
|
||||
@@ -177,7 +179,7 @@ enum {
|
||||
ATA_DSC = (1 << 4), /* drive seek complete */
|
||||
ATA_DRQ = (1 << 3), /* data request i/o */
|
||||
ATA_CORR = (1 << 2), /* corrected data error */
|
||||
ATA_IDX = (1 << 1), /* index */
|
||||
ATA_SENSE = (1 << 1), /* sense code available */
|
||||
ATA_ERR = (1 << 0), /* have an error */
|
||||
ATA_SRST = (1 << 2), /* software reset */
|
||||
ATA_ICRC = (1 << 7), /* interface CRC error */
|
||||
@@ -382,6 +384,8 @@ enum {
|
||||
SATA_SSP = 0x06, /* Software Settings Preservation */
|
||||
SATA_DEVSLP = 0x09, /* Device Sleep */
|
||||
|
||||
SETFEATURE_SENSE_DATA = 0xC3, /* Sense Data Reporting feature */
|
||||
|
||||
/* feature values for SET_MAX */
|
||||
ATA_SET_MAX_ADDR = 0x00,
|
||||
ATA_SET_MAX_PASSWD = 0x01,
|
||||
@@ -525,6 +529,8 @@ struct ata_bmdma_prd {
|
||||
#define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
|
||||
#define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4))
|
||||
#define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8))
|
||||
#define ata_id_has_ncq_autosense(id) \
|
||||
((id)[ATA_ID_FEATURE_SUPP] & (1 << 7))
|
||||
|
||||
static inline bool ata_id_has_hipm(const u16 *id)
|
||||
{
|
||||
@@ -696,6 +702,27 @@ static inline bool ata_id_wcache_enabled(const u16 *id)
|
||||
return id[ATA_ID_CFS_ENABLE_1] & (1 << 5);
|
||||
}
|
||||
|
||||
static inline bool ata_id_has_read_log_dma_ext(const u16 *id)
|
||||
{
|
||||
if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
|
||||
return false;
|
||||
return id[ATA_ID_COMMAND_SET_3] & (1 << 3);
|
||||
}
|
||||
|
||||
static inline bool ata_id_has_sense_reporting(const u16 *id)
|
||||
{
|
||||
if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
|
||||
return false;
|
||||
return id[ATA_ID_COMMAND_SET_3] & (1 << 6);
|
||||
}
|
||||
|
||||
static inline bool ata_id_sense_reporting_enabled(const u16 *id)
|
||||
{
|
||||
if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
|
||||
return false;
|
||||
return id[ATA_ID_COMMAND_SET_4] & (1 << 6);
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_id_major_version - get ATA level of drive
|
||||
* @id: Identify data
|
||||
|
34
include/linux/bcm47xx_nvram.h
Normal file
34
include/linux/bcm47xx_nvram.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef __BCM47XX_NVRAM_H
|
||||
#define __BCM47XX_NVRAM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#ifdef CONFIG_BCM47XX
|
||||
int bcm47xx_nvram_init_from_mem(u32 base, u32 lim);
|
||||
int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len);
|
||||
int bcm47xx_nvram_gpio_pin(const char *name);
|
||||
#else
|
||||
static inline int bcm47xx_nvram_init_from_mem(u32 base, u32 lim)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
};
|
||||
static inline int bcm47xx_nvram_getenv(const char *name, char *val,
|
||||
size_t val_len)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
};
|
||||
static inline int bcm47xx_nvram_gpio_pin(const char *name)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* __BCM47XX_NVRAM_H */
|
@@ -434,6 +434,27 @@ static inline struct bcma_device *bcma_find_core(struct bcma_bus *bus,
|
||||
return bcma_find_core_unit(bus, coreid, 0);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCMA_HOST_PCI
|
||||
extern void bcma_host_pci_up(struct bcma_bus *bus);
|
||||
extern void bcma_host_pci_down(struct bcma_bus *bus);
|
||||
extern int bcma_host_pci_irq_ctl(struct bcma_bus *bus,
|
||||
struct bcma_device *core, bool enable);
|
||||
#else
|
||||
static inline void bcma_host_pci_up(struct bcma_bus *bus)
|
||||
{
|
||||
}
|
||||
static inline void bcma_host_pci_down(struct bcma_bus *bus)
|
||||
{
|
||||
}
|
||||
static inline int bcma_host_pci_irq_ctl(struct bcma_bus *bus,
|
||||
struct bcma_device *core, bool enable)
|
||||
{
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_PCI)
|
||||
return -ENOTSUPP;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern bool bcma_core_is_enabled(struct bcma_device *core);
|
||||
extern void bcma_core_disable(struct bcma_device *core, u32 flags);
|
||||
extern int bcma_core_enable(struct bcma_device *core, u32 flags);
|
||||
|
@@ -663,14 +663,6 @@ struct bcma_drv_cc_b {
|
||||
#define bcma_cc_maskset32(cc, offset, mask, set) \
|
||||
bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set))
|
||||
|
||||
extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
|
||||
extern void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);
|
||||
|
||||
extern void bcma_chipco_suspend(struct bcma_drv_cc *cc);
|
||||
extern void bcma_chipco_resume(struct bcma_drv_cc *cc);
|
||||
|
||||
void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);
|
||||
|
||||
extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks);
|
||||
|
||||
extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc);
|
||||
@@ -690,9 +682,6 @@ u32 bcma_chipco_gpio_pullup(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
u32 bcma_chipco_gpio_pulldown(struct bcma_drv_cc *cc, u32 mask, u32 value);
|
||||
|
||||
/* PMU support */
|
||||
extern void bcma_pmu_init(struct bcma_drv_cc *cc);
|
||||
extern void bcma_pmu_early_init(struct bcma_drv_cc *cc);
|
||||
|
||||
extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset,
|
||||
u32 value);
|
||||
extern void bcma_chipco_pll_maskset(struct bcma_drv_cc *cc, u32 offset,
|
||||
|
@@ -91,10 +91,4 @@ struct bcma_drv_gmac_cmn {
|
||||
#define gmac_cmn_write16(gc, offset, val) bcma_write16((gc)->core, offset, val)
|
||||
#define gmac_cmn_write32(gc, offset, val) bcma_write32((gc)->core, offset, val)
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_GMAC_CMN
|
||||
extern void bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn *gc);
|
||||
#else
|
||||
static inline void bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn *gc) { }
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_GMAC_CMN_H_ */
|
||||
|
@@ -39,21 +39,6 @@ struct bcma_drv_mips {
|
||||
u8 early_setup_done:1;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
extern void bcma_core_mips_init(struct bcma_drv_mips *mcore);
|
||||
extern void bcma_core_mips_early_init(struct bcma_drv_mips *mcore);
|
||||
|
||||
extern unsigned int bcma_core_mips_irq(struct bcma_device *dev);
|
||||
#else
|
||||
static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { }
|
||||
static inline void bcma_core_mips_early_init(struct bcma_drv_mips *mcore) { }
|
||||
|
||||
static inline unsigned int bcma_core_mips_irq(struct bcma_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_MIPS_H_ */
|
||||
|
@@ -238,13 +238,13 @@ struct bcma_drv_pci {
|
||||
#define pcicore_write16(pc, offset, val) bcma_write16((pc)->core, offset, val)
|
||||
#define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val)
|
||||
|
||||
extern void bcma_core_pci_early_init(struct bcma_drv_pci *pc);
|
||||
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
||||
struct bcma_device *core, bool enable);
|
||||
extern void bcma_core_pci_up(struct bcma_bus *bus);
|
||||
extern void bcma_core_pci_down(struct bcma_bus *bus);
|
||||
#ifdef CONFIG_BCMA_DRIVER_PCI
|
||||
extern void bcma_core_pci_power_save(struct bcma_bus *bus, bool up);
|
||||
#else
|
||||
static inline void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev);
|
||||
extern int bcma_core_pci_plat_dev_init(struct pci_dev *dev);
|
||||
|
@@ -143,6 +143,8 @@
|
||||
|
||||
struct bcma_drv_pcie2 {
|
||||
struct bcma_device *core;
|
||||
|
||||
u16 reqsize;
|
||||
};
|
||||
|
||||
#define pcie2_read16(pcie2, offset) bcma_read16((pcie2)->core, offset)
|
||||
@@ -153,6 +155,4 @@ struct bcma_drv_pcie2 {
|
||||
#define pcie2_set32(pcie2, offset, set) bcma_set32((pcie2)->core, offset, set)
|
||||
#define pcie2_mask32(pcie2, offset, mask) bcma_mask32((pcie2)->core, offset, mask)
|
||||
|
||||
void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_PCIE2_H_ */
|
||||
|
@@ -172,12 +172,8 @@ extern unsigned int bitmap_ord_to_pos(const unsigned long *bitmap, unsigned int
|
||||
extern int bitmap_print_to_pagebuf(bool list, char *buf,
|
||||
const unsigned long *maskp, int nmaskbits);
|
||||
|
||||
#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG))
|
||||
#define BITMAP_LAST_WORD_MASK(nbits) \
|
||||
( \
|
||||
((nbits) % BITS_PER_LONG) ? \
|
||||
(1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \
|
||||
)
|
||||
#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
|
||||
#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
|
||||
|
||||
#define small_const_nbits(nbits) \
|
||||
(__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG)
|
||||
@@ -287,16 +283,16 @@ static inline int bitmap_empty(const unsigned long *src, unsigned nbits)
|
||||
{
|
||||
if (small_const_nbits(nbits))
|
||||
return ! (*src & BITMAP_LAST_WORD_MASK(nbits));
|
||||
else
|
||||
return __bitmap_empty(src, nbits);
|
||||
|
||||
return find_first_bit(src, nbits) == nbits;
|
||||
}
|
||||
|
||||
static inline int bitmap_full(const unsigned long *src, unsigned int nbits)
|
||||
{
|
||||
if (small_const_nbits(nbits))
|
||||
return ! (~(*src) & BITMAP_LAST_WORD_MASK(nbits));
|
||||
else
|
||||
return __bitmap_full(src, nbits);
|
||||
|
||||
return find_first_zero_bit(src, nbits) == nbits;
|
||||
}
|
||||
|
||||
static inline int bitmap_weight(const unsigned long *src, unsigned int nbits)
|
||||
|
@@ -218,9 +218,9 @@ static inline unsigned long __ffs64(u64 word)
|
||||
/**
|
||||
* find_last_bit - find the last set bit in a memory region
|
||||
* @addr: The address to start the search at
|
||||
* @size: The maximum size to search
|
||||
* @size: The number of bits to search
|
||||
*
|
||||
* Returns the bit number of the first set bit, or size.
|
||||
* Returns the bit number of the last set bit, or size.
|
||||
*/
|
||||
extern unsigned long find_last_bit(const unsigned long *addr,
|
||||
unsigned long size);
|
||||
|
@@ -13,7 +13,7 @@ struct blk_mq_cpu_notifier {
|
||||
};
|
||||
|
||||
struct blk_mq_ctxmap {
|
||||
unsigned int map_size;
|
||||
unsigned int size;
|
||||
unsigned int bits_per_word;
|
||||
struct blk_align_bitmap *map;
|
||||
};
|
||||
@@ -164,6 +164,8 @@ enum {
|
||||
<< BLK_MQ_F_ALLOC_POLICY_START_BIT)
|
||||
|
||||
struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *);
|
||||
struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
|
||||
struct request_queue *q);
|
||||
void blk_mq_finish_init(struct request_queue *q);
|
||||
int blk_mq_register_disk(struct gendisk *);
|
||||
void blk_mq_unregister_disk(struct gendisk *);
|
||||
@@ -218,6 +220,7 @@ void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx);
|
||||
void blk_mq_stop_hw_queues(struct request_queue *q);
|
||||
void blk_mq_start_hw_queues(struct request_queue *q);
|
||||
void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async);
|
||||
void blk_mq_run_hw_queues(struct request_queue *q, bool async);
|
||||
void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs);
|
||||
void blk_mq_tag_busy_iter(struct blk_mq_hw_ctx *hctx, busy_iter_fn *fn,
|
||||
void *priv);
|
||||
@@ -227,7 +230,7 @@ void blk_mq_freeze_queue_start(struct request_queue *q);
|
||||
|
||||
/*
|
||||
* Driver command data is immediately after the request. So subtract request
|
||||
* size to get back to the original request.
|
||||
* size to get back to the original request, add request size to get the PDU.
|
||||
*/
|
||||
static inline struct request *blk_mq_rq_from_pdu(void *pdu)
|
||||
{
|
||||
@@ -235,7 +238,7 @@ static inline struct request *blk_mq_rq_from_pdu(void *pdu)
|
||||
}
|
||||
static inline void *blk_mq_rq_to_pdu(struct request *rq)
|
||||
{
|
||||
return (void *) rq + sizeof(*rq);
|
||||
return rq + 1;
|
||||
}
|
||||
|
||||
#define queue_for_each_hw_ctx(q, hctx, i) \
|
||||
|
@@ -181,7 +181,9 @@ enum rq_flag_bits {
|
||||
__REQ_ELVPRIV, /* elevator private data attached */
|
||||
__REQ_FAILED, /* set if the request failed */
|
||||
__REQ_QUIET, /* don't worry about errors */
|
||||
__REQ_PREEMPT, /* set for "ide_preempt" requests */
|
||||
__REQ_PREEMPT, /* set for "ide_preempt" requests and also
|
||||
for requests for which the SCSI "quiesce"
|
||||
state must be ignored. */
|
||||
__REQ_ALLOCED, /* request came from our alloc pool */
|
||||
__REQ_COPY_USER, /* contains copies of user pages */
|
||||
__REQ_FLUSH_SEQ, /* request for flush sequence */
|
||||
|
@@ -32,23 +32,19 @@ struct bpf_map {
|
||||
u32 key_size;
|
||||
u32 value_size;
|
||||
u32 max_entries;
|
||||
struct bpf_map_ops *ops;
|
||||
const struct bpf_map_ops *ops;
|
||||
struct work_struct work;
|
||||
};
|
||||
|
||||
struct bpf_map_type_list {
|
||||
struct list_head list_node;
|
||||
struct bpf_map_ops *ops;
|
||||
const struct bpf_map_ops *ops;
|
||||
enum bpf_map_type type;
|
||||
};
|
||||
|
||||
void bpf_register_map_type(struct bpf_map_type_list *tl);
|
||||
void bpf_map_put(struct bpf_map *map);
|
||||
struct bpf_map *bpf_map_get(struct fd f);
|
||||
|
||||
/* function argument constraints */
|
||||
enum bpf_arg_type {
|
||||
ARG_ANYTHING = 0, /* any argument is ok */
|
||||
ARG_DONTCARE = 0, /* unused argument in helper function */
|
||||
|
||||
/* the following constraints used to prototype
|
||||
* bpf_map_lookup/update/delete_elem() functions
|
||||
@@ -62,6 +58,9 @@ enum bpf_arg_type {
|
||||
*/
|
||||
ARG_PTR_TO_STACK, /* any pointer to eBPF program stack */
|
||||
ARG_CONST_STACK_SIZE, /* number of bytes accessed from stack */
|
||||
|
||||
ARG_PTR_TO_CTX, /* pointer to context */
|
||||
ARG_ANYTHING, /* any (initialized) argument is ok */
|
||||
};
|
||||
|
||||
/* type of values returned from helper functions */
|
||||
@@ -105,41 +104,61 @@ struct bpf_verifier_ops {
|
||||
* with 'type' (read or write) is allowed
|
||||
*/
|
||||
bool (*is_valid_access)(int off, int size, enum bpf_access_type type);
|
||||
|
||||
u32 (*convert_ctx_access)(int dst_reg, int src_reg, int ctx_off,
|
||||
struct bpf_insn *insn);
|
||||
};
|
||||
|
||||
struct bpf_prog_type_list {
|
||||
struct list_head list_node;
|
||||
struct bpf_verifier_ops *ops;
|
||||
const struct bpf_verifier_ops *ops;
|
||||
enum bpf_prog_type type;
|
||||
};
|
||||
|
||||
void bpf_register_prog_type(struct bpf_prog_type_list *tl);
|
||||
|
||||
struct bpf_prog;
|
||||
|
||||
struct bpf_prog_aux {
|
||||
atomic_t refcnt;
|
||||
bool is_gpl_compatible;
|
||||
enum bpf_prog_type prog_type;
|
||||
struct bpf_verifier_ops *ops;
|
||||
struct bpf_map **used_maps;
|
||||
u32 used_map_cnt;
|
||||
const struct bpf_verifier_ops *ops;
|
||||
struct bpf_map **used_maps;
|
||||
struct bpf_prog *prog;
|
||||
struct work_struct work;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BPF_SYSCALL
|
||||
void bpf_prog_put(struct bpf_prog *prog);
|
||||
#else
|
||||
static inline void bpf_prog_put(struct bpf_prog *prog) {}
|
||||
#endif
|
||||
void bpf_register_prog_type(struct bpf_prog_type_list *tl);
|
||||
void bpf_register_map_type(struct bpf_map_type_list *tl);
|
||||
|
||||
struct bpf_prog *bpf_prog_get(u32 ufd);
|
||||
void bpf_prog_put(struct bpf_prog *prog);
|
||||
|
||||
struct bpf_map *bpf_map_get(struct fd f);
|
||||
void bpf_map_put(struct bpf_map *map);
|
||||
|
||||
/* verify correctness of eBPF program */
|
||||
int bpf_check(struct bpf_prog *fp, union bpf_attr *attr);
|
||||
int bpf_check(struct bpf_prog **fp, union bpf_attr *attr);
|
||||
#else
|
||||
static inline void bpf_register_prog_type(struct bpf_prog_type_list *tl)
|
||||
{
|
||||
}
|
||||
|
||||
static inline struct bpf_prog *bpf_prog_get(u32 ufd)
|
||||
{
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
}
|
||||
|
||||
static inline void bpf_prog_put(struct bpf_prog *prog)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_BPF_SYSCALL */
|
||||
|
||||
/* verifier prototypes for helper functions called from eBPF programs */
|
||||
extern struct bpf_func_proto bpf_map_lookup_elem_proto;
|
||||
extern struct bpf_func_proto bpf_map_update_elem_proto;
|
||||
extern struct bpf_func_proto bpf_map_delete_elem_proto;
|
||||
extern const struct bpf_func_proto bpf_map_lookup_elem_proto;
|
||||
extern const struct bpf_func_proto bpf_map_update_elem_proto;
|
||||
extern const struct bpf_func_proto bpf_map_delete_elem_proto;
|
||||
|
||||
extern const struct bpf_func_proto bpf_get_prandom_u32_proto;
|
||||
extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
|
||||
|
||||
#endif /* _LINUX_BPF_H */
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#define PHY_ID_BCM5421 0x002060e0
|
||||
#define PHY_ID_BCM5464 0x002060b0
|
||||
#define PHY_ID_BCM5461 0x002060c0
|
||||
#define PHY_ID_BCM54616S 0x03625d10
|
||||
#define PHY_ID_BCM57780 0x03625d90
|
||||
|
||||
#define PHY_ID_BCM7250 0xae025280
|
||||
@@ -19,6 +20,7 @@
|
||||
#define PHY_ID_BCM7425 0x03625e60
|
||||
#define PHY_ID_BCM7429 0x600d8730
|
||||
#define PHY_ID_BCM7439 0x600d8480
|
||||
#define PHY_ID_BCM7439_2 0xae025080
|
||||
#define PHY_ID_BCM7445 0x600d8510
|
||||
|
||||
#define PHY_BCM_OUI_MASK 0xfffffc00
|
||||
|
@@ -61,6 +61,8 @@ struct can_priv {
|
||||
char tx_led_trig_name[CAN_LED_NAME_SZ];
|
||||
struct led_trigger *rx_led_trig;
|
||||
char rx_led_trig_name[CAN_LED_NAME_SZ];
|
||||
struct led_trigger *rxtx_led_trig;
|
||||
char rxtx_led_trig_name[CAN_LED_NAME_SZ];
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -21,8 +21,10 @@ enum can_led_event {
|
||||
|
||||
#ifdef CONFIG_CAN_LEDS
|
||||
|
||||
/* keep space for interface name + "-tx"/"-rx" suffix and null terminator */
|
||||
#define CAN_LED_NAME_SZ (IFNAMSIZ + 4)
|
||||
/* keep space for interface name + "-tx"/"-rx"/"-rxtx"
|
||||
* suffix and null terminator
|
||||
*/
|
||||
#define CAN_LED_NAME_SZ (IFNAMSIZ + 6)
|
||||
|
||||
void can_led_event(struct net_device *netdev, enum can_led_event event);
|
||||
void devm_can_led_init(struct net_device *netdev);
|
||||
|
@@ -44,16 +44,11 @@ static inline void can_skb_reserve(struct sk_buff *skb)
|
||||
skb_reserve(skb, sizeof(struct can_skb_priv));
|
||||
}
|
||||
|
||||
static inline void can_skb_destructor(struct sk_buff *skb)
|
||||
{
|
||||
sock_put(skb->sk);
|
||||
}
|
||||
|
||||
static inline void can_skb_set_owner(struct sk_buff *skb, struct sock *sk)
|
||||
{
|
||||
if (sk) {
|
||||
sock_hold(sk);
|
||||
skb->destructor = can_skb_destructor;
|
||||
skb->destructor = sock_efree;
|
||||
skb->sk = sk;
|
||||
}
|
||||
}
|
||||
|
@@ -205,6 +205,7 @@ static inline kernel_cap_t cap_raise_nfsd_set(const kernel_cap_t a,
|
||||
cap_intersect(permitted, __cap_nfsd_set));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MULTIUSER
|
||||
extern bool has_capability(struct task_struct *t, int cap);
|
||||
extern bool has_ns_capability(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap);
|
||||
@@ -213,6 +214,34 @@ extern bool has_ns_capability_noaudit(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap);
|
||||
extern bool capable(int cap);
|
||||
extern bool ns_capable(struct user_namespace *ns, int cap);
|
||||
#else
|
||||
static inline bool has_capability(struct task_struct *t, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool has_ns_capability(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool has_capability_noaudit(struct task_struct *t, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool has_ns_capability_noaudit(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool capable(int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool ns_capable(struct user_namespace *ns, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif /* CONFIG_MULTIUSER */
|
||||
extern bool capable_wrt_inode_uidgid(const struct inode *inode, int cap);
|
||||
extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap);
|
||||
|
||||
|
@@ -5,6 +5,10 @@
|
||||
#include <linux/exportfs.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#define CLEANCACHE_NO_POOL -1
|
||||
#define CLEANCACHE_NO_BACKEND -2
|
||||
#define CLEANCACHE_NO_BACKEND_SHARED -3
|
||||
|
||||
#define CLEANCACHE_KEY_MAX 6
|
||||
|
||||
/*
|
||||
@@ -33,10 +37,9 @@ struct cleancache_ops {
|
||||
void (*invalidate_fs)(int);
|
||||
};
|
||||
|
||||
extern struct cleancache_ops *
|
||||
cleancache_register_ops(struct cleancache_ops *ops);
|
||||
extern int cleancache_register_ops(struct cleancache_ops *ops);
|
||||
extern void __cleancache_init_fs(struct super_block *);
|
||||
extern void __cleancache_init_shared_fs(char *, struct super_block *);
|
||||
extern void __cleancache_init_shared_fs(struct super_block *);
|
||||
extern int __cleancache_get_page(struct page *);
|
||||
extern void __cleancache_put_page(struct page *);
|
||||
extern void __cleancache_invalidate_page(struct address_space *, struct page *);
|
||||
@@ -78,10 +81,10 @@ static inline void cleancache_init_fs(struct super_block *sb)
|
||||
__cleancache_init_fs(sb);
|
||||
}
|
||||
|
||||
static inline void cleancache_init_shared_fs(char *uuid, struct super_block *sb)
|
||||
static inline void cleancache_init_shared_fs(struct super_block *sb)
|
||||
{
|
||||
if (cleancache_enabled)
|
||||
__cleancache_init_shared_fs(uuid, sb);
|
||||
__cleancache_init_shared_fs(sb);
|
||||
}
|
||||
|
||||
static inline int cleancache_get_page(struct page *page)
|
||||
|
@@ -8,64 +8,69 @@
|
||||
#ifndef _LINUX_CLOCKCHIPS_H
|
||||
#define _LINUX_CLOCKCHIPS_H
|
||||
|
||||
/* Clock event notification values */
|
||||
enum clock_event_nofitiers {
|
||||
CLOCK_EVT_NOTIFY_ADD,
|
||||
CLOCK_EVT_NOTIFY_BROADCAST_ON,
|
||||
CLOCK_EVT_NOTIFY_BROADCAST_OFF,
|
||||
CLOCK_EVT_NOTIFY_BROADCAST_FORCE,
|
||||
CLOCK_EVT_NOTIFY_BROADCAST_ENTER,
|
||||
CLOCK_EVT_NOTIFY_BROADCAST_EXIT,
|
||||
CLOCK_EVT_NOTIFY_SUSPEND,
|
||||
CLOCK_EVT_NOTIFY_RESUME,
|
||||
CLOCK_EVT_NOTIFY_CPU_DYING,
|
||||
CLOCK_EVT_NOTIFY_CPU_DEAD,
|
||||
};
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BUILD
|
||||
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/notifier.h>
|
||||
# include <linux/clocksource.h>
|
||||
# include <linux/cpumask.h>
|
||||
# include <linux/ktime.h>
|
||||
# include <linux/notifier.h>
|
||||
|
||||
struct clock_event_device;
|
||||
struct module;
|
||||
|
||||
/* Clock event mode commands */
|
||||
/* Clock event mode commands for legacy ->set_mode(): OBSOLETE */
|
||||
enum clock_event_mode {
|
||||
CLOCK_EVT_MODE_UNUSED = 0,
|
||||
CLOCK_EVT_MODE_UNUSED,
|
||||
CLOCK_EVT_MODE_SHUTDOWN,
|
||||
CLOCK_EVT_MODE_PERIODIC,
|
||||
CLOCK_EVT_MODE_ONESHOT,
|
||||
CLOCK_EVT_MODE_RESUME,
|
||||
};
|
||||
|
||||
/*
|
||||
* Possible states of a clock event device.
|
||||
*
|
||||
* DETACHED: Device is not used by clockevents core. Initial state or can be
|
||||
* reached from SHUTDOWN.
|
||||
* SHUTDOWN: Device is powered-off. Can be reached from PERIODIC or ONESHOT.
|
||||
* PERIODIC: Device is programmed to generate events periodically. Can be
|
||||
* reached from DETACHED or SHUTDOWN.
|
||||
* ONESHOT: Device is programmed to generate event only once. Can be reached
|
||||
* from DETACHED or SHUTDOWN.
|
||||
*/
|
||||
enum clock_event_state {
|
||||
CLOCK_EVT_STATE_DETACHED,
|
||||
CLOCK_EVT_STATE_SHUTDOWN,
|
||||
CLOCK_EVT_STATE_PERIODIC,
|
||||
CLOCK_EVT_STATE_ONESHOT,
|
||||
};
|
||||
|
||||
/*
|
||||
* Clock event features
|
||||
*/
|
||||
#define CLOCK_EVT_FEAT_PERIODIC 0x000001
|
||||
#define CLOCK_EVT_FEAT_ONESHOT 0x000002
|
||||
#define CLOCK_EVT_FEAT_KTIME 0x000004
|
||||
# define CLOCK_EVT_FEAT_PERIODIC 0x000001
|
||||
# define CLOCK_EVT_FEAT_ONESHOT 0x000002
|
||||
# define CLOCK_EVT_FEAT_KTIME 0x000004
|
||||
|
||||
/*
|
||||
* x86(64) specific misfeatures:
|
||||
* x86(64) specific (mis)features:
|
||||
*
|
||||
* - Clockevent source stops in C3 State and needs broadcast support.
|
||||
* - Local APIC timer is used as a dummy device.
|
||||
*/
|
||||
#define CLOCK_EVT_FEAT_C3STOP 0x000008
|
||||
#define CLOCK_EVT_FEAT_DUMMY 0x000010
|
||||
# define CLOCK_EVT_FEAT_C3STOP 0x000008
|
||||
# define CLOCK_EVT_FEAT_DUMMY 0x000010
|
||||
|
||||
/*
|
||||
* Core shall set the interrupt affinity dynamically in broadcast mode
|
||||
*/
|
||||
#define CLOCK_EVT_FEAT_DYNIRQ 0x000020
|
||||
#define CLOCK_EVT_FEAT_PERCPU 0x000040
|
||||
# define CLOCK_EVT_FEAT_DYNIRQ 0x000020
|
||||
# define CLOCK_EVT_FEAT_PERCPU 0x000040
|
||||
|
||||
/*
|
||||
* Clockevent device is based on a hrtimer for broadcast
|
||||
*/
|
||||
#define CLOCK_EVT_FEAT_HRTIMER 0x000080
|
||||
# define CLOCK_EVT_FEAT_HRTIMER 0x000080
|
||||
|
||||
/**
|
||||
* struct clock_event_device - clock event device descriptor
|
||||
@@ -78,10 +83,15 @@ enum clock_event_mode {
|
||||
* @min_delta_ns: minimum delta value in ns
|
||||
* @mult: nanosecond to cycles multiplier
|
||||
* @shift: nanoseconds to cycles divisor (power of two)
|
||||
* @mode: operating mode assigned by the management code
|
||||
* @mode: operating mode, relevant only to ->set_mode(), OBSOLETE
|
||||
* @state: current state of the device, assigned by the core code
|
||||
* @features: features
|
||||
* @retries: number of forced programming retries
|
||||
* @set_mode: set mode function
|
||||
* @set_mode: legacy set mode function, only for modes <= CLOCK_EVT_MODE_RESUME.
|
||||
* @set_state_periodic: switch state to periodic, if !set_mode
|
||||
* @set_state_oneshot: switch state to oneshot, if !set_mode
|
||||
* @set_state_shutdown: switch state to shutdown, if !set_mode
|
||||
* @tick_resume: resume clkevt device, if !set_mode
|
||||
* @broadcast: function to broadcast events
|
||||
* @min_delta_ticks: minimum delta value in ticks stored for reconfiguration
|
||||
* @max_delta_ticks: maximum delta value in ticks stored for reconfiguration
|
||||
@@ -95,22 +105,31 @@ enum clock_event_mode {
|
||||
*/
|
||||
struct clock_event_device {
|
||||
void (*event_handler)(struct clock_event_device *);
|
||||
int (*set_next_event)(unsigned long evt,
|
||||
struct clock_event_device *);
|
||||
int (*set_next_ktime)(ktime_t expires,
|
||||
struct clock_event_device *);
|
||||
int (*set_next_event)(unsigned long evt, struct clock_event_device *);
|
||||
int (*set_next_ktime)(ktime_t expires, struct clock_event_device *);
|
||||
ktime_t next_event;
|
||||
u64 max_delta_ns;
|
||||
u64 min_delta_ns;
|
||||
u32 mult;
|
||||
u32 shift;
|
||||
enum clock_event_mode mode;
|
||||
enum clock_event_state state;
|
||||
unsigned int features;
|
||||
unsigned long retries;
|
||||
|
||||
/*
|
||||
* State transition callback(s): Only one of the two groups should be
|
||||
* defined:
|
||||
* - set_mode(), only for modes <= CLOCK_EVT_MODE_RESUME.
|
||||
* - set_state_{shutdown|periodic|oneshot}(), tick_resume().
|
||||
*/
|
||||
void (*set_mode)(enum clock_event_mode mode, struct clock_event_device *);
|
||||
int (*set_state_periodic)(struct clock_event_device *);
|
||||
int (*set_state_oneshot)(struct clock_event_device *);
|
||||
int (*set_state_shutdown)(struct clock_event_device *);
|
||||
int (*tick_resume)(struct clock_event_device *);
|
||||
|
||||
void (*broadcast)(const struct cpumask *mask);
|
||||
void (*set_mode)(enum clock_event_mode mode,
|
||||
struct clock_event_device *);
|
||||
void (*suspend)(struct clock_event_device *);
|
||||
void (*resume)(struct clock_event_device *);
|
||||
unsigned long min_delta_ticks;
|
||||
@@ -136,18 +155,18 @@ struct clock_event_device {
|
||||
*
|
||||
* factor = (clock_ticks << shift) / nanoseconds
|
||||
*/
|
||||
static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec,
|
||||
int shift)
|
||||
static inline unsigned long
|
||||
div_sc(unsigned long ticks, unsigned long nsec, int shift)
|
||||
{
|
||||
uint64_t tmp = ((uint64_t)ticks) << shift;
|
||||
u64 tmp = ((u64)ticks) << shift;
|
||||
|
||||
do_div(tmp, nsec);
|
||||
|
||||
return (unsigned long) tmp;
|
||||
}
|
||||
|
||||
/* Clock event layer functions */
|
||||
extern u64 clockevent_delta2ns(unsigned long latch,
|
||||
struct clock_event_device *evt);
|
||||
extern u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt);
|
||||
extern void clockevents_register_device(struct clock_event_device *dev);
|
||||
extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu);
|
||||
|
||||
@@ -158,57 +177,42 @@ extern void clockevents_config_and_register(struct clock_event_device *dev,
|
||||
|
||||
extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq);
|
||||
|
||||
extern void clockevents_exchange_device(struct clock_event_device *old,
|
||||
struct clock_event_device *new);
|
||||
extern void clockevents_set_mode(struct clock_event_device *dev,
|
||||
enum clock_event_mode mode);
|
||||
extern int clockevents_program_event(struct clock_event_device *dev,
|
||||
ktime_t expires, bool force);
|
||||
|
||||
extern void clockevents_handle_noop(struct clock_event_device *dev);
|
||||
|
||||
static inline void
|
||||
clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec)
|
||||
{
|
||||
return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC,
|
||||
freq, minsec);
|
||||
return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC, freq, minsec);
|
||||
}
|
||||
|
||||
extern void clockevents_suspend(void);
|
||||
extern void clockevents_resume(void);
|
||||
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
|
||||
#ifdef CONFIG_ARCH_HAS_TICK_BROADCAST
|
||||
# ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
|
||||
# ifdef CONFIG_ARCH_HAS_TICK_BROADCAST
|
||||
extern void tick_broadcast(const struct cpumask *mask);
|
||||
#else
|
||||
#define tick_broadcast NULL
|
||||
#endif
|
||||
# else
|
||||
# define tick_broadcast NULL
|
||||
# endif
|
||||
extern int tick_receive_broadcast(void);
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
|
||||
# if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
|
||||
extern void tick_setup_hrtimer_broadcast(void);
|
||||
extern int tick_check_broadcast_expired(void);
|
||||
#else
|
||||
# else
|
||||
static inline int tick_check_broadcast_expired(void) { return 0; }
|
||||
static inline void tick_setup_hrtimer_broadcast(void) {};
|
||||
#endif
|
||||
static inline void tick_setup_hrtimer_broadcast(void) { }
|
||||
# endif
|
||||
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
extern int clockevents_notify(unsigned long reason, void *arg);
|
||||
#else
|
||||
static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; }
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_GENERIC_CLOCKEVENTS_BUILD */
|
||||
|
||||
static inline void clockevents_suspend(void) {}
|
||||
static inline void clockevents_resume(void) {}
|
||||
#else /* !CONFIG_GENERIC_CLOCKEVENTS: */
|
||||
|
||||
static inline void clockevents_suspend(void) { }
|
||||
static inline void clockevents_resume(void) { }
|
||||
static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; }
|
||||
static inline int tick_check_broadcast_expired(void) { return 0; }
|
||||
static inline void tick_setup_hrtimer_broadcast(void) {};
|
||||
static inline void tick_setup_hrtimer_broadcast(void) { }
|
||||
|
||||
#endif
|
||||
#endif /* !CONFIG_GENERIC_CLOCKEVENTS */
|
||||
|
||||
#endif
|
||||
#endif /* _LINUX_CLOCKCHIPS_H */
|
||||
|
@@ -56,6 +56,7 @@ struct module;
|
||||
* @shift: cycle to nanosecond divisor (power of two)
|
||||
* @max_idle_ns: max idle time permitted by the clocksource (nsecs)
|
||||
* @maxadj: maximum adjustment value to mult (~11%)
|
||||
* @max_cycles: maximum safe cycle value which won't overflow on multiplication
|
||||
* @flags: flags describing special properties
|
||||
* @archdata: arch-specific data
|
||||
* @suspend: suspend function for the clocksource, if necessary
|
||||
@@ -76,7 +77,7 @@ struct clocksource {
|
||||
#ifdef CONFIG_ARCH_CLOCKSOURCE_DATA
|
||||
struct arch_clocksource_data archdata;
|
||||
#endif
|
||||
|
||||
u64 max_cycles;
|
||||
const char *name;
|
||||
struct list_head list;
|
||||
int rating;
|
||||
@@ -178,7 +179,6 @@ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift)
|
||||
}
|
||||
|
||||
|
||||
extern int clocksource_register(struct clocksource*);
|
||||
extern int clocksource_unregister(struct clocksource*);
|
||||
extern void clocksource_touch_watchdog(void);
|
||||
extern struct clocksource* clocksource_get_next(void);
|
||||
@@ -189,7 +189,7 @@ extern struct clocksource * __init clocksource_default_clock(void);
|
||||
extern void clocksource_mark_unstable(struct clocksource *cs);
|
||||
|
||||
extern u64
|
||||
clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask);
|
||||
clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask, u64 *max_cycles);
|
||||
extern void
|
||||
clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec);
|
||||
|
||||
@@ -200,7 +200,16 @@ clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec);
|
||||
extern int
|
||||
__clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq);
|
||||
extern void
|
||||
__clocksource_updatefreq_scale(struct clocksource *cs, u32 scale, u32 freq);
|
||||
__clocksource_update_freq_scale(struct clocksource *cs, u32 scale, u32 freq);
|
||||
|
||||
/*
|
||||
* Don't call this unless you are a default clocksource
|
||||
* (AKA: jiffies) and absolutely have to.
|
||||
*/
|
||||
static inline int __clocksource_register(struct clocksource *cs)
|
||||
{
|
||||
return __clocksource_register_scale(cs, 1, 0);
|
||||
}
|
||||
|
||||
static inline int clocksource_register_hz(struct clocksource *cs, u32 hz)
|
||||
{
|
||||
@@ -212,14 +221,14 @@ static inline int clocksource_register_khz(struct clocksource *cs, u32 khz)
|
||||
return __clocksource_register_scale(cs, 1000, khz);
|
||||
}
|
||||
|
||||
static inline void __clocksource_updatefreq_hz(struct clocksource *cs, u32 hz)
|
||||
static inline void __clocksource_update_freq_hz(struct clocksource *cs, u32 hz)
|
||||
{
|
||||
__clocksource_updatefreq_scale(cs, 1, hz);
|
||||
__clocksource_update_freq_scale(cs, 1, hz);
|
||||
}
|
||||
|
||||
static inline void __clocksource_updatefreq_khz(struct clocksource *cs, u32 khz)
|
||||
static inline void __clocksource_update_freq_khz(struct clocksource *cs, u32 khz)
|
||||
{
|
||||
__clocksource_updatefreq_scale(cs, 1000, khz);
|
||||
__clocksource_update_freq_scale(cs, 1000, khz);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -16,16 +16,16 @@
|
||||
struct cma;
|
||||
|
||||
extern unsigned long totalcma_pages;
|
||||
extern phys_addr_t cma_get_base(struct cma *cma);
|
||||
extern unsigned long cma_get_size(struct cma *cma);
|
||||
extern phys_addr_t cma_get_base(const struct cma *cma);
|
||||
extern unsigned long cma_get_size(const struct cma *cma);
|
||||
|
||||
extern int __init cma_declare_contiguous(phys_addr_t base,
|
||||
phys_addr_t size, phys_addr_t limit,
|
||||
phys_addr_t alignment, unsigned int order_per_bit,
|
||||
bool fixed, struct cma **res_cma);
|
||||
extern int cma_init_reserved_mem(phys_addr_t base,
|
||||
phys_addr_t size, int order_per_bit,
|
||||
extern int cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
|
||||
unsigned int order_per_bit,
|
||||
struct cma **res_cma);
|
||||
extern struct page *cma_alloc(struct cma *cma, int count, unsigned int align);
|
||||
extern bool cma_release(struct cma *cma, struct page *pages, int count);
|
||||
extern struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align);
|
||||
extern bool cma_release(struct cma *cma, const struct page *pages, unsigned int count);
|
||||
#endif
|
||||
|
@@ -34,6 +34,7 @@ extern int sysctl_compaction_handler(struct ctl_table *table, int write,
|
||||
extern int sysctl_extfrag_threshold;
|
||||
extern int sysctl_extfrag_handler(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *length, loff_t *ppos);
|
||||
extern int sysctl_compact_unevictable_allowed;
|
||||
|
||||
extern int fragmentation_index(struct zone *zone, unsigned int order);
|
||||
extern unsigned long try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
|
||||
|
@@ -192,29 +192,16 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
||||
|
||||
#include <uapi/linux/types.h>
|
||||
|
||||
static __always_inline void data_access_exceeds_word_size(void)
|
||||
#ifdef __compiletime_warning
|
||||
__compiletime_warning("data access exceeds word size and won't be atomic")
|
||||
#endif
|
||||
;
|
||||
|
||||
static __always_inline void data_access_exceeds_word_size(void)
|
||||
{
|
||||
}
|
||||
|
||||
static __always_inline void __read_once_size(const volatile void *p, void *res, int size)
|
||||
{
|
||||
switch (size) {
|
||||
case 1: *(__u8 *)res = *(volatile __u8 *)p; break;
|
||||
case 2: *(__u16 *)res = *(volatile __u16 *)p; break;
|
||||
case 4: *(__u32 *)res = *(volatile __u32 *)p; break;
|
||||
#ifdef CONFIG_64BIT
|
||||
case 8: *(__u64 *)res = *(volatile __u64 *)p; break;
|
||||
#endif
|
||||
default:
|
||||
barrier();
|
||||
__builtin_memcpy((void *)res, (const void *)p, size);
|
||||
data_access_exceeds_word_size();
|
||||
barrier();
|
||||
}
|
||||
}
|
||||
@@ -225,13 +212,10 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
||||
case 1: *(volatile __u8 *)p = *(__u8 *)res; break;
|
||||
case 2: *(volatile __u16 *)p = *(__u16 *)res; break;
|
||||
case 4: *(volatile __u32 *)p = *(__u32 *)res; break;
|
||||
#ifdef CONFIG_64BIT
|
||||
case 8: *(volatile __u64 *)p = *(__u64 *)res; break;
|
||||
#endif
|
||||
default:
|
||||
barrier();
|
||||
__builtin_memcpy((void *)p, (const void *)res, size);
|
||||
data_access_exceeds_word_size();
|
||||
barrier();
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,8 @@
|
||||
#ifdef CONFIG_CONTEXT_TRACKING
|
||||
extern void context_tracking_cpu_set(int cpu);
|
||||
|
||||
extern void context_tracking_enter(enum ctx_state state);
|
||||
extern void context_tracking_exit(enum ctx_state state);
|
||||
extern void context_tracking_user_enter(void);
|
||||
extern void context_tracking_user_exit(void);
|
||||
extern void __context_tracking_task_switch(struct task_struct *prev,
|
||||
@@ -35,7 +37,8 @@ static inline enum ctx_state exception_enter(void)
|
||||
return 0;
|
||||
|
||||
prev_ctx = this_cpu_read(context_tracking.state);
|
||||
context_tracking_user_exit();
|
||||
if (prev_ctx != CONTEXT_KERNEL)
|
||||
context_tracking_exit(prev_ctx);
|
||||
|
||||
return prev_ctx;
|
||||
}
|
||||
@@ -43,8 +46,8 @@ static inline enum ctx_state exception_enter(void)
|
||||
static inline void exception_exit(enum ctx_state prev_ctx)
|
||||
{
|
||||
if (context_tracking_is_enabled()) {
|
||||
if (prev_ctx == IN_USER)
|
||||
context_tracking_user_enter();
|
||||
if (prev_ctx != CONTEXT_KERNEL)
|
||||
context_tracking_enter(prev_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,10 +81,16 @@ static inline void guest_enter(void)
|
||||
vtime_guest_enter(current);
|
||||
else
|
||||
current->flags |= PF_VCPU;
|
||||
|
||||
if (context_tracking_is_enabled())
|
||||
context_tracking_enter(CONTEXT_GUEST);
|
||||
}
|
||||
|
||||
static inline void guest_exit(void)
|
||||
{
|
||||
if (context_tracking_is_enabled())
|
||||
context_tracking_exit(CONTEXT_GUEST);
|
||||
|
||||
if (vtime_accounting_enabled())
|
||||
vtime_guest_exit(current);
|
||||
else
|
||||
|
@@ -13,8 +13,9 @@ struct context_tracking {
|
||||
*/
|
||||
bool active;
|
||||
enum ctx_state {
|
||||
IN_KERNEL = 0,
|
||||
IN_USER,
|
||||
CONTEXT_KERNEL = 0,
|
||||
CONTEXT_USER,
|
||||
CONTEXT_GUEST,
|
||||
} state;
|
||||
};
|
||||
|
||||
@@ -34,11 +35,13 @@ static inline bool context_tracking_cpu_is_enabled(void)
|
||||
|
||||
static inline bool context_tracking_in_user(void)
|
||||
{
|
||||
return __this_cpu_read(context_tracking.state) == IN_USER;
|
||||
return __this_cpu_read(context_tracking.state) == CONTEXT_USER;
|
||||
}
|
||||
#else
|
||||
static inline bool context_tracking_in_user(void) { return false; }
|
||||
static inline bool context_tracking_active(void) { return false; }
|
||||
static inline bool context_tracking_is_enabled(void) { return false; }
|
||||
static inline bool context_tracking_cpu_is_enabled(void) { return false; }
|
||||
#endif /* CONFIG_CONTEXT_TRACKING */
|
||||
|
||||
#endif
|
||||
|
@@ -73,6 +73,7 @@ enum {
|
||||
/* migration should happen before other stuff but after perf */
|
||||
CPU_PRI_PERF = 20,
|
||||
CPU_PRI_MIGRATION = 10,
|
||||
CPU_PRI_SMPBOOT = 9,
|
||||
/* bring up workqueues before normal notifiers and down after */
|
||||
CPU_PRI_WORKQUEUE_UP = 5,
|
||||
CPU_PRI_WORKQUEUE_DOWN = -5,
|
||||
@@ -95,6 +96,10 @@ enum {
|
||||
* Called on the new cpu, just before
|
||||
* enabling interrupts. Must not sleep,
|
||||
* must not fail */
|
||||
#define CPU_DYING_IDLE 0x000B /* CPU (unsigned)v dying, reached
|
||||
* idle loop. */
|
||||
#define CPU_BROKEN 0x000C /* CPU (unsigned)v did not die properly,
|
||||
* perhaps due to preemption. */
|
||||
|
||||
/* Used for CPU hotplug events occurring while tasks are frozen due to a suspend
|
||||
* operation in progress
|
||||
@@ -161,6 +166,7 @@ static inline void __unregister_cpu_notifier(struct notifier_block *nb)
|
||||
}
|
||||
#endif
|
||||
|
||||
void smpboot_thread_init(void);
|
||||
int cpu_up(unsigned int cpu);
|
||||
void notify_cpu_starting(unsigned int cpu);
|
||||
extern void cpu_maps_update_begin(void);
|
||||
@@ -208,6 +214,10 @@ static inline void cpu_notifier_register_done(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void smpboot_thread_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
extern struct bus_type cpu_subsys;
|
||||
|
||||
@@ -271,4 +281,14 @@ void arch_cpu_idle_enter(void);
|
||||
void arch_cpu_idle_exit(void);
|
||||
void arch_cpu_idle_dead(void);
|
||||
|
||||
DECLARE_PER_CPU(bool, cpu_dead_idle);
|
||||
|
||||
int cpu_report_state(int cpu);
|
||||
int cpu_check_up_prepare(int cpu);
|
||||
void cpu_set_state_online(int cpu);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
bool cpu_wait_death(unsigned int cpu, int seconds);
|
||||
bool cpu_report_death(void);
|
||||
#endif /* #ifdef CONFIG_HOTPLUG_CPU */
|
||||
|
||||
#endif /* _LINUX_CPU_H_ */
|
||||
|
@@ -77,7 +77,6 @@ struct cpuidle_device {
|
||||
unsigned int cpu;
|
||||
|
||||
int last_residency;
|
||||
int state_count;
|
||||
struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX];
|
||||
struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX];
|
||||
struct cpuidle_driver_kobj *kobj_driver;
|
||||
|
@@ -62,9 +62,27 @@ do { \
|
||||
groups_free(group_info); \
|
||||
} while (0)
|
||||
|
||||
extern struct group_info *groups_alloc(int);
|
||||
extern struct group_info init_groups;
|
||||
#ifdef CONFIG_MULTIUSER
|
||||
extern struct group_info *groups_alloc(int);
|
||||
extern void groups_free(struct group_info *);
|
||||
|
||||
extern int in_group_p(kgid_t);
|
||||
extern int in_egroup_p(kgid_t);
|
||||
#else
|
||||
static inline void groups_free(struct group_info *group_info)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int in_group_p(kgid_t grp)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
static inline int in_egroup_p(kgid_t grp)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
extern int set_current_groups(struct group_info *);
|
||||
extern void set_groups(struct cred *, struct group_info *);
|
||||
extern int groups_search(const struct group_info *, kgid_t);
|
||||
@@ -74,9 +92,6 @@ extern bool may_setgroups(void);
|
||||
#define GROUP_AT(gi, i) \
|
||||
((gi)->blocks[(i) / NGROUPS_PER_BLOCK][(i) % NGROUPS_PER_BLOCK])
|
||||
|
||||
extern int in_group_p(kgid_t);
|
||||
extern int in_egroup_p(kgid_t);
|
||||
|
||||
/*
|
||||
* The security context of a task
|
||||
*
|
||||
|
@@ -94,6 +94,12 @@
|
||||
*/
|
||||
#define CRYPTO_ALG_KERN_DRIVER_ONLY 0x00001000
|
||||
|
||||
/*
|
||||
* Mark a cipher as a service implementation only usable by another
|
||||
* cipher and never by a normal user of the kernel crypto API
|
||||
*/
|
||||
#define CRYPTO_ALG_INTERNAL 0x00002000
|
||||
|
||||
/*
|
||||
* Transform masks and values (for crt_flags).
|
||||
*/
|
||||
|
@@ -404,26 +404,11 @@ static inline bool d_mountpoint(const struct dentry *dentry)
|
||||
/*
|
||||
* Directory cache entry type accessor functions.
|
||||
*/
|
||||
static inline void __d_set_type(struct dentry *dentry, unsigned type)
|
||||
{
|
||||
dentry->d_flags = (dentry->d_flags & ~DCACHE_ENTRY_TYPE) | type;
|
||||
}
|
||||
|
||||
static inline void __d_clear_type(struct dentry *dentry)
|
||||
{
|
||||
__d_set_type(dentry, DCACHE_MISS_TYPE);
|
||||
}
|
||||
|
||||
static inline void d_set_type(struct dentry *dentry, unsigned type)
|
||||
{
|
||||
spin_lock(&dentry->d_lock);
|
||||
__d_set_type(dentry, type);
|
||||
spin_unlock(&dentry->d_lock);
|
||||
}
|
||||
|
||||
static inline unsigned __d_entry_type(const struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_flags & DCACHE_ENTRY_TYPE;
|
||||
unsigned type = READ_ONCE(dentry->d_flags);
|
||||
smp_rmb();
|
||||
return type & DCACHE_ENTRY_TYPE;
|
||||
}
|
||||
|
||||
static inline bool d_is_miss(const struct dentry *dentry)
|
||||
@@ -482,6 +467,44 @@ static inline bool d_is_positive(const struct dentry *dentry)
|
||||
return !d_is_negative(dentry);
|
||||
}
|
||||
|
||||
/**
|
||||
* d_really_is_negative - Determine if a dentry is really negative (ignoring fallthroughs)
|
||||
* @dentry: The dentry in question
|
||||
*
|
||||
* Returns true if the dentry represents either an absent name or a name that
|
||||
* doesn't map to an inode (ie. ->d_inode is NULL). The dentry could represent
|
||||
* a true miss, a whiteout that isn't represented by a 0,0 chardev or a
|
||||
* fallthrough marker in an opaque directory.
|
||||
*
|
||||
* Note! (1) This should be used *only* by a filesystem to examine its own
|
||||
* dentries. It should not be used to look at some other filesystem's
|
||||
* dentries. (2) It should also be used in combination with d_inode() to get
|
||||
* the inode. (3) The dentry may have something attached to ->d_lower and the
|
||||
* type field of the flags may be set to something other than miss or whiteout.
|
||||
*/
|
||||
static inline bool d_really_is_negative(const struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode == NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* d_really_is_positive - Determine if a dentry is really positive (ignoring fallthroughs)
|
||||
* @dentry: The dentry in question
|
||||
*
|
||||
* Returns true if the dentry represents a name that maps to an inode
|
||||
* (ie. ->d_inode is not NULL). The dentry might still represent a whiteout if
|
||||
* that is represented on medium as a 0,0 chardev.
|
||||
*
|
||||
* Note! (1) This should be used *only* by a filesystem to examine its own
|
||||
* dentries. It should not be used to look at some other filesystem's
|
||||
* dentries. (2) It should also be used in combination with d_inode() to get
|
||||
* the inode.
|
||||
*/
|
||||
static inline bool d_really_is_positive(const struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode != NULL;
|
||||
}
|
||||
|
||||
extern void d_set_fallthru(struct dentry *dentry);
|
||||
|
||||
static inline bool d_is_fallthru(const struct dentry *dentry)
|
||||
|
@@ -43,6 +43,7 @@ enum dccp_state {
|
||||
DCCP_CLOSING = TCP_CLOSING,
|
||||
DCCP_TIME_WAIT = TCP_TIME_WAIT,
|
||||
DCCP_CLOSED = TCP_CLOSE,
|
||||
DCCP_NEW_SYN_RECV = TCP_NEW_SYN_RECV,
|
||||
DCCP_PARTOPEN = TCP_MAX_STATES,
|
||||
DCCP_PASSIVE_CLOSEREQ, /* clients receiving CloseReq */
|
||||
DCCP_MAX_STATES
|
||||
@@ -57,6 +58,7 @@ enum {
|
||||
DCCPF_CLOSING = TCPF_CLOSING,
|
||||
DCCPF_TIME_WAIT = TCPF_TIME_WAIT,
|
||||
DCCPF_CLOSED = TCPF_CLOSE,
|
||||
DCCPF_NEW_SYN_RECV = TCPF_NEW_SYN_RECV,
|
||||
DCCPF_PARTOPEN = (1 << DCCP_PARTOPEN),
|
||||
};
|
||||
|
||||
@@ -317,6 +319,6 @@ static inline const char *dccp_role(const struct sock *sk)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern void dccp_syn_ack_timeout(struct sock *sk, struct request_sock *req);
|
||||
extern void dccp_syn_ack_timeout(const struct request_sock *req);
|
||||
|
||||
#endif /* _LINUX_DCCP_H */
|
||||
|
@@ -91,7 +91,7 @@ struct devfreq_event_desc {
|
||||
const char *name;
|
||||
void *driver_data;
|
||||
|
||||
struct devfreq_event_ops *ops;
|
||||
const struct devfreq_event_ops *ops;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_PM_DEVFREQ_EVENT)
|
||||
|
@@ -605,9 +605,4 @@ static inline unsigned long to_bytes(sector_t n)
|
||||
return (n << SECTOR_SHIFT);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------
|
||||
* Helper for block layer and dm core operations
|
||||
*---------------------------------------------------------------*/
|
||||
int dm_underlying_device_busy(struct request_queue *q);
|
||||
|
||||
#endif /* _LINUX_DEVICE_MAPPER_H */
|
||||
|
@@ -38,6 +38,7 @@ struct class;
|
||||
struct subsys_private;
|
||||
struct bus_type;
|
||||
struct device_node;
|
||||
struct fwnode_handle;
|
||||
struct iommu_ops;
|
||||
struct iommu_group;
|
||||
|
||||
@@ -650,14 +651,6 @@ struct device_dma_parameters {
|
||||
unsigned long segment_boundary_mask;
|
||||
};
|
||||
|
||||
struct acpi_device;
|
||||
|
||||
struct acpi_dev_node {
|
||||
#ifdef CONFIG_ACPI
|
||||
struct acpi_device *companion;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* struct device - The basic device structure
|
||||
* @parent: The device's "parent" device, the device to which it is attached.
|
||||
@@ -703,7 +696,7 @@ struct acpi_dev_node {
|
||||
* @cma_area: Contiguous memory area for dma allocations
|
||||
* @archdata: For arch-specific additions.
|
||||
* @of_node: Associated device tree node.
|
||||
* @acpi_node: Associated ACPI device node.
|
||||
* @fwnode: Associated device node supplied by platform firmware.
|
||||
* @devt: For creating the sysfs "dev".
|
||||
* @id: device instance
|
||||
* @devres_lock: Spinlock to protect the resource of the device.
|
||||
@@ -779,7 +772,7 @@ struct device {
|
||||
struct dev_archdata archdata;
|
||||
|
||||
struct device_node *of_node; /* associated device tree node */
|
||||
struct acpi_dev_node acpi_node; /* associated ACPI device node */
|
||||
struct fwnode_handle *fwnode; /* firmware device node */
|
||||
|
||||
dev_t devt; /* dev_t, creates the sysfs "dev" */
|
||||
u32 id; /* device instance */
|
||||
@@ -916,6 +909,13 @@ static inline void device_lock_assert(struct device *dev)
|
||||
lockdep_assert_held(&dev->mutex);
|
||||
}
|
||||
|
||||
static inline struct device_node *dev_of_node(struct device *dev)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_OF))
|
||||
return NULL;
|
||||
return dev->of_node;
|
||||
}
|
||||
|
||||
void driver_init(void);
|
||||
|
||||
/*
|
||||
@@ -947,6 +947,9 @@ extern void unlock_device_hotplug(void);
|
||||
extern int lock_device_hotplug_sysfs(void);
|
||||
extern int device_offline(struct device *dev);
|
||||
extern int device_online(struct device *dev);
|
||||
extern void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode);
|
||||
extern void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode);
|
||||
|
||||
/*
|
||||
* Root device objects for grouping under /sys/devices
|
||||
*/
|
||||
|
@@ -34,6 +34,10 @@ struct dma_map_ops {
|
||||
void (*unmap_page)(struct device *dev, dma_addr_t dma_handle,
|
||||
size_t size, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs);
|
||||
/*
|
||||
* map_sg returns 0 on error and a value > 0 on success.
|
||||
* It should never return a value < 0.
|
||||
*/
|
||||
int (*map_sg)(struct device *dev, struct scatterlist *sg,
|
||||
int nents, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs);
|
||||
|
@@ -14,6 +14,8 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/scatterlist.h>
|
||||
|
||||
struct device;
|
||||
|
||||
struct dma_pool *dma_pool_create(const char *name, struct device *dev,
|
||||
size_t size, size_t align, size_t allocation);
|
||||
|
||||
|
@@ -942,6 +942,7 @@ extern int __init efi_setup_pcdp_console(char *);
|
||||
#define EFI_64BIT 5 /* Is the firmware 64-bit? */
|
||||
#define EFI_PARAVIRT 6 /* Access is via a paravirt interface */
|
||||
#define EFI_ARCH_1 7 /* First arch-specific bit */
|
||||
#define EFI_DBG 8 /* Print additional debug info at runtime */
|
||||
|
||||
#ifdef CONFIG_EFI
|
||||
/*
|
||||
|
22
include/linux/elf-randomize.h
Normal file
22
include/linux/elf-randomize.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef _ELF_RANDOMIZE_H
|
||||
#define _ELF_RANDOMIZE_H
|
||||
|
||||
struct mm_struct;
|
||||
|
||||
#ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE
|
||||
static inline unsigned long arch_mmap_rnd(void) { return 0; }
|
||||
# if defined(arch_randomize_brk) && defined(CONFIG_COMPAT_BRK)
|
||||
# define compat_brk_randomized
|
||||
# endif
|
||||
# ifndef arch_randomize_brk
|
||||
# define arch_randomize_brk(mm) (mm->brk)
|
||||
# endif
|
||||
#else
|
||||
extern unsigned long arch_mmap_rnd(void);
|
||||
extern unsigned long arch_randomize_brk(struct mm_struct *mm);
|
||||
# ifdef CONFIG_COMPAT_BRK
|
||||
# define compat_brk_randomized
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif
|
@@ -35,7 +35,6 @@ extern const struct header_ops eth_header_ops;
|
||||
|
||||
int eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
|
||||
const void *daddr, const void *saddr, unsigned len);
|
||||
int eth_rebuild_header(struct sk_buff *skb);
|
||||
int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr);
|
||||
int eth_header_cache(const struct neighbour *neigh, struct hh_cache *hh,
|
||||
__be16 type);
|
||||
|
@@ -153,7 +153,7 @@ struct f2fs_orphan_block {
|
||||
*/
|
||||
struct f2fs_extent {
|
||||
__le32 fofs; /* start file offset of the extent */
|
||||
__le32 blk_addr; /* start block address of the extent */
|
||||
__le32 blk; /* start block address of the extent */
|
||||
__le32 len; /* lengh of the extent */
|
||||
} __packed;
|
||||
|
||||
@@ -178,6 +178,7 @@ struct f2fs_extent {
|
||||
#define F2FS_INLINE_DATA 0x02 /* file inline data flag */
|
||||
#define F2FS_INLINE_DENTRY 0x04 /* file inline dentry flag */
|
||||
#define F2FS_DATA_EXIST 0x08 /* file inline data exist flag */
|
||||
#define F2FS_INLINE_DOTS 0x10 /* file having implicit dot dentries */
|
||||
|
||||
#define MAX_INLINE_DATA (sizeof(__le32) * (DEF_ADDRS_PER_INODE - \
|
||||
F2FS_INLINE_XATTR_ADDRS - 1))
|
||||
|
@@ -145,8 +145,6 @@ struct bpf_prog_aux;
|
||||
.off = 0, \
|
||||
.imm = ((__u64) (IMM)) >> 32 })
|
||||
|
||||
#define BPF_PSEUDO_MAP_FD 1
|
||||
|
||||
/* pseudo BPF_LD_IMM64 insn used to refer to process-local map_fd */
|
||||
#define BPF_LD_MAP_FD(DST, MAP_FD) \
|
||||
BPF_LD_IMM64_RAW(DST, BPF_PSEUDO_MAP_FD, MAP_FD)
|
||||
@@ -310,9 +308,11 @@ struct bpf_binary_header {
|
||||
struct bpf_prog {
|
||||
u16 pages; /* Number of allocated pages */
|
||||
bool jited; /* Is our filter JIT'ed? */
|
||||
bool gpl_compatible; /* Is our filter GPL compatible? */
|
||||
u32 len; /* Number of filter blocks */
|
||||
struct sock_fprog_kern *orig_prog; /* Original BPF program */
|
||||
enum bpf_prog_type type; /* Type of BPF program */
|
||||
struct bpf_prog_aux *aux; /* Auxiliary fields */
|
||||
struct sock_fprog_kern *orig_prog; /* Original BPF program */
|
||||
unsigned int (*bpf_func)(const struct sk_buff *skb,
|
||||
const struct bpf_insn *filter);
|
||||
/* Instructions for interpreter */
|
||||
@@ -454,6 +454,7 @@ static inline u16 bpf_anc_helper(const struct sock_filter *ftest)
|
||||
BPF_ANCILLARY(VLAN_TAG_PRESENT);
|
||||
BPF_ANCILLARY(PAY_OFFSET);
|
||||
BPF_ANCILLARY(RANDOM);
|
||||
BPF_ANCILLARY(VLAN_TPID);
|
||||
}
|
||||
/* Fallthrough. */
|
||||
default:
|
||||
|
@@ -314,6 +314,33 @@ struct page;
|
||||
struct address_space;
|
||||
struct writeback_control;
|
||||
|
||||
#define IOCB_EVENTFD (1 << 0)
|
||||
#define IOCB_APPEND (1 << 1)
|
||||
#define IOCB_DIRECT (1 << 2)
|
||||
|
||||
struct kiocb {
|
||||
struct file *ki_filp;
|
||||
loff_t ki_pos;
|
||||
void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
|
||||
void *private;
|
||||
int ki_flags;
|
||||
};
|
||||
|
||||
static inline bool is_sync_kiocb(struct kiocb *kiocb)
|
||||
{
|
||||
return kiocb->ki_complete == NULL;
|
||||
}
|
||||
|
||||
static inline int iocb_flags(struct file *file);
|
||||
|
||||
static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
|
||||
{
|
||||
*kiocb = (struct kiocb) {
|
||||
.ki_filp = filp,
|
||||
.ki_flags = iocb_flags(filp),
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* "descriptor" for what we're up to with a read.
|
||||
* This allows us to use the same read code yet
|
||||
@@ -361,7 +388,7 @@ struct address_space_operations {
|
||||
void (*invalidatepage) (struct page *, unsigned int, unsigned int);
|
||||
int (*releasepage) (struct page *, gfp_t);
|
||||
void (*freepage)(struct page *);
|
||||
ssize_t (*direct_IO)(int, struct kiocb *, struct iov_iter *iter, loff_t offset);
|
||||
ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *iter, loff_t offset);
|
||||
/*
|
||||
* migrate the contents of a page to the specified target. If
|
||||
* migrate_mode is MIGRATE_ASYNC, it must not block.
|
||||
@@ -848,6 +875,7 @@ static inline struct file *get_file(struct file *f)
|
||||
atomic_long_inc(&f->f_count);
|
||||
return f;
|
||||
}
|
||||
#define get_file_rcu(x) atomic_long_inc_not_zero(&(x)->f_count)
|
||||
#define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1)
|
||||
#define file_count(x) atomic_long_read(&(x)->f_count)
|
||||
|
||||
@@ -893,8 +921,8 @@ struct file_lock_operations {
|
||||
struct lock_manager_operations {
|
||||
int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
|
||||
unsigned long (*lm_owner_key)(struct file_lock *);
|
||||
void (*lm_get_owner)(struct file_lock *, struct file_lock *);
|
||||
void (*lm_put_owner)(struct file_lock *);
|
||||
fl_owner_t (*lm_get_owner)(fl_owner_t);
|
||||
void (*lm_put_owner)(fl_owner_t);
|
||||
void (*lm_notify)(struct file_lock *); /* unblock callback */
|
||||
int (*lm_grant)(struct file_lock *, int);
|
||||
bool (*lm_break)(struct file_lock *);
|
||||
@@ -1019,6 +1047,9 @@ extern void lease_get_mtime(struct inode *, struct timespec *time);
|
||||
extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
|
||||
extern int vfs_setlease(struct file *, long, struct file_lock **, void **);
|
||||
extern int lease_modify(struct file_lock *, int, struct list_head *);
|
||||
struct files_struct;
|
||||
extern void show_fd_locks(struct seq_file *f,
|
||||
struct file *filp, struct files_struct *files);
|
||||
#else /* !CONFIG_FILE_LOCKING */
|
||||
static inline int fcntl_getlk(struct file *file, unsigned int cmd,
|
||||
struct flock __user *user)
|
||||
@@ -1155,6 +1186,10 @@ static inline int lease_modify(struct file_lock *fl, int arg,
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
struct files_struct;
|
||||
static inline void show_fd_locks(struct seq_file *f,
|
||||
struct file *filp, struct files_struct *files) {}
|
||||
#endif /* !CONFIG_FILE_LOCKING */
|
||||
|
||||
|
||||
@@ -1540,8 +1575,6 @@ struct file_operations {
|
||||
loff_t (*llseek) (struct file *, loff_t, int);
|
||||
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
|
||||
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
|
||||
ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
|
||||
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
|
||||
ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
|
||||
ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
|
||||
int (*iterate) (struct file *, struct dir_context *);
|
||||
@@ -1549,7 +1582,7 @@ struct file_operations {
|
||||
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
|
||||
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
|
||||
int (*mmap) (struct file *, struct vm_area_struct *);
|
||||
void (*mremap)(struct file *, struct vm_area_struct *);
|
||||
int (*mremap)(struct file *, struct vm_area_struct *);
|
||||
int (*open) (struct inode *, struct file *);
|
||||
int (*flush) (struct file *, fl_owner_t id);
|
||||
int (*release) (struct inode *, struct file *);
|
||||
@@ -1617,6 +1650,7 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
|
||||
struct iovec **ret_pointer);
|
||||
|
||||
extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
|
||||
extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
|
||||
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
|
||||
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
|
||||
extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
|
||||
@@ -2145,7 +2179,7 @@ struct filename {
|
||||
const __user char *uptr; /* original userland pointer */
|
||||
struct audit_names *aname;
|
||||
int refcnt;
|
||||
bool separate; /* should "name" be freed? */
|
||||
const char iname[];
|
||||
};
|
||||
|
||||
extern long vfs_truncate(struct path *, loff_t);
|
||||
@@ -2545,16 +2579,12 @@ extern int sb_min_blocksize(struct super_block *, int);
|
||||
|
||||
extern int generic_file_mmap(struct file *, struct vm_area_struct *);
|
||||
extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
|
||||
int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk);
|
||||
extern ssize_t generic_write_checks(struct kiocb *, struct iov_iter *);
|
||||
extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
|
||||
extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
|
||||
extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
|
||||
extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *, loff_t);
|
||||
extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
|
||||
extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
|
||||
extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
|
||||
extern ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);
|
||||
extern ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);
|
||||
|
||||
ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos);
|
||||
ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos);
|
||||
@@ -2592,12 +2622,13 @@ extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
|
||||
extern int generic_file_open(struct inode * inode, struct file * filp);
|
||||
extern int nonseekable_open(struct inode * inode, struct file * filp);
|
||||
|
||||
ssize_t dax_do_io(int rw, struct kiocb *, struct inode *, struct iov_iter *,
|
||||
loff_t, get_block_t, dio_iodone_t, int flags);
|
||||
ssize_t dax_do_io(struct kiocb *, struct inode *, struct iov_iter *, loff_t,
|
||||
get_block_t, dio_iodone_t, int flags);
|
||||
int dax_clear_blocks(struct inode *, sector_t block, long size);
|
||||
int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t);
|
||||
int dax_truncate_page(struct inode *, loff_t from, get_block_t);
|
||||
int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t);
|
||||
int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *);
|
||||
#define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb)
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
@@ -2617,16 +2648,18 @@ enum {
|
||||
|
||||
void dio_end_io(struct bio *bio, int error);
|
||||
|
||||
ssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
|
||||
struct block_device *bdev, struct iov_iter *iter, loff_t offset,
|
||||
get_block_t get_block, dio_iodone_t end_io,
|
||||
dio_submit_t submit_io, int flags);
|
||||
ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
|
||||
struct block_device *bdev, struct iov_iter *iter,
|
||||
loff_t offset, get_block_t get_block,
|
||||
dio_iodone_t end_io, dio_submit_t submit_io,
|
||||
int flags);
|
||||
|
||||
static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb,
|
||||
struct inode *inode, struct iov_iter *iter, loff_t offset,
|
||||
get_block_t get_block)
|
||||
static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
|
||||
struct inode *inode,
|
||||
struct iov_iter *iter, loff_t offset,
|
||||
get_block_t get_block)
|
||||
{
|
||||
return __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iter,
|
||||
return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
|
||||
offset, get_block, NULL, NULL,
|
||||
DIO_LOCKING | DIO_SKIP_HOLES);
|
||||
}
|
||||
@@ -2662,7 +2695,6 @@ void inode_sub_bytes(struct inode *inode, loff_t bytes);
|
||||
loff_t inode_get_bytes(struct inode *inode);
|
||||
void inode_set_bytes(struct inode *inode, loff_t bytes);
|
||||
|
||||
extern int vfs_readdir(struct file *, filldir_t, void *);
|
||||
extern int iterate_dir(struct file *, struct dir_context *);
|
||||
|
||||
extern int vfs_stat(const char __user *, struct kstat *);
|
||||
@@ -2760,6 +2792,16 @@ static inline bool io_is_direct(struct file *filp)
|
||||
return (filp->f_flags & O_DIRECT) || IS_DAX(file_inode(filp));
|
||||
}
|
||||
|
||||
static inline int iocb_flags(struct file *file)
|
||||
{
|
||||
int res = 0;
|
||||
if (file->f_flags & O_APPEND)
|
||||
res |= IOCB_APPEND;
|
||||
if (io_is_direct(file))
|
||||
res |= IOCB_DIRECT;
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline ino_t parent_ino(struct dentry *dentry)
|
||||
{
|
||||
ino_t res;
|
||||
|
@@ -13,6 +13,8 @@ struct vfsmount;
|
||||
static inline void init_fs_pin(struct fs_pin *p, void (*kill)(struct fs_pin *))
|
||||
{
|
||||
init_waitqueue_head(&p->wait);
|
||||
INIT_HLIST_NODE(&p->s_list);
|
||||
INIT_HLIST_NODE(&p->m_list);
|
||||
p->kill = kill;
|
||||
}
|
||||
|
||||
|
@@ -13,6 +13,7 @@ struct trace_array;
|
||||
struct trace_buffer;
|
||||
struct tracer;
|
||||
struct dentry;
|
||||
struct bpf_prog;
|
||||
|
||||
struct trace_print_flags {
|
||||
unsigned long mask;
|
||||
@@ -202,7 +203,7 @@ enum trace_reg {
|
||||
struct ftrace_event_call;
|
||||
|
||||
struct ftrace_event_class {
|
||||
char *system;
|
||||
const char *system;
|
||||
void *probe;
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
void *perf_probe;
|
||||
@@ -252,6 +253,7 @@ enum {
|
||||
TRACE_EVENT_FL_WAS_ENABLED_BIT,
|
||||
TRACE_EVENT_FL_USE_CALL_FILTER_BIT,
|
||||
TRACE_EVENT_FL_TRACEPOINT_BIT,
|
||||
TRACE_EVENT_FL_KPROBE_BIT,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -265,6 +267,7 @@ enum {
|
||||
* it is best to clear the buffers that used it).
|
||||
* USE_CALL_FILTER - For ftrace internal events, don't use file filter
|
||||
* TRACEPOINT - Event is a tracepoint
|
||||
* KPROBE - Event is a kprobe
|
||||
*/
|
||||
enum {
|
||||
TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT),
|
||||
@@ -274,6 +277,7 @@ enum {
|
||||
TRACE_EVENT_FL_WAS_ENABLED = (1 << TRACE_EVENT_FL_WAS_ENABLED_BIT),
|
||||
TRACE_EVENT_FL_USE_CALL_FILTER = (1 << TRACE_EVENT_FL_USE_CALL_FILTER_BIT),
|
||||
TRACE_EVENT_FL_TRACEPOINT = (1 << TRACE_EVENT_FL_TRACEPOINT_BIT),
|
||||
TRACE_EVENT_FL_KPROBE = (1 << TRACE_EVENT_FL_KPROBE_BIT),
|
||||
};
|
||||
|
||||
struct ftrace_event_call {
|
||||
@@ -285,7 +289,7 @@ struct ftrace_event_call {
|
||||
struct tracepoint *tp;
|
||||
};
|
||||
struct trace_event event;
|
||||
const char *print_fmt;
|
||||
char *print_fmt;
|
||||
struct event_filter *filter;
|
||||
void *mod;
|
||||
void *data;
|
||||
@@ -303,6 +307,7 @@ struct ftrace_event_call {
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
int perf_refcount;
|
||||
struct hlist_head __percpu *perf_events;
|
||||
struct bpf_prog *prog;
|
||||
|
||||
int (*perf_perm)(struct ftrace_event_call *,
|
||||
struct perf_event *);
|
||||
@@ -548,6 +553,15 @@ event_trigger_unlock_commit_regs(struct ftrace_event_file *file,
|
||||
event_triggers_post_call(file, tt);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BPF_SYSCALL
|
||||
unsigned int trace_call_bpf(struct bpf_prog *prog, void *ctx);
|
||||
#else
|
||||
static inline unsigned int trace_call_bpf(struct bpf_prog *prog, void *ctx)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
enum {
|
||||
FILTER_OTHER = 0,
|
||||
FILTER_STATIC_STRING,
|
||||
|
27
include/linux/fwnode.h
Normal file
27
include/linux/fwnode.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* fwnode.h - Firmware device node object handle type definition.
|
||||
*
|
||||
* Copyright (C) 2015, Intel Corporation
|
||||
* Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_FWNODE_H_
|
||||
#define _LINUX_FWNODE_H_
|
||||
|
||||
enum fwnode_type {
|
||||
FWNODE_INVALID = 0,
|
||||
FWNODE_OF,
|
||||
FWNODE_ACPI,
|
||||
FWNODE_PDATA,
|
||||
};
|
||||
|
||||
struct fwnode_handle {
|
||||
enum fwnode_type type;
|
||||
struct fwnode_handle *secondary;
|
||||
};
|
||||
|
||||
#endif
|
@@ -57,8 +57,10 @@ struct vm_area_struct;
|
||||
* _might_ fail. This depends upon the particular VM implementation.
|
||||
*
|
||||
* __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
|
||||
* cannot handle allocation failures. This modifier is deprecated and no new
|
||||
* users should be added.
|
||||
* cannot handle allocation failures. New users should be evaluated carefully
|
||||
* (and the flag should be used only when there is no reasonable failure policy)
|
||||
* but it is definitely preferable to use the flag rather than opencode endless
|
||||
* loop around allocator.
|
||||
*
|
||||
* __GFP_NORETRY: The VM implementation must not retry indefinitely.
|
||||
*
|
||||
@@ -117,16 +119,6 @@ struct vm_area_struct;
|
||||
__GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN | \
|
||||
__GFP_NO_KSWAPD)
|
||||
|
||||
/*
|
||||
* GFP_THISNODE does not perform any reclaim, you most likely want to
|
||||
* use __GFP_THISNODE to allocate from a given node without fallback!
|
||||
*/
|
||||
#ifdef CONFIG_NUMA
|
||||
#define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY)
|
||||
#else
|
||||
#define GFP_THISNODE ((__force gfp_t)0)
|
||||
#endif
|
||||
|
||||
/* This mask makes up all the page movable related flags */
|
||||
#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
|
||||
|
||||
|
@@ -16,6 +16,15 @@ struct device;
|
||||
*/
|
||||
struct gpio_desc;
|
||||
|
||||
/**
|
||||
* Struct containing an array of descriptors that can be obtained using
|
||||
* gpiod_get_array().
|
||||
*/
|
||||
struct gpio_descs {
|
||||
unsigned int ndescs;
|
||||
struct gpio_desc *desc[];
|
||||
};
|
||||
|
||||
#define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
|
||||
#define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
|
||||
#define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
|
||||
@@ -34,6 +43,9 @@ enum gpiod_flags {
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
|
||||
/* Return the number of GPIOs associated with a device / function */
|
||||
int gpiod_count(struct device *dev, const char *con_id);
|
||||
|
||||
/* Acquire and dispose GPIOs */
|
||||
struct gpio_desc *__must_check __gpiod_get(struct device *dev,
|
||||
const char *con_id,
|
||||
@@ -49,7 +61,14 @@ struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev,
|
||||
const char *con_id,
|
||||
unsigned int index,
|
||||
enum gpiod_flags flags);
|
||||
struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
|
||||
const char *con_id,
|
||||
enum gpiod_flags flags);
|
||||
struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
|
||||
const char *con_id,
|
||||
enum gpiod_flags flags);
|
||||
void gpiod_put(struct gpio_desc *desc);
|
||||
void gpiod_put_array(struct gpio_descs *descs);
|
||||
|
||||
struct gpio_desc *__must_check __devm_gpiod_get(struct device *dev,
|
||||
const char *con_id,
|
||||
@@ -64,7 +83,14 @@ struct gpio_desc *__must_check __devm_gpiod_get_optional(struct device *dev,
|
||||
struct gpio_desc *__must_check
|
||||
__devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
|
||||
unsigned int index, enum gpiod_flags flags);
|
||||
struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
|
||||
const char *con_id,
|
||||
enum gpiod_flags flags);
|
||||
struct gpio_descs *__must_check
|
||||
devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
|
||||
enum gpiod_flags flags);
|
||||
void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
|
||||
void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
|
||||
|
||||
int gpiod_get_direction(struct gpio_desc *desc);
|
||||
int gpiod_direction_input(struct gpio_desc *desc);
|
||||
@@ -110,9 +136,15 @@ struct fwnode_handle;
|
||||
struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
|
||||
const char *propname);
|
||||
struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
|
||||
const char *con_id,
|
||||
struct fwnode_handle *child);
|
||||
#else /* CONFIG_GPIOLIB */
|
||||
|
||||
static inline int gpiod_count(struct device *dev, const char *con_id)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct gpio_desc *__must_check __gpiod_get(struct device *dev,
|
||||
const char *con_id,
|
||||
enum gpiod_flags flags)
|
||||
@@ -142,6 +174,20 @@ __gpiod_get_index_optional(struct device *dev, const char *con_id,
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline struct gpio_descs *__must_check
|
||||
gpiod_get_array(struct device *dev, const char *con_id,
|
||||
enum gpiod_flags flags)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline struct gpio_descs *__must_check
|
||||
gpiod_get_array_optional(struct device *dev, const char *con_id,
|
||||
enum gpiod_flags flags)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline void gpiod_put(struct gpio_desc *desc)
|
||||
{
|
||||
might_sleep();
|
||||
@@ -150,6 +196,14 @@ static inline void gpiod_put(struct gpio_desc *desc)
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
static inline void gpiod_put_array(struct gpio_descs *descs)
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
/* GPIO can never have been requested */
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
static inline struct gpio_desc *__must_check
|
||||
__devm_gpiod_get(struct device *dev,
|
||||
const char *con_id,
|
||||
@@ -181,6 +235,20 @@ __devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline struct gpio_descs *__must_check
|
||||
devm_gpiod_get_array(struct device *dev, const char *con_id,
|
||||
enum gpiod_flags flags)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline struct gpio_descs *__must_check
|
||||
devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
|
||||
enum gpiod_flags flags)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
|
||||
{
|
||||
might_sleep();
|
||||
@@ -189,6 +257,15 @@ static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
static inline void devm_gpiod_put_array(struct device *dev,
|
||||
struct gpio_descs *descs)
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
/* GPIO can never have been requested */
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
|
||||
static inline int gpiod_get_direction(const struct gpio_desc *desc)
|
||||
{
|
||||
|
@@ -6,6 +6,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqchip/chained_irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
|
||||
struct device;
|
||||
struct gpio_desc;
|
||||
@@ -173,6 +174,53 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
|
||||
|
||||
#endif /* CONFIG_GPIOLIB_IRQCHIP */
|
||||
|
||||
#ifdef CONFIG_PINCTRL
|
||||
|
||||
/**
|
||||
* struct gpio_pin_range - pin range controlled by a gpio chip
|
||||
* @head: list for maintaining set of pin ranges, used internally
|
||||
* @pctldev: pinctrl device which handles corresponding pins
|
||||
* @range: actual range of pins controlled by a gpio controller
|
||||
*/
|
||||
|
||||
struct gpio_pin_range {
|
||||
struct list_head node;
|
||||
struct pinctrl_dev *pctldev;
|
||||
struct pinctrl_gpio_range range;
|
||||
};
|
||||
|
||||
int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
|
||||
unsigned int gpio_offset, unsigned int pin_offset,
|
||||
unsigned int npins);
|
||||
int gpiochip_add_pingroup_range(struct gpio_chip *chip,
|
||||
struct pinctrl_dev *pctldev,
|
||||
unsigned int gpio_offset, const char *pin_group);
|
||||
void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
|
||||
|
||||
#else
|
||||
|
||||
static inline int
|
||||
gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
|
||||
unsigned int gpio_offset, unsigned int pin_offset,
|
||||
unsigned int npins)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int
|
||||
gpiochip_add_pingroup_range(struct gpio_chip *chip,
|
||||
struct pinctrl_dev *pctldev,
|
||||
unsigned int gpio_offset, const char *pin_group)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
gpiochip_remove_pin_ranges(struct gpio_chip *chip)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PINCTRL */
|
||||
|
||||
struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
|
||||
const char *label);
|
||||
void gpiochip_free_own_desc(struct gpio_desc *desc);
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
|
||||
extern void synchronize_irq(unsigned int irq);
|
||||
extern void synchronize_hardirq(unsigned int irq);
|
||||
extern bool synchronize_hardirq(unsigned int irq);
|
||||
|
||||
#if defined(CONFIG_TINY_RCU)
|
||||
|
||||
|
@@ -48,20 +48,44 @@ struct hid_sensor_hub_attribute_info {
|
||||
s32 logical_maximum;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sensor_hub_pending - Synchronous read pending information
|
||||
* @status: Pending status true/false.
|
||||
* @ready: Completion synchronization data.
|
||||
* @usage_id: Usage id for physical device, E.g. Gyro usage id.
|
||||
* @attr_usage_id: Usage Id of a field, E.g. X-AXIS for a gyro.
|
||||
* @raw_size: Response size for a read request.
|
||||
* @raw_data: Place holder for received response.
|
||||
*/
|
||||
struct sensor_hub_pending {
|
||||
bool status;
|
||||
struct completion ready;
|
||||
u32 usage_id;
|
||||
u32 attr_usage_id;
|
||||
int raw_size;
|
||||
u8 *raw_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct hid_sensor_hub_device - Stores the hub instance data
|
||||
* @hdev: Stores the hid instance.
|
||||
* @vendor_id: Vendor id of hub device.
|
||||
* @product_id: Product id of hub device.
|
||||
* @usage: Usage id for this hub device instance.
|
||||
* @start_collection_index: Starting index for a phy type collection
|
||||
* @end_collection_index: Last index for a phy type collection
|
||||
* @mutex: synchronizing mutex.
|
||||
* @pending: Holds information of pending sync read request.
|
||||
*/
|
||||
struct hid_sensor_hub_device {
|
||||
struct hid_device *hdev;
|
||||
u32 vendor_id;
|
||||
u32 product_id;
|
||||
u32 usage;
|
||||
int start_collection_index;
|
||||
int end_collection_index;
|
||||
struct mutex mutex;
|
||||
struct sensor_hub_pending pending;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -152,40 +176,51 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
|
||||
* @usage_id: Attribute usage id of parent physical device as per spec
|
||||
* @attr_usage_id: Attribute usage id as per spec
|
||||
* @report_id: Report id to look for
|
||||
* @flag: Synchronous or asynchronous read
|
||||
*
|
||||
* Issues a synchronous read request for an input attribute. Returns
|
||||
* data upto 32 bits. Since client can get events, so this call should
|
||||
* not be used for data paths, this will impact performance.
|
||||
* Issues a synchronous or asynchronous read request for an input attribute.
|
||||
* Returns data upto 32 bits.
|
||||
*/
|
||||
|
||||
enum sensor_hub_read_flags {
|
||||
SENSOR_HUB_SYNC,
|
||||
SENSOR_HUB_ASYNC,
|
||||
};
|
||||
|
||||
int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
|
||||
u32 usage_id,
|
||||
u32 attr_usage_id, u32 report_id);
|
||||
u32 usage_id,
|
||||
u32 attr_usage_id, u32 report_id,
|
||||
enum sensor_hub_read_flags flag
|
||||
);
|
||||
|
||||
/**
|
||||
* sensor_hub_set_feature() - Feature set request
|
||||
* @hsdev: Hub device instance.
|
||||
* @report_id: Report id to look for
|
||||
* @field_index: Field index inside a report
|
||||
* @value: Value to set
|
||||
* @buffer_size: size of the buffer
|
||||
* @buffer: buffer to use in the feature set
|
||||
*
|
||||
* Used to set a field in feature report. For example this can set polling
|
||||
* interval, sensitivity, activate/deactivate state.
|
||||
*/
|
||||
int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
|
||||
u32 field_index, s32 value);
|
||||
u32 field_index, int buffer_size, void *buffer);
|
||||
|
||||
/**
|
||||
* sensor_hub_get_feature() - Feature get request
|
||||
* @hsdev: Hub device instance.
|
||||
* @report_id: Report id to look for
|
||||
* @field_index: Field index inside a report
|
||||
* @value: Place holder for return value
|
||||
* @buffer_size: size of the buffer
|
||||
* @buffer: buffer to copy output
|
||||
*
|
||||
* Used to get a field in feature report. For example this can get polling
|
||||
* interval, sensitivity, activate/deactivate state.
|
||||
* interval, sensitivity, activate/deactivate state. On success it returns
|
||||
* number of bytes copied to buffer. On failure, it returns value < 0.
|
||||
*/
|
||||
int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
|
||||
u32 field_index, s32 *value);
|
||||
u32 field_index, int buffer_size, void *buffer);
|
||||
|
||||
/* hid-sensor-attributes */
|
||||
|
||||
|
@@ -21,6 +21,8 @@
|
||||
|
||||
#define HID_MAX_PHY_DEVICES 0xFF
|
||||
|
||||
#define HID_USAGE_SENSOR_COLLECTION 0x200001
|
||||
|
||||
/* Accel 3D (200073) */
|
||||
#define HID_USAGE_SENSOR_ACCEL_3D 0x200073
|
||||
#define HID_USAGE_SENSOR_DATA_ACCELERATION 0x200452
|
||||
|
@@ -159,6 +159,7 @@ struct hid_item {
|
||||
#define HID_UP_LED 0x00080000
|
||||
#define HID_UP_BUTTON 0x00090000
|
||||
#define HID_UP_ORDINAL 0x000a0000
|
||||
#define HID_UP_TELEPHONY 0x000b0000
|
||||
#define HID_UP_CONSUMER 0x000c0000
|
||||
#define HID_UP_DIGITIZER 0x000d0000
|
||||
#define HID_UP_PID 0x000f0000
|
||||
@@ -269,6 +270,7 @@ struct hid_item {
|
||||
#define HID_DG_DEVICEINDEX 0x000d0053
|
||||
#define HID_DG_CONTACTCOUNT 0x000d0054
|
||||
#define HID_DG_CONTACTMAX 0x000d0055
|
||||
#define HID_DG_BUTTONTYPE 0x000d0059
|
||||
#define HID_DG_BARRELSWITCH2 0x000d005a
|
||||
#define HID_DG_TOOLSERIALNUMBER 0x000d005b
|
||||
|
||||
@@ -514,10 +516,10 @@ struct hid_device { /* device report descriptor */
|
||||
#ifdef CONFIG_HID_BATTERY_STRENGTH
|
||||
/*
|
||||
* Power supply information for HID devices which report
|
||||
* battery strength. power_supply is registered iff
|
||||
* battery.name is non-NULL.
|
||||
* battery strength. power_supply was successfully registered if
|
||||
* battery is non-NULL.
|
||||
*/
|
||||
struct power_supply battery;
|
||||
struct power_supply *battery;
|
||||
__s32 battery_min;
|
||||
__s32 battery_max;
|
||||
__s32 battery_report_type;
|
||||
|
@@ -135,9 +135,9 @@ static inline int hsi_register_board_info(struct hsi_board_info const *info,
|
||||
* @device: Driver model representation of the device
|
||||
* @tx_cfg: HSI TX configuration
|
||||
* @rx_cfg: HSI RX configuration
|
||||
* e_handler: Callback for handling port events (RX Wake High/Low)
|
||||
* pclaimed: Keeps tracks if the clients claimed its associated HSI port
|
||||
* nb: Notifier block for port events
|
||||
* @e_handler: Callback for handling port events (RX Wake High/Low)
|
||||
* @pclaimed: Keeps tracks if the clients claimed its associated HSI port
|
||||
* @nb: Notifier block for port events
|
||||
*/
|
||||
struct hsi_client {
|
||||
struct device device;
|
||||
|
@@ -22,7 +22,13 @@ struct mmu_gather;
|
||||
struct hugepage_subpool {
|
||||
spinlock_t lock;
|
||||
long count;
|
||||
long max_hpages, used_hpages;
|
||||
long max_hpages; /* Maximum huge pages or -1 if no maximum. */
|
||||
long used_hpages; /* Used count against maximum, includes */
|
||||
/* both alloced and reserved pages. */
|
||||
struct hstate *hstate;
|
||||
long min_hpages; /* Minimum huge pages or -1 if no minimum. */
|
||||
long rsv_hpages; /* Pages reserved against global pool to */
|
||||
/* sasitfy minimum size. */
|
||||
};
|
||||
|
||||
struct resv_map {
|
||||
@@ -38,11 +44,10 @@ extern int hugetlb_max_hstate __read_mostly;
|
||||
#define for_each_hstate(h) \
|
||||
for ((h) = hstates; (h) < &hstates[hugetlb_max_hstate]; (h)++)
|
||||
|
||||
struct hugepage_subpool *hugepage_new_subpool(long nr_blocks);
|
||||
struct hugepage_subpool *hugepage_new_subpool(struct hstate *h, long max_hpages,
|
||||
long min_hpages);
|
||||
void hugepage_put_subpool(struct hugepage_subpool *spool);
|
||||
|
||||
int PageHuge(struct page *page);
|
||||
|
||||
void reset_vma_resv_huge_pages(struct vm_area_struct *vma);
|
||||
int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
|
||||
int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
|
||||
@@ -79,7 +84,6 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
||||
int dequeue_hwpoisoned_huge_page(struct page *page);
|
||||
bool isolate_huge_page(struct page *page, struct list_head *list);
|
||||
void putback_active_hugepage(struct page *page);
|
||||
bool is_hugepage_active(struct page *page);
|
||||
void free_huge_page(struct page *page);
|
||||
|
||||
#ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE
|
||||
@@ -109,11 +113,6 @@ unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
|
||||
#else /* !CONFIG_HUGETLB_PAGE */
|
||||
|
||||
static inline int PageHuge(struct page *page)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
@@ -152,7 +151,6 @@ static inline bool isolate_huge_page(struct page *page, struct list_head *list)
|
||||
return false;
|
||||
}
|
||||
#define putback_active_hugepage(p) do {} while (0)
|
||||
#define is_hugepage_active(x) false
|
||||
|
||||
static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
unsigned long address, unsigned long end, pgprot_t newprot)
|
||||
|
@@ -50,10 +50,14 @@ struct hwrng {
|
||||
struct completion cleanup_done;
|
||||
};
|
||||
|
||||
struct device;
|
||||
|
||||
/** Register a new Hardware Random Number Generator driver. */
|
||||
extern int hwrng_register(struct hwrng *rng);
|
||||
extern int devm_hwrng_register(struct device *dev, struct hwrng *rng);
|
||||
/** Unregister a Hardware Random Number Generator driver. */
|
||||
extern void hwrng_unregister(struct hwrng *rng);
|
||||
extern void devm_hwrng_unregister(struct device *dve, struct hwrng *rng);
|
||||
/** Feed random bits into the pool. */
|
||||
extern void add_hwgenerator_randomness(const char *buffer, size_t count, size_t entropy);
|
||||
|
||||
|
@@ -253,10 +253,10 @@ static inline void i2c_set_clientdata(struct i2c_client *dev, void *data)
|
||||
|
||||
#if IS_ENABLED(CONFIG_I2C_SLAVE)
|
||||
enum i2c_slave_event {
|
||||
I2C_SLAVE_REQ_READ_START,
|
||||
I2C_SLAVE_REQ_READ_END,
|
||||
I2C_SLAVE_REQ_WRITE_START,
|
||||
I2C_SLAVE_REQ_WRITE_END,
|
||||
I2C_SLAVE_READ_REQUESTED,
|
||||
I2C_SLAVE_WRITE_REQUESTED,
|
||||
I2C_SLAVE_READ_PROCESSED,
|
||||
I2C_SLAVE_WRITE_RECEIVED,
|
||||
I2C_SLAVE_STOP,
|
||||
};
|
||||
|
||||
@@ -278,7 +278,7 @@ static inline int i2c_slave_event(struct i2c_client *client,
|
||||
* @platform_data: stored in i2c_client.dev.platform_data
|
||||
* @archdata: copied into i2c_client.dev.archdata
|
||||
* @of_node: pointer to OpenFirmware device node
|
||||
* @acpi_node: ACPI device node
|
||||
* @fwnode: device node supplied by the platform firmware
|
||||
* @irq: stored in i2c_client.irq
|
||||
*
|
||||
* I2C doesn't actually support hardware probing, although controllers and
|
||||
@@ -299,7 +299,7 @@ struct i2c_board_info {
|
||||
void *platform_data;
|
||||
struct dev_archdata *archdata;
|
||||
struct device_node *of_node;
|
||||
struct acpi_dev_node acpi_node;
|
||||
struct fwnode_handle *fwnode;
|
||||
int irq;
|
||||
};
|
||||
|
||||
@@ -435,8 +435,8 @@ struct i2c_bus_recovery_info {
|
||||
void (*set_scl)(struct i2c_adapter *, int val);
|
||||
int (*get_sda)(struct i2c_adapter *);
|
||||
|
||||
void (*prepare_recovery)(struct i2c_bus_recovery_info *bri);
|
||||
void (*unprepare_recovery)(struct i2c_bus_recovery_info *bri);
|
||||
void (*prepare_recovery)(struct i2c_adapter *);
|
||||
void (*unprepare_recovery)(struct i2c_adapter *);
|
||||
|
||||
/* gpio recovery */
|
||||
int scl_gpio;
|
||||
@@ -449,6 +449,48 @@ int i2c_recover_bus(struct i2c_adapter *adap);
|
||||
int i2c_generic_gpio_recovery(struct i2c_adapter *adap);
|
||||
int i2c_generic_scl_recovery(struct i2c_adapter *adap);
|
||||
|
||||
/**
|
||||
* struct i2c_adapter_quirks - describe flaws of an i2c adapter
|
||||
* @flags: see I2C_AQ_* for possible flags and read below
|
||||
* @max_num_msgs: maximum number of messages per transfer
|
||||
* @max_write_len: maximum length of a write message
|
||||
* @max_read_len: maximum length of a read message
|
||||
* @max_comb_1st_msg_len: maximum length of the first msg in a combined message
|
||||
* @max_comb_2nd_msg_len: maximum length of the second msg in a combined message
|
||||
*
|
||||
* Note about combined messages: Some I2C controllers can only send one message
|
||||
* per transfer, plus something called combined message or write-then-read.
|
||||
* This is (usually) a small write message followed by a read message and
|
||||
* barely enough to access register based devices like EEPROMs. There is a flag
|
||||
* to support this mode. It implies max_num_msg = 2 and does the length checks
|
||||
* with max_comb_*_len because combined message mode usually has its own
|
||||
* limitations. Because of HW implementations, some controllers can actually do
|
||||
* write-then-anything or other variants. To support that, write-then-read has
|
||||
* been broken out into smaller bits like write-first and read-second which can
|
||||
* be combined as needed.
|
||||
*/
|
||||
|
||||
struct i2c_adapter_quirks {
|
||||
u64 flags;
|
||||
int max_num_msgs;
|
||||
u16 max_write_len;
|
||||
u16 max_read_len;
|
||||
u16 max_comb_1st_msg_len;
|
||||
u16 max_comb_2nd_msg_len;
|
||||
};
|
||||
|
||||
/* enforce max_num_msgs = 2 and use max_comb_*_len for length checks */
|
||||
#define I2C_AQ_COMB BIT(0)
|
||||
/* first combined message must be write */
|
||||
#define I2C_AQ_COMB_WRITE_FIRST BIT(1)
|
||||
/* second combined message must be read */
|
||||
#define I2C_AQ_COMB_READ_SECOND BIT(2)
|
||||
/* both combined messages must have the same target address */
|
||||
#define I2C_AQ_COMB_SAME_ADDR BIT(3)
|
||||
/* convenience macro for typical write-then read case */
|
||||
#define I2C_AQ_COMB_WRITE_THEN_READ (I2C_AQ_COMB | I2C_AQ_COMB_WRITE_FIRST | \
|
||||
I2C_AQ_COMB_READ_SECOND | I2C_AQ_COMB_SAME_ADDR)
|
||||
|
||||
/*
|
||||
* i2c_adapter is the structure used to identify a physical i2c bus along
|
||||
* with the access algorithms necessary to access it.
|
||||
@@ -474,6 +516,7 @@ struct i2c_adapter {
|
||||
struct list_head userspace_clients;
|
||||
|
||||
struct i2c_bus_recovery_info *bus_recovery_info;
|
||||
const struct i2c_adapter_quirks *quirks;
|
||||
};
|
||||
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
|
||||
|
||||
|
@@ -28,7 +28,9 @@
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#define IEEE802154_MTU 127
|
||||
#define IEEE802154_MIN_PSDU_LEN 5
|
||||
#define IEEE802154_ACK_PSDU_LEN 5
|
||||
#define IEEE802154_MIN_PSDU_LEN 9
|
||||
#define IEEE802154_FCS_LEN 2
|
||||
|
||||
#define IEEE802154_PAN_ID_BROADCAST 0xffff
|
||||
#define IEEE802154_ADDR_SHORT_BROADCAST 0xffff
|
||||
@@ -38,6 +40,7 @@
|
||||
|
||||
#define IEEE802154_LIFS_PERIOD 40
|
||||
#define IEEE802154_SIFS_PERIOD 12
|
||||
#define IEEE802154_MAX_SIFS_FRAME_SIZE 18
|
||||
|
||||
#define IEEE802154_MAX_CHANNEL 26
|
||||
#define IEEE802154_MAX_PAGE 31
|
||||
@@ -204,11 +207,18 @@ enum {
|
||||
|
||||
/**
|
||||
* ieee802154_is_valid_psdu_len - check if psdu len is valid
|
||||
* available lengths:
|
||||
* 0-4 Reserved
|
||||
* 5 MPDU (Acknowledgment)
|
||||
* 6-8 Reserved
|
||||
* 9-127 MPDU
|
||||
*
|
||||
* @len: psdu len with (MHR + payload + MFR)
|
||||
*/
|
||||
static inline bool ieee802154_is_valid_psdu_len(const u8 len)
|
||||
{
|
||||
return (len >= IEEE802154_MIN_PSDU_LEN && len <= IEEE802154_MTU);
|
||||
return (len == IEEE802154_ACK_PSDU_LEN ||
|
||||
(len >= IEEE802154_MIN_PSDU_LEN && len <= IEEE802154_MTU));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -44,6 +44,7 @@ struct br_ip_list {
|
||||
#define BR_PROMISC BIT(7)
|
||||
#define BR_PROXYARP BIT(8)
|
||||
#define BR_LEARNING_SYNC BIT(9)
|
||||
#define BR_PROXYARP_WIFI BIT(10)
|
||||
|
||||
extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
|
||||
|
||||
|
@@ -14,5 +14,6 @@ struct ifla_vf_info {
|
||||
__u32 linkstate;
|
||||
__u32 min_tx_rate;
|
||||
__u32 max_tx_rate;
|
||||
__u32 rss_query_en;
|
||||
};
|
||||
#endif /* _LINUX_IF_LINK_H */
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/ppp_channel.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <uapi/linux/if_pppox.h>
|
||||
|
||||
static inline struct pppoe_hdr *pppoe_hdr(const struct sk_buff *skb)
|
||||
@@ -32,6 +33,7 @@ struct pppoe_opt {
|
||||
struct pppoe_addr pa; /* what this socket is bound to*/
|
||||
struct sockaddr_pppox relay; /* what socket data will be
|
||||
relayed to (PPPoE relaying) */
|
||||
struct work_struct padt_work;/* Work item for handling PADT */
|
||||
};
|
||||
|
||||
struct pptp_opt {
|
||||
|
@@ -561,4 +561,71 @@ static inline void vlan_set_encap_proto(struct sk_buff *skb,
|
||||
skb->protocol = htons(ETH_P_802_2);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_vlan_tagged - check if skb is vlan tagged.
|
||||
* @skb: skbuff to query
|
||||
*
|
||||
* Returns true if the skb is tagged, regardless of whether it is hardware
|
||||
* accelerated or not.
|
||||
*/
|
||||
static inline bool skb_vlan_tagged(const struct sk_buff *skb)
|
||||
{
|
||||
if (!skb_vlan_tag_present(skb) &&
|
||||
likely(skb->protocol != htons(ETH_P_8021Q) &&
|
||||
skb->protocol != htons(ETH_P_8021AD)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_vlan_tagged_multi - check if skb is vlan tagged with multiple headers.
|
||||
* @skb: skbuff to query
|
||||
*
|
||||
* Returns true if the skb is tagged with multiple vlan headers, regardless
|
||||
* of whether it is hardware accelerated or not.
|
||||
*/
|
||||
static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb)
|
||||
{
|
||||
__be16 protocol = skb->protocol;
|
||||
|
||||
if (!skb_vlan_tag_present(skb)) {
|
||||
struct vlan_ethhdr *veh;
|
||||
|
||||
if (likely(protocol != htons(ETH_P_8021Q) &&
|
||||
protocol != htons(ETH_P_8021AD)))
|
||||
return false;
|
||||
|
||||
veh = (struct vlan_ethhdr *)skb->data;
|
||||
protocol = veh->h_vlan_encapsulated_proto;
|
||||
}
|
||||
|
||||
if (protocol != htons(ETH_P_8021Q) && protocol != htons(ETH_P_8021AD))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* vlan_features_check - drop unsafe features for skb with multiple tags.
|
||||
* @skb: skbuff to query
|
||||
* @features: features to be checked
|
||||
*
|
||||
* Returns features without unsafe ones if the skb has multiple tags.
|
||||
*/
|
||||
static inline netdev_features_t vlan_features_check(const struct sk_buff *skb,
|
||||
netdev_features_t features)
|
||||
{
|
||||
if (skb_vlan_tagged_multi(skb))
|
||||
features = netdev_intersect_features(features,
|
||||
NETIF_F_SG |
|
||||
NETIF_F_HIGHDMA |
|
||||
NETIF_F_FRAGLIST |
|
||||
NETIF_F_GEN_CSUM |
|
||||
NETIF_F_HW_VLAN_CTAG_TX |
|
||||
NETIF_F_HW_VLAN_STAG_TX);
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
#endif /* !(_LINUX_IF_VLAN_H_) */
|
||||
|
@@ -21,8 +21,8 @@ struct iio_buffer;
|
||||
* struct iio_buffer_access_funcs - access functions for buffers.
|
||||
* @store_to: actually store stuff to the buffer
|
||||
* @read_first_n: try to get a specified number of bytes (must exist)
|
||||
* @data_available: indicates whether data for reading from the buffer is
|
||||
* available.
|
||||
* @data_available: indicates how much data is available for reading from
|
||||
* the buffer.
|
||||
* @request_update: if a parameter change has been marked, update underlying
|
||||
* storage.
|
||||
* @set_bytes_per_datum:set number of bytes per datum
|
||||
@@ -43,7 +43,7 @@ struct iio_buffer_access_funcs {
|
||||
int (*read_first_n)(struct iio_buffer *buffer,
|
||||
size_t n,
|
||||
char __user *buf);
|
||||
bool (*data_available)(struct iio_buffer *buffer);
|
||||
size_t (*data_available)(struct iio_buffer *buffer);
|
||||
|
||||
int (*request_update)(struct iio_buffer *buffer);
|
||||
|
||||
@@ -72,6 +72,7 @@ struct iio_buffer_access_funcs {
|
||||
* @demux_bounce: [INTERN] buffer for doing gather from incoming scan.
|
||||
* @buffer_list: [INTERN] entry in the devices list of current buffers.
|
||||
* @ref: [INTERN] reference count of the buffer.
|
||||
* @watermark: [INTERN] number of datums to wait for poll/read.
|
||||
*/
|
||||
struct iio_buffer {
|
||||
int length;
|
||||
@@ -90,6 +91,7 @@ struct iio_buffer {
|
||||
void *demux_bounce;
|
||||
struct list_head buffer_list;
|
||||
struct kref ref;
|
||||
unsigned int watermark;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -9,7 +9,7 @@
|
||||
#define IIO_DAC_MAX517_H_
|
||||
|
||||
struct max517_platform_data {
|
||||
u16 vref_mv[2];
|
||||
u16 vref_mv[8];
|
||||
};
|
||||
|
||||
#endif /* IIO_DAC_MAX517_H_ */
|
||||
|
@@ -9,22 +9,8 @@
|
||||
#ifndef _IIO_EVENTS_H_
|
||||
#define _IIO_EVENTS_H_
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/iio/types.h>
|
||||
|
||||
/**
|
||||
* struct iio_event_data - The actual event being pushed to userspace
|
||||
* @id: event identifier
|
||||
* @timestamp: best estimate of time of event occurrence (often from
|
||||
* the interrupt handler)
|
||||
*/
|
||||
struct iio_event_data {
|
||||
__u64 id;
|
||||
__s64 timestamp;
|
||||
};
|
||||
|
||||
#define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int)
|
||||
#include <uapi/linux/iio/events.h>
|
||||
|
||||
/**
|
||||
* IIO_EVENT_CODE() - create event identifier
|
||||
@@ -70,18 +56,4 @@ struct iio_event_data {
|
||||
#define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \
|
||||
IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0)
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF)
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F)
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF)
|
||||
|
||||
/* Event code number extraction depends on which type of event we have.
|
||||
* Perhaps review this function in the future*/
|
||||
#define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF))
|
||||
#define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF))
|
||||
|
||||
#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
|
||||
#define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1)
|
||||
|
||||
#endif
|
||||
|
@@ -338,6 +338,16 @@ struct iio_dev;
|
||||
* provide a custom of_xlate function that reads the
|
||||
* *args* and returns the appropriate index in registered
|
||||
* IIO channels array.
|
||||
* @hwfifo_set_watermark: function pointer to set the current hardware
|
||||
* fifo watermark level; see hwfifo_* entries in
|
||||
* Documentation/ABI/testing/sysfs-bus-iio for details on
|
||||
* how the hardware fifo operates
|
||||
* @hwfifo_flush_to_buffer: function pointer to flush the samples stored
|
||||
* in the hardware fifo to the device buffer. The driver
|
||||
* should not flush more than count samples. The function
|
||||
* must return the number of samples flushed, 0 if no
|
||||
* samples were flushed or a negative integer if no samples
|
||||
* were flushed and there was an error.
|
||||
**/
|
||||
struct iio_info {
|
||||
struct module *driver_module;
|
||||
@@ -399,6 +409,9 @@ struct iio_info {
|
||||
unsigned *readval);
|
||||
int (*of_xlate)(struct iio_dev *indio_dev,
|
||||
const struct of_phandle_args *iiospec);
|
||||
int (*hwfifo_set_watermark)(struct iio_dev *indio_dev, unsigned val);
|
||||
int (*hwfifo_flush_to_buffer)(struct iio_dev *indio_dev,
|
||||
unsigned count);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -10,76 +10,7 @@
|
||||
#ifndef _IIO_TYPES_H_
|
||||
#define _IIO_TYPES_H_
|
||||
|
||||
enum iio_chan_type {
|
||||
IIO_VOLTAGE,
|
||||
IIO_CURRENT,
|
||||
IIO_POWER,
|
||||
IIO_ACCEL,
|
||||
IIO_ANGL_VEL,
|
||||
IIO_MAGN,
|
||||
IIO_LIGHT,
|
||||
IIO_INTENSITY,
|
||||
IIO_PROXIMITY,
|
||||
IIO_TEMP,
|
||||
IIO_INCLI,
|
||||
IIO_ROT,
|
||||
IIO_ANGL,
|
||||
IIO_TIMESTAMP,
|
||||
IIO_CAPACITANCE,
|
||||
IIO_ALTVOLTAGE,
|
||||
IIO_CCT,
|
||||
IIO_PRESSURE,
|
||||
IIO_HUMIDITYRELATIVE,
|
||||
IIO_ACTIVITY,
|
||||
IIO_STEPS,
|
||||
IIO_ENERGY,
|
||||
IIO_DISTANCE,
|
||||
IIO_VELOCITY,
|
||||
};
|
||||
|
||||
enum iio_modifier {
|
||||
IIO_NO_MOD,
|
||||
IIO_MOD_X,
|
||||
IIO_MOD_Y,
|
||||
IIO_MOD_Z,
|
||||
IIO_MOD_X_AND_Y,
|
||||
IIO_MOD_X_AND_Z,
|
||||
IIO_MOD_Y_AND_Z,
|
||||
IIO_MOD_X_AND_Y_AND_Z,
|
||||
IIO_MOD_X_OR_Y,
|
||||
IIO_MOD_X_OR_Z,
|
||||
IIO_MOD_Y_OR_Z,
|
||||
IIO_MOD_X_OR_Y_OR_Z,
|
||||
IIO_MOD_LIGHT_BOTH,
|
||||
IIO_MOD_LIGHT_IR,
|
||||
IIO_MOD_ROOT_SUM_SQUARED_X_Y,
|
||||
IIO_MOD_SUM_SQUARED_X_Y_Z,
|
||||
IIO_MOD_LIGHT_CLEAR,
|
||||
IIO_MOD_LIGHT_RED,
|
||||
IIO_MOD_LIGHT_GREEN,
|
||||
IIO_MOD_LIGHT_BLUE,
|
||||
IIO_MOD_QUATERNION,
|
||||
IIO_MOD_TEMP_AMBIENT,
|
||||
IIO_MOD_TEMP_OBJECT,
|
||||
IIO_MOD_NORTH_MAGN,
|
||||
IIO_MOD_NORTH_TRUE,
|
||||
IIO_MOD_NORTH_MAGN_TILT_COMP,
|
||||
IIO_MOD_NORTH_TRUE_TILT_COMP,
|
||||
IIO_MOD_RUNNING,
|
||||
IIO_MOD_JOGGING,
|
||||
IIO_MOD_WALKING,
|
||||
IIO_MOD_STILL,
|
||||
IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z,
|
||||
};
|
||||
|
||||
enum iio_event_type {
|
||||
IIO_EV_TYPE_THRESH,
|
||||
IIO_EV_TYPE_MAG,
|
||||
IIO_EV_TYPE_ROC,
|
||||
IIO_EV_TYPE_THRESH_ADAPTIVE,
|
||||
IIO_EV_TYPE_MAG_ADAPTIVE,
|
||||
IIO_EV_TYPE_CHANGE,
|
||||
};
|
||||
#include <uapi/linux/iio/types.h>
|
||||
|
||||
enum iio_event_info {
|
||||
IIO_EV_INFO_ENABLE,
|
||||
@@ -88,13 +19,6 @@ enum iio_event_info {
|
||||
IIO_EV_INFO_PERIOD,
|
||||
};
|
||||
|
||||
enum iio_event_direction {
|
||||
IIO_EV_DIR_EITHER,
|
||||
IIO_EV_DIR_RISING,
|
||||
IIO_EV_DIR_FALLING,
|
||||
IIO_EV_DIR_NONE,
|
||||
};
|
||||
|
||||
#define IIO_VAL_INT 1
|
||||
#define IIO_VAL_INT_PLUS_MICRO 2
|
||||
#define IIO_VAL_INT_PLUS_NANO 3
|
||||
|
@@ -11,33 +11,34 @@ struct sk_buff;
|
||||
struct netlink_callback;
|
||||
|
||||
struct inet_diag_handler {
|
||||
void (*dump)(struct sk_buff *skb,
|
||||
struct netlink_callback *cb,
|
||||
struct inet_diag_req_v2 *r,
|
||||
struct nlattr *bc);
|
||||
void (*dump)(struct sk_buff *skb,
|
||||
struct netlink_callback *cb,
|
||||
const struct inet_diag_req_v2 *r,
|
||||
struct nlattr *bc);
|
||||
|
||||
int (*dump_one)(struct sk_buff *in_skb,
|
||||
const struct nlmsghdr *nlh,
|
||||
struct inet_diag_req_v2 *req);
|
||||
int (*dump_one)(struct sk_buff *in_skb,
|
||||
const struct nlmsghdr *nlh,
|
||||
const struct inet_diag_req_v2 *req);
|
||||
|
||||
void (*idiag_get_info)(struct sock *sk,
|
||||
struct inet_diag_msg *r,
|
||||
void *info);
|
||||
__u16 idiag_type;
|
||||
void (*idiag_get_info)(struct sock *sk,
|
||||
struct inet_diag_msg *r,
|
||||
void *info);
|
||||
__u16 idiag_type;
|
||||
};
|
||||
|
||||
struct inet_connection_sock;
|
||||
int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
|
||||
struct sk_buff *skb, struct inet_diag_req_v2 *req,
|
||||
struct user_namespace *user_ns,
|
||||
u32 pid, u32 seq, u16 nlmsg_flags,
|
||||
const struct nlmsghdr *unlh);
|
||||
struct sk_buff *skb, const struct inet_diag_req_v2 *req,
|
||||
struct user_namespace *user_ns,
|
||||
u32 pid, u32 seq, u16 nlmsg_flags,
|
||||
const struct nlmsghdr *unlh);
|
||||
void inet_diag_dump_icsk(struct inet_hashinfo *h, struct sk_buff *skb,
|
||||
struct netlink_callback *cb, struct inet_diag_req_v2 *r,
|
||||
struct nlattr *bc);
|
||||
struct netlink_callback *cb,
|
||||
const struct inet_diag_req_v2 *r,
|
||||
struct nlattr *bc);
|
||||
int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *in_skb, const struct nlmsghdr *nlh,
|
||||
struct inet_diag_req_v2 *req);
|
||||
struct sk_buff *in_skb, const struct nlmsghdr *nlh,
|
||||
const struct inet_diag_req_v2 *req);
|
||||
|
||||
int inet_diag_bc_sk(const struct nlattr *_bc, struct sock *sk);
|
||||
|
||||
|
@@ -253,21 +253,41 @@ struct obs_kernel_param {
|
||||
* obs_kernel_param "array" too far apart in .init.setup.
|
||||
*/
|
||||
#define __setup_param(str, unique_id, fn, early) \
|
||||
static const char __setup_str_##unique_id[] __initconst \
|
||||
__aligned(1) = str; \
|
||||
static struct obs_kernel_param __setup_##unique_id \
|
||||
__used __section(.init.setup) \
|
||||
__attribute__((aligned((sizeof(long))))) \
|
||||
static const char __setup_str_##unique_id[] __initconst \
|
||||
__aligned(1) = str; \
|
||||
static struct obs_kernel_param __setup_##unique_id \
|
||||
__used __section(.init.setup) \
|
||||
__attribute__((aligned((sizeof(long))))) \
|
||||
= { __setup_str_##unique_id, fn, early }
|
||||
|
||||
#define __setup(str, fn) \
|
||||
#define __setup(str, fn) \
|
||||
__setup_param(str, fn, fn, 0)
|
||||
|
||||
/* NOTE: fn is as per module_param, not __setup! Emits warning if fn
|
||||
* returns non-zero. */
|
||||
#define early_param(str, fn) \
|
||||
/*
|
||||
* NOTE: fn is as per module_param, not __setup!
|
||||
* Emits warning if fn returns non-zero.
|
||||
*/
|
||||
#define early_param(str, fn) \
|
||||
__setup_param(str, fn, fn, 1)
|
||||
|
||||
#define early_param_on_off(str_on, str_off, var, config) \
|
||||
\
|
||||
int var = IS_ENABLED(config); \
|
||||
\
|
||||
static int __init parse_##var##_on(char *arg) \
|
||||
{ \
|
||||
var = 1; \
|
||||
return 0; \
|
||||
} \
|
||||
__setup_param(str_on, parse_##var##_on, parse_##var##_on, 1); \
|
||||
\
|
||||
static int __init parse_##var##_off(char *arg) \
|
||||
{ \
|
||||
var = 0; \
|
||||
return 0; \
|
||||
} \
|
||||
__setup_param(str_off, parse_##var##_off, parse_##var##_off, 1)
|
||||
|
||||
/* Relies on boot_command_line being set */
|
||||
void __init parse_early_param(void);
|
||||
void __init parse_early_options(char *cmdline);
|
||||
|
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* intel_mid_dma.h - Intel MID DMA Drivers
|
||||
*
|
||||
* Copyright (C) 2008-10 Intel Corp
|
||||
* Author: Vinod Koul <vinod.koul@intel.com>
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
*
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*
|
||||
*
|
||||
*/
|
||||
#ifndef __INTEL_MID_DMA_H__
|
||||
#define __INTEL_MID_DMA_H__
|
||||
|
||||
#include <linux/dmaengine.h>
|
||||
|
||||
#define DMA_PREP_CIRCULAR_LIST (1 << 10)
|
||||
|
||||
/*DMA mode configurations*/
|
||||
enum intel_mid_dma_mode {
|
||||
LNW_DMA_PER_TO_MEM = 0, /*periphral to memory configuration*/
|
||||
LNW_DMA_MEM_TO_PER, /*memory to periphral configuration*/
|
||||
LNW_DMA_MEM_TO_MEM, /*mem to mem confg (testing only)*/
|
||||
};
|
||||
|
||||
/*DMA handshaking*/
|
||||
enum intel_mid_dma_hs_mode {
|
||||
LNW_DMA_HW_HS = 0, /*HW Handshaking only*/
|
||||
LNW_DMA_SW_HS = 1, /*SW Handshaking not recommended*/
|
||||
};
|
||||
|
||||
/*Burst size configuration*/
|
||||
enum intel_mid_dma_msize {
|
||||
LNW_DMA_MSIZE_1 = 0x0,
|
||||
LNW_DMA_MSIZE_4 = 0x1,
|
||||
LNW_DMA_MSIZE_8 = 0x2,
|
||||
LNW_DMA_MSIZE_16 = 0x3,
|
||||
LNW_DMA_MSIZE_32 = 0x4,
|
||||
LNW_DMA_MSIZE_64 = 0x5,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct intel_mid_dma_slave - DMA slave structure
|
||||
*
|
||||
* @dirn: DMA trf direction
|
||||
* @src_width: tx register width
|
||||
* @dst_width: rx register width
|
||||
* @hs_mode: HW/SW handshaking mode
|
||||
* @cfg_mode: DMA data transfer mode (per-per/mem-per/mem-mem)
|
||||
* @src_msize: Source DMA burst size
|
||||
* @dst_msize: Dst DMA burst size
|
||||
* @per_addr: Periphral address
|
||||
* @device_instance: DMA peripheral device instance, we can have multiple
|
||||
* peripheral device connected to single DMAC
|
||||
*/
|
||||
struct intel_mid_dma_slave {
|
||||
enum intel_mid_dma_hs_mode hs_mode; /*handshaking*/
|
||||
enum intel_mid_dma_mode cfg_mode; /*mode configuration*/
|
||||
unsigned int device_instance; /*0, 1 for periphral instance*/
|
||||
struct dma_slave_config dma_slave;
|
||||
};
|
||||
|
||||
#endif /*__INTEL_MID_DMA_H__*/
|
@@ -39,8 +39,6 @@
|
||||
* These flags used only by the kernel as part of the
|
||||
* irq handling routines.
|
||||
*
|
||||
* IRQF_DISABLED - keep irqs disabled when calling the action handler.
|
||||
* DEPRECATED. This flag is a NOOP and scheduled to be removed
|
||||
* IRQF_SHARED - allow sharing the irq among several devices
|
||||
* IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur
|
||||
* IRQF_TIMER - Flag to mark this interrupt as timer interrupt
|
||||
@@ -64,7 +62,6 @@
|
||||
* wakeup devices users need to implement wakeup detection in
|
||||
* their interrupt handlers.
|
||||
*/
|
||||
#define IRQF_DISABLED 0x00000020
|
||||
#define IRQF_SHARED 0x00000080
|
||||
#define IRQF_PROBE_SHARED 0x00000100
|
||||
#define __IRQF_TIMER 0x00000200
|
||||
@@ -191,6 +188,7 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
|
||||
#endif
|
||||
|
||||
extern void disable_irq_nosync(unsigned int irq);
|
||||
extern bool disable_hardirq(unsigned int irq);
|
||||
extern void disable_irq(unsigned int irq);
|
||||
extern void disable_percpu_irq(unsigned int irq);
|
||||
extern void enable_irq(unsigned int irq);
|
||||
@@ -363,6 +361,20 @@ static inline int disable_irq_wake(unsigned int irq)
|
||||
return irq_set_irq_wake(irq, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* irq_get_irqchip_state/irq_set_irqchip_state specific flags
|
||||
*/
|
||||
enum irqchip_irq_state {
|
||||
IRQCHIP_STATE_PENDING, /* Is interrupt pending? */
|
||||
IRQCHIP_STATE_ACTIVE, /* Is interrupt in progress? */
|
||||
IRQCHIP_STATE_MASKED, /* Is interrupt masked? */
|
||||
IRQCHIP_STATE_LINE_LEVEL, /* Is IRQ line high? */
|
||||
};
|
||||
|
||||
extern int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
|
||||
bool *state);
|
||||
extern int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
|
||||
bool state);
|
||||
|
||||
#ifdef CONFIG_IRQ_FORCED_THREADING
|
||||
extern bool force_irqthreads;
|
||||
|
@@ -38,6 +38,14 @@ static inline int ioremap_page_range(unsigned long addr, unsigned long end,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
|
||||
void __init ioremap_huge_init(void);
|
||||
int arch_ioremap_pud_supported(void);
|
||||
int arch_ioremap_pmd_supported(void);
|
||||
#else
|
||||
static inline void ioremap_huge_init(void) { }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Managed iomap interface
|
||||
*/
|
||||
|
51
include/linux/iommu-common.h
Normal file
51
include/linux/iommu-common.h
Normal file
@@ -0,0 +1,51 @@
|
||||
#ifndef _LINUX_IOMMU_COMMON_H
|
||||
#define _LINUX_IOMMU_COMMON_H
|
||||
|
||||
#include <linux/spinlock_types.h>
|
||||
#include <linux/device.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#define IOMMU_POOL_HASHBITS 4
|
||||
#define IOMMU_NR_POOLS (1 << IOMMU_POOL_HASHBITS)
|
||||
|
||||
struct iommu_pool {
|
||||
unsigned long start;
|
||||
unsigned long end;
|
||||
unsigned long hint;
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
struct iommu_map_table {
|
||||
unsigned long table_map_base;
|
||||
unsigned long table_shift;
|
||||
unsigned long nr_pools;
|
||||
void (*lazy_flush)(struct iommu_map_table *);
|
||||
unsigned long poolsize;
|
||||
struct iommu_pool pools[IOMMU_NR_POOLS];
|
||||
u32 flags;
|
||||
#define IOMMU_HAS_LARGE_POOL 0x00000001
|
||||
#define IOMMU_NO_SPAN_BOUND 0x00000002
|
||||
#define IOMMU_NEED_FLUSH 0x00000004
|
||||
struct iommu_pool large_pool;
|
||||
unsigned long *map;
|
||||
};
|
||||
|
||||
extern void iommu_tbl_pool_init(struct iommu_map_table *iommu,
|
||||
unsigned long num_entries,
|
||||
u32 table_shift,
|
||||
void (*lazy_flush)(struct iommu_map_table *),
|
||||
bool large_pool, u32 npools,
|
||||
bool skip_span_boundary_check);
|
||||
|
||||
extern unsigned long iommu_tbl_range_alloc(struct device *dev,
|
||||
struct iommu_map_table *iommu,
|
||||
unsigned long npages,
|
||||
unsigned long *handle,
|
||||
unsigned long mask,
|
||||
unsigned int align_order);
|
||||
|
||||
extern void iommu_tbl_range_free(struct iommu_map_table *iommu,
|
||||
u64 dma_addr, unsigned long npages,
|
||||
unsigned long entry);
|
||||
|
||||
#endif
|
@@ -196,10 +196,8 @@ extern struct resource * __request_region(struct resource *,
|
||||
|
||||
/* Compatibility cruft */
|
||||
#define release_region(start,n) __release_region(&ioport_resource, (start), (n))
|
||||
#define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n))
|
||||
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
|
||||
|
||||
extern int __check_region(struct resource *, resource_size_t, resource_size_t);
|
||||
extern void __release_region(struct resource *, resource_size_t,
|
||||
resource_size_t);
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
@@ -207,12 +205,6 @@ extern int release_mem_region_adjustable(struct resource *, resource_size_t,
|
||||
resource_size_t);
|
||||
#endif
|
||||
|
||||
static inline int __deprecated check_region(resource_size_t s,
|
||||
resource_size_t n)
|
||||
{
|
||||
return __check_region(&ioport_resource, s, n);
|
||||
}
|
||||
|
||||
/* Wrappers for managed devices */
|
||||
struct device;
|
||||
|
||||
|
@@ -53,6 +53,10 @@ struct ipv6_devconf {
|
||||
__s32 ndisc_notify;
|
||||
__s32 suppress_frag_ndisc;
|
||||
__s32 accept_ra_mtu;
|
||||
struct ipv6_stable_secret {
|
||||
bool initialized;
|
||||
struct in6_addr secret;
|
||||
} stable_secret;
|
||||
void *sysctl;
|
||||
};
|
||||
|
||||
|
@@ -30,6 +30,7 @@
|
||||
struct seq_file;
|
||||
struct module;
|
||||
struct msi_msg;
|
||||
enum irqchip_irq_state;
|
||||
|
||||
/*
|
||||
* IRQ line status.
|
||||
@@ -324,6 +325,8 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
|
||||
* irq_request_resources
|
||||
* @irq_compose_msi_msg: optional to compose message content for MSI
|
||||
* @irq_write_msi_msg: optional to write message content for MSI
|
||||
* @irq_get_irqchip_state: return the internal state of an interrupt
|
||||
* @irq_set_irqchip_state: set the internal state of a interrupt
|
||||
* @flags: chip specific flags
|
||||
*/
|
||||
struct irq_chip {
|
||||
@@ -363,6 +366,9 @@ struct irq_chip {
|
||||
void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg);
|
||||
void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg);
|
||||
|
||||
int (*irq_get_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool *state);
|
||||
int (*irq_set_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool state);
|
||||
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
@@ -460,6 +466,7 @@ extern void irq_chip_eoi_parent(struct irq_data *data);
|
||||
extern int irq_chip_set_affinity_parent(struct irq_data *data,
|
||||
const struct cpumask *dest,
|
||||
bool force);
|
||||
extern int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on);
|
||||
#endif
|
||||
|
||||
/* Handling of unhandled and spurious interrupts: */
|
||||
|
@@ -38,16 +38,17 @@ bool irq_work_queue(struct irq_work *work);
|
||||
bool irq_work_queue_on(struct irq_work *work, int cpu);
|
||||
#endif
|
||||
|
||||
void irq_work_run(void);
|
||||
void irq_work_tick(void);
|
||||
void irq_work_sync(struct irq_work *work);
|
||||
|
||||
#ifdef CONFIG_IRQ_WORK
|
||||
#include <asm/irq_work.h>
|
||||
|
||||
void irq_work_run(void);
|
||||
bool irq_work_needs_cpu(void);
|
||||
#else
|
||||
static inline bool irq_work_needs_cpu(void) { return false; }
|
||||
static inline void irq_work_run(void) { }
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_IRQ_WORK_H */
|
||||
|
@@ -97,6 +97,7 @@ struct device_node;
|
||||
|
||||
extern struct irq_chip gic_arch_extn;
|
||||
|
||||
void gic_set_irqchip_flags(unsigned long flags);
|
||||
void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *,
|
||||
u32 offset, struct device_node *);
|
||||
void gic_cascade_irq(unsigned int gic_nr, unsigned int irq);
|
||||
@@ -115,11 +116,5 @@ int gic_get_cpu_id(unsigned int cpu);
|
||||
void gic_migrate_target(unsigned int new_cpu_id);
|
||||
unsigned long gic_get_sgir_physaddr(void);
|
||||
|
||||
extern const struct irq_domain_ops *gic_routable_irq_domain_ops;
|
||||
static inline void __init register_routable_domain_ops
|
||||
(const struct irq_domain_ops *ops)
|
||||
{
|
||||
gic_routable_irq_domain_ops = ops;
|
||||
}
|
||||
#endif /* __ASSEMBLY */
|
||||
#endif
|
||||
|
@@ -1,11 +0,0 @@
|
||||
/*
|
||||
* drivers/irqchip/irq-crossbar.h
|
||||
*
|
||||
* Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
int irqcrossbar_init(void);
|
@@ -165,6 +165,8 @@
|
||||
#define GIC_VPE_PEND_SWINT0_MSK (MSK(1) << GIC_VPE_PEND_SWINT0_SHF)
|
||||
#define GIC_VPE_PEND_SWINT1_SHF 5
|
||||
#define GIC_VPE_PEND_SWINT1_MSK (MSK(1) << GIC_VPE_PEND_SWINT1_SHF)
|
||||
#define GIC_VPE_PEND_FDC_SHF 6
|
||||
#define GIC_VPE_PEND_FDC_MSK (MSK(1) << GIC_VPE_PEND_FDC_SHF)
|
||||
|
||||
/* GIC_VPE_RMASK Masks */
|
||||
#define GIC_VPE_RMASK_WD_SHF 0
|
||||
@@ -179,6 +181,8 @@
|
||||
#define GIC_VPE_RMASK_SWINT0_MSK (MSK(1) << GIC_VPE_RMASK_SWINT0_SHF)
|
||||
#define GIC_VPE_RMASK_SWINT1_SHF 5
|
||||
#define GIC_VPE_RMASK_SWINT1_MSK (MSK(1) << GIC_VPE_RMASK_SWINT1_SHF)
|
||||
#define GIC_VPE_RMASK_FDC_SHF 6
|
||||
#define GIC_VPE_RMASK_FDC_MSK (MSK(1) << GIC_VPE_RMASK_FDC_SHF)
|
||||
|
||||
/* GIC_VPE_SMASK Masks */
|
||||
#define GIC_VPE_SMASK_WD_SHF 0
|
||||
@@ -193,6 +197,8 @@
|
||||
#define GIC_VPE_SMASK_SWINT0_MSK (MSK(1) << GIC_VPE_SMASK_SWINT0_SHF)
|
||||
#define GIC_VPE_SMASK_SWINT1_SHF 5
|
||||
#define GIC_VPE_SMASK_SWINT1_MSK (MSK(1) << GIC_VPE_SMASK_SWINT1_SHF)
|
||||
#define GIC_VPE_SMASK_FDC_SHF 6
|
||||
#define GIC_VPE_SMASK_FDC_MSK (MSK(1) << GIC_VPE_SMASK_FDC_SHF)
|
||||
|
||||
/* GIC nomenclature for Core Interrupt Pins. */
|
||||
#define GIC_CPU_INT0 0 /* Core Interrupt 2 */
|
||||
@@ -240,9 +246,12 @@ extern unsigned int gic_get_count_width(void);
|
||||
extern cycle_t gic_read_compare(void);
|
||||
extern void gic_write_compare(cycle_t cnt);
|
||||
extern void gic_write_cpu_compare(cycle_t cnt, int cpu);
|
||||
extern void gic_start_count(void);
|
||||
extern void gic_stop_count(void);
|
||||
extern void gic_send_ipi(unsigned int intr);
|
||||
extern unsigned int plat_ipi_call_int_xlate(unsigned int);
|
||||
extern unsigned int plat_ipi_resched_int_xlate(unsigned int);
|
||||
extern int gic_get_c0_compare_int(void);
|
||||
extern int gic_get_c0_perfcount_int(void);
|
||||
extern int gic_get_c0_fdc_int(void);
|
||||
#endif /* __LINUX_IRQCHIP_MIPS_GIC_H */
|
||||
|
@@ -85,7 +85,7 @@
|
||||
* The local_irq_*() APIs are equal to the raw_local_irq*()
|
||||
* if !TRACE_IRQFLAGS.
|
||||
*/
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
#define local_irq_enable() \
|
||||
do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0)
|
||||
#define local_irq_disable() \
|
||||
@@ -107,22 +107,6 @@
|
||||
raw_local_irq_restore(flags); \
|
||||
} \
|
||||
} while (0)
|
||||
#define local_save_flags(flags) \
|
||||
do { \
|
||||
raw_local_save_flags(flags); \
|
||||
} while (0)
|
||||
|
||||
#define irqs_disabled_flags(flags) \
|
||||
({ \
|
||||
raw_irqs_disabled_flags(flags); \
|
||||
})
|
||||
|
||||
#define irqs_disabled() \
|
||||
({ \
|
||||
unsigned long _flags; \
|
||||
raw_local_save_flags(_flags); \
|
||||
raw_irqs_disabled_flags(_flags); \
|
||||
})
|
||||
|
||||
#define safe_halt() \
|
||||
do { \
|
||||
@@ -131,7 +115,7 @@
|
||||
} while (0)
|
||||
|
||||
|
||||
#else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */
|
||||
#else /* !CONFIG_TRACE_IRQFLAGS */
|
||||
|
||||
#define local_irq_enable() do { raw_local_irq_enable(); } while (0)
|
||||
#define local_irq_disable() do { raw_local_irq_disable(); } while (0)
|
||||
@@ -140,11 +124,28 @@
|
||||
raw_local_irq_save(flags); \
|
||||
} while (0)
|
||||
#define local_irq_restore(flags) do { raw_local_irq_restore(flags); } while (0)
|
||||
#define local_save_flags(flags) do { raw_local_save_flags(flags); } while (0)
|
||||
#define irqs_disabled() (raw_irqs_disabled())
|
||||
#define irqs_disabled_flags(flags) (raw_irqs_disabled_flags(flags))
|
||||
#define safe_halt() do { raw_safe_halt(); } while (0)
|
||||
|
||||
#endif /* CONFIG_TRACE_IRQFLAGS */
|
||||
|
||||
#define local_save_flags(flags) raw_local_save_flags(flags)
|
||||
|
||||
/*
|
||||
* Some architectures don't define arch_irqs_disabled(), so even if either
|
||||
* definition would be fine we need to use different ones for the time being
|
||||
* to avoid build issues.
|
||||
*/
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
|
||||
#define irqs_disabled() \
|
||||
({ \
|
||||
unsigned long _flags; \
|
||||
raw_local_save_flags(_flags); \
|
||||
raw_irqs_disabled_flags(_flags); \
|
||||
})
|
||||
#else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */
|
||||
#define irqs_disabled() raw_irqs_disabled()
|
||||
#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
|
||||
|
||||
#define irqs_disabled_flags(flags) raw_irqs_disabled_flags(flags)
|
||||
|
||||
#endif
|
||||
|
@@ -145,11 +145,11 @@ static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
|
||||
}
|
||||
|
||||
|
||||
/* jhash_3words - hash exactly 3, 2 or 1 word(s) */
|
||||
static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
|
||||
/* __jhash_nwords - hash exactly 3, 2 or 1 word(s) */
|
||||
static inline u32 __jhash_nwords(u32 a, u32 b, u32 c, u32 initval)
|
||||
{
|
||||
a += JHASH_INITVAL;
|
||||
b += JHASH_INITVAL;
|
||||
a += initval;
|
||||
b += initval;
|
||||
c += initval;
|
||||
|
||||
__jhash_final(a, b, c);
|
||||
@@ -157,14 +157,19 @@ static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
|
||||
return c;
|
||||
}
|
||||
|
||||
static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
|
||||
{
|
||||
return __jhash_nwords(a, b, c, initval + JHASH_INITVAL + (3 << 2));
|
||||
}
|
||||
|
||||
static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
|
||||
{
|
||||
return jhash_3words(a, b, 0, initval);
|
||||
return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
|
||||
}
|
||||
|
||||
static inline u32 jhash_1word(u32 a, u32 initval)
|
||||
{
|
||||
return jhash_3words(a, 0, 0, initval);
|
||||
return __jhash_nwords(a, 0, 0, initval + JHASH_INITVAL + (1 << 2));
|
||||
}
|
||||
|
||||
#endif /* _LINUX_JHASH_H */
|
||||
|
@@ -45,6 +45,12 @@
|
||||
* same as using STATIC_KEY_INIT_FALSE.
|
||||
*/
|
||||
|
||||
#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
|
||||
# define HAVE_JUMP_LABEL
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/bug.h>
|
||||
@@ -55,7 +61,7 @@ extern bool static_key_initialized;
|
||||
"%s used before call to jump_label_init", \
|
||||
__func__)
|
||||
|
||||
#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
|
||||
struct static_key {
|
||||
atomic_t enabled;
|
||||
@@ -66,13 +72,18 @@ struct static_key {
|
||||
#endif
|
||||
};
|
||||
|
||||
# include <asm/jump_label.h>
|
||||
# define HAVE_JUMP_LABEL
|
||||
#else
|
||||
struct static_key {
|
||||
atomic_t enabled;
|
||||
};
|
||||
#endif /* CC_HAVE_ASM_GOTO && CONFIG_JUMP_LABEL */
|
||||
#endif /* HAVE_JUMP_LABEL */
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
#include <asm/jump_label.h>
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
enum jump_label_type {
|
||||
JUMP_LABEL_DISABLE = 0,
|
||||
@@ -203,3 +214,5 @@ static inline bool static_key_enabled(struct static_key *key)
|
||||
}
|
||||
|
||||
#endif /* _LINUX_JUMP_LABEL_H */
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
@@ -44,6 +44,7 @@ void kasan_poison_object_data(struct kmem_cache *cache, void *object);
|
||||
|
||||
void kasan_kmalloc_large(const void *ptr, size_t size);
|
||||
void kasan_kfree_large(const void *ptr);
|
||||
void kasan_kfree(void *ptr);
|
||||
void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size);
|
||||
void kasan_krealloc(const void *object, size_t new_size);
|
||||
|
||||
@@ -71,6 +72,7 @@ static inline void kasan_poison_object_data(struct kmem_cache *cache,
|
||||
|
||||
static inline void kasan_kmalloc_large(void *ptr, size_t size) {}
|
||||
static inline void kasan_kfree_large(const void *ptr) {}
|
||||
static inline void kasan_kfree(void *ptr) {}
|
||||
static inline void kasan_kmalloc(struct kmem_cache *s, const void *object,
|
||||
size_t size) {}
|
||||
static inline void kasan_krealloc(const void *object, size_t new_size) {}
|
||||
|
@@ -22,14 +22,6 @@
|
||||
#define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0)
|
||||
#define ___config_enabled(__ignored, val, ...) val
|
||||
|
||||
/*
|
||||
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
||||
* 0 otherwise.
|
||||
*
|
||||
*/
|
||||
#define IS_ENABLED(option) \
|
||||
(config_enabled(option) || config_enabled(option##_MODULE))
|
||||
|
||||
/*
|
||||
* IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
|
||||
* otherwise. For boolean options, this is equivalent to
|
||||
@@ -43,4 +35,11 @@
|
||||
*/
|
||||
#define IS_MODULE(option) config_enabled(option##_MODULE)
|
||||
|
||||
/*
|
||||
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
||||
* 0 otherwise.
|
||||
*/
|
||||
#define IS_ENABLED(option) \
|
||||
(IS_BUILTIN(option) || IS_MODULE(option))
|
||||
|
||||
#endif /* __LINUX_KCONFIG_H */
|
||||
|
@@ -103,6 +103,18 @@
|
||||
(((__x) - ((__d) / 2)) / (__d)); \
|
||||
} \
|
||||
)
|
||||
/*
|
||||
* Same as above but for u64 dividends. divisor must be a 32-bit
|
||||
* number.
|
||||
*/
|
||||
#define DIV_ROUND_CLOSEST_ULL(x, divisor)( \
|
||||
{ \
|
||||
typeof(divisor) __d = divisor; \
|
||||
unsigned long long _tmp = (x) + (__d) / 2; \
|
||||
do_div(_tmp, __d); \
|
||||
_tmp; \
|
||||
} \
|
||||
)
|
||||
|
||||
/*
|
||||
* Multiplies an integer by a fraction, while avoiding unnecessary
|
||||
|
@@ -35,18 +35,6 @@ static inline void ksm_exit(struct mm_struct *mm)
|
||||
__ksm_exit(mm);
|
||||
}
|
||||
|
||||
/*
|
||||
* A KSM page is one of those write-protected "shared pages" or "merged pages"
|
||||
* which KSM maps into multiple mms, wherever identical anonymous page content
|
||||
* is found in VM_MERGEABLE vmas. It's a PageAnon page, pointing not to any
|
||||
* anon_vma, but to that page's node of the stable tree.
|
||||
*/
|
||||
static inline int PageKsm(struct page *page)
|
||||
{
|
||||
return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) ==
|
||||
(PAGE_MAPPING_ANON | PAGE_MAPPING_KSM);
|
||||
}
|
||||
|
||||
static inline struct stable_node *page_stable_node(struct page *page)
|
||||
{
|
||||
return PageKsm(page) ? page_rmapping(page) : NULL;
|
||||
@@ -87,11 +75,6 @@ static inline void ksm_exit(struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int PageKsm(struct page *page)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
|
||||
unsigned long end, int advice, unsigned long *vm_flags)
|
||||
|
@@ -165,12 +165,12 @@ enum kvm_bus {
|
||||
KVM_NR_BUSES
|
||||
};
|
||||
|
||||
int kvm_io_bus_write(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
|
||||
int kvm_io_bus_write(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr,
|
||||
int len, const void *val);
|
||||
int kvm_io_bus_write_cookie(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
|
||||
int len, const void *val, long cookie);
|
||||
int kvm_io_bus_read(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len,
|
||||
void *val);
|
||||
int kvm_io_bus_write_cookie(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx,
|
||||
gpa_t addr, int len, const void *val, long cookie);
|
||||
int kvm_io_bus_read(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr,
|
||||
int len, void *val);
|
||||
int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
|
||||
int len, struct kvm_io_device *dev);
|
||||
int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
|
||||
@@ -658,7 +658,6 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu);
|
||||
int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);
|
||||
|
||||
void *kvm_kvzalloc(unsigned long size);
|
||||
void kvm_kvfree(const void *addr);
|
||||
|
||||
#ifndef __KVM_HAVE_ARCH_VM_ALLOC
|
||||
static inline struct kvm *kvm_arch_alloc_vm(void)
|
||||
@@ -700,6 +699,20 @@ static inline wait_queue_head_t *kvm_arch_vcpu_wq(struct kvm_vcpu *vcpu)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __KVM_HAVE_ARCH_INTC_INITIALIZED
|
||||
/*
|
||||
* returns true if the virtual interrupt controller is initialized and
|
||||
* ready to accept virtual IRQ. On some architectures the virtual interrupt
|
||||
* controller is dynamically instantiated and this is not always true.
|
||||
*/
|
||||
bool kvm_arch_intc_initialized(struct kvm *kvm);
|
||||
#else
|
||||
static inline bool kvm_arch_intc_initialized(struct kvm *kvm)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
int kvm_arch_init_vm(struct kvm *kvm, unsigned long type);
|
||||
void kvm_arch_destroy_vm(struct kvm *kvm);
|
||||
void kvm_arch_sync_events(struct kvm *kvm);
|
||||
@@ -766,7 +779,8 @@ static inline void kvm_guest_enter(void)
|
||||
* one time slice). Lets treat guest mode as quiescent state, just like
|
||||
* we do with user-mode execution.
|
||||
*/
|
||||
rcu_virt_note_context_switch(smp_processor_id());
|
||||
if (!context_tracking_cpu_is_enabled())
|
||||
rcu_virt_note_context_switch(smp_processor_id());
|
||||
}
|
||||
|
||||
static inline void kvm_guest_exit(void)
|
||||
@@ -969,11 +983,16 @@ static inline int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args)
|
||||
#endif /* CONFIG_HAVE_KVM_EVENTFD */
|
||||
|
||||
#ifdef CONFIG_KVM_APIC_ARCHITECTURE
|
||||
static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu)
|
||||
static inline bool kvm_vcpu_is_reset_bsp(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id;
|
||||
}
|
||||
|
||||
static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return (vcpu->arch.apic_base & MSR_IA32_APICBASE_BSP) != 0;
|
||||
}
|
||||
|
||||
bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu);
|
||||
|
||||
#else
|
||||
|
@@ -13,7 +13,6 @@
|
||||
#define __LINUX_FLASH_LEDS_H_INCLUDED
|
||||
|
||||
#include <linux/leds.h>
|
||||
#include <uapi/linux/v4l2-controls.h>
|
||||
|
||||
struct device_node;
|
||||
struct led_classdev_flash;
|
||||
@@ -33,7 +32,7 @@ struct led_classdev_flash;
|
||||
#define LED_FAULT_LED_OVER_TEMPERATURE (1 << 8)
|
||||
#define LED_NUM_FLASH_FAULTS 9
|
||||
|
||||
#define LED_FLASH_MAX_SYSFS_GROUPS 7
|
||||
#define LED_FLASH_SYSFS_GROUPS_SIZE 5
|
||||
|
||||
struct led_flash_ops {
|
||||
/* set flash brightness */
|
||||
@@ -81,21 +80,7 @@ struct led_classdev_flash {
|
||||
struct led_flash_setting timeout;
|
||||
|
||||
/* LED Flash class sysfs groups */
|
||||
const struct attribute_group *sysfs_groups[LED_FLASH_MAX_SYSFS_GROUPS];
|
||||
|
||||
/* LEDs available for flash strobe synchronization */
|
||||
struct led_classdev_flash **sync_leds;
|
||||
|
||||
/* Number of LEDs available for flash strobe synchronization */
|
||||
int num_sync_leds;
|
||||
|
||||
/*
|
||||
* The identifier of the sub-led to synchronize the flash strobe with.
|
||||
* Identifiers start from 1, which reflects the first element from the
|
||||
* sync_leds array. 0 means that the flash strobe should not be
|
||||
* synchronized.
|
||||
*/
|
||||
u32 sync_led_id;
|
||||
const struct attribute_group *sysfs_groups[LED_FLASH_SYSFS_GROUPS_SIZE];
|
||||
};
|
||||
|
||||
static inline struct led_classdev_flash *lcdev_to_flcdev(
|
||||
|
@@ -47,7 +47,6 @@ struct led_classdev {
|
||||
#define SET_BRIGHTNESS_ASYNC (1 << 21)
|
||||
#define SET_BRIGHTNESS_SYNC (1 << 22)
|
||||
#define LED_DEV_CAP_FLASH (1 << 23)
|
||||
#define LED_DEV_CAP_SYNC_STROBE (1 << 24)
|
||||
|
||||
/* Set LED brightness level */
|
||||
/* Must not sleep, use a workqueue if needed */
|
||||
@@ -105,7 +104,11 @@ struct led_classdev {
|
||||
|
||||
extern int led_classdev_register(struct device *parent,
|
||||
struct led_classdev *led_cdev);
|
||||
extern int devm_led_classdev_register(struct device *parent,
|
||||
struct led_classdev *led_cdev);
|
||||
extern void led_classdev_unregister(struct led_classdev *led_cdev);
|
||||
extern void devm_led_classdev_unregister(struct device *parent,
|
||||
struct led_classdev *led_cdev);
|
||||
extern void led_classdev_suspend(struct led_classdev *led_cdev);
|
||||
extern void led_classdev_resume(struct led_classdev *led_cdev);
|
||||
|
||||
|
@@ -231,8 +231,7 @@ enum {
|
||||
ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity
|
||||
* led */
|
||||
ATA_FLAG_NO_DIPM = (1 << 23), /* host not happy with DIPM */
|
||||
ATA_FLAG_LOWTAG = (1 << 24), /* host wants lowest available tag */
|
||||
ATA_FLAG_SAS_HOST = (1 << 25), /* SAS host */
|
||||
ATA_FLAG_SAS_HOST = (1 << 24), /* SAS host */
|
||||
|
||||
/* bits 24:31 of ap->flags are reserved for LLD specific flags */
|
||||
|
||||
|
@@ -123,10 +123,10 @@ struct klp_patch {
|
||||
enum klp_state state;
|
||||
};
|
||||
|
||||
extern int klp_register_patch(struct klp_patch *);
|
||||
extern int klp_unregister_patch(struct klp_patch *);
|
||||
extern int klp_enable_patch(struct klp_patch *);
|
||||
extern int klp_disable_patch(struct klp_patch *);
|
||||
int klp_register_patch(struct klp_patch *);
|
||||
int klp_unregister_patch(struct klp_patch *);
|
||||
int klp_enable_patch(struct klp_patch *);
|
||||
int klp_disable_patch(struct klp_patch *);
|
||||
|
||||
#endif /* CONFIG_LIVEPATCH */
|
||||
|
||||
|
@@ -531,8 +531,13 @@ do { \
|
||||
# define might_lock_read(lock) do { } while (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PROVE_RCU
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
void lockdep_rcu_suspicious(const char *file, const int line, const char *s);
|
||||
#else
|
||||
static inline void
|
||||
lockdep_rcu_suspicious(const char *file, const int line, const char *s)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __LINUX_LOCKDEP_H */
|
||||
|
@@ -365,6 +365,14 @@ static inline unsigned long memblock_region_reserved_end_pfn(const struct memblo
|
||||
#define __initdata_memblock
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MEMTEST
|
||||
extern void early_memtest(phys_addr_t start, phys_addr_t end);
|
||||
#else
|
||||
static inline void early_memtest(phys_addr_t start, phys_addr_t end)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#else
|
||||
static inline phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align)
|
||||
{
|
||||
|
@@ -192,6 +192,9 @@ extern void get_page_bootmem(unsigned long ingo, struct page *page,
|
||||
void get_online_mems(void);
|
||||
void put_online_mems(void);
|
||||
|
||||
void mem_hotplug_begin(void);
|
||||
void mem_hotplug_done(void);
|
||||
|
||||
#else /* ! CONFIG_MEMORY_HOTPLUG */
|
||||
/*
|
||||
* Stub functions for when hotplug is off
|
||||
@@ -231,6 +234,9 @@ static inline int try_online_node(int nid)
|
||||
static inline void get_online_mems(void) {}
|
||||
static inline void put_online_mems(void) {}
|
||||
|
||||
static inline void mem_hotplug_begin(void) {}
|
||||
static inline void mem_hotplug_done(void) {}
|
||||
|
||||
#endif /* ! CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
|
@@ -29,14 +29,15 @@ extern mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn,
|
||||
mempool_free_t *free_fn, void *pool_data,
|
||||
gfp_t gfp_mask, int nid);
|
||||
|
||||
extern int mempool_resize(mempool_t *pool, int new_min_nr, gfp_t gfp_mask);
|
||||
extern int mempool_resize(mempool_t *pool, int new_min_nr);
|
||||
extern void mempool_destroy(mempool_t *pool);
|
||||
extern void * mempool_alloc(mempool_t *pool, gfp_t gfp_mask);
|
||||
extern void mempool_free(void *element, mempool_t *pool);
|
||||
|
||||
/*
|
||||
* A mempool_alloc_t and mempool_free_t that get the memory from
|
||||
* a slab that is passed in through pool_data.
|
||||
* a slab cache that is passed in through pool_data.
|
||||
* Note: the slab cache may not have a ctor function.
|
||||
*/
|
||||
void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data);
|
||||
void mempool_free_slab(void *element, void *pool_data);
|
||||
|
@@ -9,8 +9,13 @@
|
||||
|
||||
#include <linux/power_supply.h>
|
||||
|
||||
#define psy_to_ux500_charger(x) container_of((x), \
|
||||
struct ux500_charger, psy)
|
||||
/*
|
||||
* Valid only for supplies of type:
|
||||
* - POWER_SUPPLY_TYPE_MAINS,
|
||||
* - POWER_SUPPLY_TYPE_USB,
|
||||
* because only them store as drv_data pointer to struct ux500_charger.
|
||||
*/
|
||||
#define psy_to_ux500_charger(x) power_supply_get_drvdata(psy)
|
||||
|
||||
/* Forward declaration */
|
||||
struct ux500_charger;
|
||||
@@ -35,7 +40,7 @@ struct ux500_charger_ops {
|
||||
* @power_path USB power path support
|
||||
*/
|
||||
struct ux500_charger {
|
||||
struct power_supply psy;
|
||||
struct power_supply *psy;
|
||||
struct ux500_charger_ops ops;
|
||||
int max_out_volt;
|
||||
int max_out_curr;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user