Merge tag 'v3.13-rc4' into perf/core
Merge Linux 3.13-rc4, to refresh this branch with the latest fixes. Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -44,6 +44,20 @@
|
||||
#include <acpi/acpi_numa.h>
|
||||
#include <asm/acpi.h>
|
||||
|
||||
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_HANDLE(dev) acpi_device_handle(ACPI_COMPANION(dev))
|
||||
|
||||
static inline const char *acpi_dev_name(struct acpi_device *adev)
|
||||
{
|
||||
return dev_name(&adev->dev);
|
||||
}
|
||||
|
||||
enum acpi_irq_model_id {
|
||||
ACPI_IRQ_MODEL_PIC = 0,
|
||||
ACPI_IRQ_MODEL_IOAPIC,
|
||||
@@ -401,6 +415,15 @@ static inline bool acpi_driver_match_device(struct device *dev,
|
||||
|
||||
#define acpi_disabled 1
|
||||
|
||||
#define ACPI_COMPANION(dev) (NULL)
|
||||
#define ACPI_COMPANION_SET(dev, adev) do { } while (0)
|
||||
#define ACPI_HANDLE(dev) (NULL)
|
||||
|
||||
static inline const char *acpi_dev_name(struct acpi_device *adev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void acpi_early_init(void) { }
|
||||
|
||||
static inline int early_acpi_boot_init(void)
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/* Generic associative array implementation.
|
||||
*
|
||||
* See Documentation/assoc_array.txt for information.
|
||||
*
|
||||
* Copyright (C) 2013 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Howells (dhowells@redhat.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public Licence
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the Licence, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_ASSOC_ARRAY_H
|
||||
#define _LINUX_ASSOC_ARRAY_H
|
||||
|
||||
#ifdef CONFIG_ASSOCIATIVE_ARRAY
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define ASSOC_ARRAY_KEY_CHUNK_SIZE BITS_PER_LONG /* Key data retrieved in chunks of this size */
|
||||
|
||||
/*
|
||||
* Generic associative array.
|
||||
*/
|
||||
struct assoc_array {
|
||||
struct assoc_array_ptr *root; /* The node at the root of the tree */
|
||||
unsigned long nr_leaves_on_tree;
|
||||
};
|
||||
|
||||
/*
|
||||
* Operations on objects and index keys for use by array manipulation routines.
|
||||
*/
|
||||
struct assoc_array_ops {
|
||||
/* Method to get a chunk of an index key from caller-supplied data */
|
||||
unsigned long (*get_key_chunk)(const void *index_key, int level);
|
||||
|
||||
/* Method to get a piece of an object's index key */
|
||||
unsigned long (*get_object_key_chunk)(const void *object, int level);
|
||||
|
||||
/* Is this the object we're looking for? */
|
||||
bool (*compare_object)(const void *object, const void *index_key);
|
||||
|
||||
/* How different is an object from an index key, to a bit position in
|
||||
* their keys? (or -1 if they're the same)
|
||||
*/
|
||||
int (*diff_objects)(const void *object, const void *index_key);
|
||||
|
||||
/* Method to free an object. */
|
||||
void (*free_object)(void *object);
|
||||
};
|
||||
|
||||
/*
|
||||
* Access and manipulation functions.
|
||||
*/
|
||||
struct assoc_array_edit;
|
||||
|
||||
static inline void assoc_array_init(struct assoc_array *array)
|
||||
{
|
||||
array->root = NULL;
|
||||
array->nr_leaves_on_tree = 0;
|
||||
}
|
||||
|
||||
extern int assoc_array_iterate(const struct assoc_array *array,
|
||||
int (*iterator)(const void *object,
|
||||
void *iterator_data),
|
||||
void *iterator_data);
|
||||
extern void *assoc_array_find(const struct assoc_array *array,
|
||||
const struct assoc_array_ops *ops,
|
||||
const void *index_key);
|
||||
extern void assoc_array_destroy(struct assoc_array *array,
|
||||
const struct assoc_array_ops *ops);
|
||||
extern struct assoc_array_edit *assoc_array_insert(struct assoc_array *array,
|
||||
const struct assoc_array_ops *ops,
|
||||
const void *index_key,
|
||||
void *object);
|
||||
extern void assoc_array_insert_set_object(struct assoc_array_edit *edit,
|
||||
void *object);
|
||||
extern struct assoc_array_edit *assoc_array_delete(struct assoc_array *array,
|
||||
const struct assoc_array_ops *ops,
|
||||
const void *index_key);
|
||||
extern struct assoc_array_edit *assoc_array_clear(struct assoc_array *array,
|
||||
const struct assoc_array_ops *ops);
|
||||
extern void assoc_array_apply_edit(struct assoc_array_edit *edit);
|
||||
extern void assoc_array_cancel_edit(struct assoc_array_edit *edit);
|
||||
extern int assoc_array_gc(struct assoc_array *array,
|
||||
const struct assoc_array_ops *ops,
|
||||
bool (*iterator)(void *object, void *iterator_data),
|
||||
void *iterator_data);
|
||||
|
||||
#endif /* CONFIG_ASSOCIATIVE_ARRAY */
|
||||
#endif /* _LINUX_ASSOC_ARRAY_H */
|
||||
@@ -0,0 +1,182 @@
|
||||
/* Private definitions for the generic associative array implementation.
|
||||
*
|
||||
* See Documentation/assoc_array.txt for information.
|
||||
*
|
||||
* Copyright (C) 2013 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Howells (dhowells@redhat.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public Licence
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the Licence, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_ASSOC_ARRAY_PRIV_H
|
||||
#define _LINUX_ASSOC_ARRAY_PRIV_H
|
||||
|
||||
#ifdef CONFIG_ASSOCIATIVE_ARRAY
|
||||
|
||||
#include <linux/assoc_array.h>
|
||||
|
||||
#define ASSOC_ARRAY_FAN_OUT 16 /* Number of slots per node */
|
||||
#define ASSOC_ARRAY_FAN_MASK (ASSOC_ARRAY_FAN_OUT - 1)
|
||||
#define ASSOC_ARRAY_LEVEL_STEP (ilog2(ASSOC_ARRAY_FAN_OUT))
|
||||
#define ASSOC_ARRAY_LEVEL_STEP_MASK (ASSOC_ARRAY_LEVEL_STEP - 1)
|
||||
#define ASSOC_ARRAY_KEY_CHUNK_MASK (ASSOC_ARRAY_KEY_CHUNK_SIZE - 1)
|
||||
#define ASSOC_ARRAY_KEY_CHUNK_SHIFT (ilog2(BITS_PER_LONG))
|
||||
|
||||
/*
|
||||
* Undefined type representing a pointer with type information in the bottom
|
||||
* two bits.
|
||||
*/
|
||||
struct assoc_array_ptr;
|
||||
|
||||
/*
|
||||
* An N-way node in the tree.
|
||||
*
|
||||
* Each slot contains one of four things:
|
||||
*
|
||||
* (1) Nothing (NULL).
|
||||
*
|
||||
* (2) A leaf object (pointer types 0).
|
||||
*
|
||||
* (3) A next-level node (pointer type 1, subtype 0).
|
||||
*
|
||||
* (4) A shortcut (pointer type 1, subtype 1).
|
||||
*
|
||||
* The tree is optimised for search-by-ID, but permits reasonable iteration
|
||||
* also.
|
||||
*
|
||||
* The tree is navigated by constructing an index key consisting of an array of
|
||||
* segments, where each segment is ilog2(ASSOC_ARRAY_FAN_OUT) bits in size.
|
||||
*
|
||||
* The segments correspond to levels of the tree (the first segment is used at
|
||||
* level 0, the second at level 1, etc.).
|
||||
*/
|
||||
struct assoc_array_node {
|
||||
struct assoc_array_ptr *back_pointer;
|
||||
u8 parent_slot;
|
||||
struct assoc_array_ptr *slots[ASSOC_ARRAY_FAN_OUT];
|
||||
unsigned long nr_leaves_on_branch;
|
||||
};
|
||||
|
||||
/*
|
||||
* A shortcut through the index space out to where a collection of nodes/leaves
|
||||
* with the same IDs live.
|
||||
*/
|
||||
struct assoc_array_shortcut {
|
||||
struct assoc_array_ptr *back_pointer;
|
||||
int parent_slot;
|
||||
int skip_to_level;
|
||||
struct assoc_array_ptr *next_node;
|
||||
unsigned long index_key[];
|
||||
};
|
||||
|
||||
/*
|
||||
* Preallocation cache.
|
||||
*/
|
||||
struct assoc_array_edit {
|
||||
struct rcu_head rcu;
|
||||
struct assoc_array *array;
|
||||
const struct assoc_array_ops *ops;
|
||||
const struct assoc_array_ops *ops_for_excised_subtree;
|
||||
struct assoc_array_ptr *leaf;
|
||||
struct assoc_array_ptr **leaf_p;
|
||||
struct assoc_array_ptr *dead_leaf;
|
||||
struct assoc_array_ptr *new_meta[3];
|
||||
struct assoc_array_ptr *excised_meta[1];
|
||||
struct assoc_array_ptr *excised_subtree;
|
||||
struct assoc_array_ptr **set_backpointers[ASSOC_ARRAY_FAN_OUT];
|
||||
struct assoc_array_ptr *set_backpointers_to;
|
||||
struct assoc_array_node *adjust_count_on;
|
||||
long adjust_count_by;
|
||||
struct {
|
||||
struct assoc_array_ptr **ptr;
|
||||
struct assoc_array_ptr *to;
|
||||
} set[2];
|
||||
struct {
|
||||
u8 *p;
|
||||
u8 to;
|
||||
} set_parent_slot[1];
|
||||
u8 segment_cache[ASSOC_ARRAY_FAN_OUT + 1];
|
||||
};
|
||||
|
||||
/*
|
||||
* Internal tree member pointers are marked in the bottom one or two bits to
|
||||
* indicate what type they are so that we don't have to look behind every
|
||||
* pointer to see what it points to.
|
||||
*
|
||||
* We provide functions to test type annotations and to create and translate
|
||||
* the annotated pointers.
|
||||
*/
|
||||
#define ASSOC_ARRAY_PTR_TYPE_MASK 0x1UL
|
||||
#define ASSOC_ARRAY_PTR_LEAF_TYPE 0x0UL /* Points to leaf (or nowhere) */
|
||||
#define ASSOC_ARRAY_PTR_META_TYPE 0x1UL /* Points to node or shortcut */
|
||||
#define ASSOC_ARRAY_PTR_SUBTYPE_MASK 0x2UL
|
||||
#define ASSOC_ARRAY_PTR_NODE_SUBTYPE 0x0UL
|
||||
#define ASSOC_ARRAY_PTR_SHORTCUT_SUBTYPE 0x2UL
|
||||
|
||||
static inline bool assoc_array_ptr_is_meta(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return (unsigned long)x & ASSOC_ARRAY_PTR_TYPE_MASK;
|
||||
}
|
||||
static inline bool assoc_array_ptr_is_leaf(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return !assoc_array_ptr_is_meta(x);
|
||||
}
|
||||
static inline bool assoc_array_ptr_is_shortcut(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return (unsigned long)x & ASSOC_ARRAY_PTR_SUBTYPE_MASK;
|
||||
}
|
||||
static inline bool assoc_array_ptr_is_node(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return !assoc_array_ptr_is_shortcut(x);
|
||||
}
|
||||
|
||||
static inline void *assoc_array_ptr_to_leaf(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return (void *)((unsigned long)x & ~ASSOC_ARRAY_PTR_TYPE_MASK);
|
||||
}
|
||||
|
||||
static inline
|
||||
unsigned long __assoc_array_ptr_to_meta(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return (unsigned long)x &
|
||||
~(ASSOC_ARRAY_PTR_SUBTYPE_MASK | ASSOC_ARRAY_PTR_TYPE_MASK);
|
||||
}
|
||||
static inline
|
||||
struct assoc_array_node *assoc_array_ptr_to_node(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return (struct assoc_array_node *)__assoc_array_ptr_to_meta(x);
|
||||
}
|
||||
static inline
|
||||
struct assoc_array_shortcut *assoc_array_ptr_to_shortcut(const struct assoc_array_ptr *x)
|
||||
{
|
||||
return (struct assoc_array_shortcut *)__assoc_array_ptr_to_meta(x);
|
||||
}
|
||||
|
||||
static inline
|
||||
struct assoc_array_ptr *__assoc_array_x_to_ptr(const void *p, unsigned long t)
|
||||
{
|
||||
return (struct assoc_array_ptr *)((unsigned long)p | t);
|
||||
}
|
||||
static inline
|
||||
struct assoc_array_ptr *assoc_array_leaf_to_ptr(const void *p)
|
||||
{
|
||||
return __assoc_array_x_to_ptr(p, ASSOC_ARRAY_PTR_LEAF_TYPE);
|
||||
}
|
||||
static inline
|
||||
struct assoc_array_ptr *assoc_array_node_to_ptr(const struct assoc_array_node *p)
|
||||
{
|
||||
return __assoc_array_x_to_ptr(
|
||||
p, ASSOC_ARRAY_PTR_META_TYPE | ASSOC_ARRAY_PTR_NODE_SUBTYPE);
|
||||
}
|
||||
static inline
|
||||
struct assoc_array_ptr *assoc_array_shortcut_to_ptr(const struct assoc_array_shortcut *p)
|
||||
{
|
||||
return __assoc_array_x_to_ptr(
|
||||
p, ASSOC_ARRAY_PTR_META_TYPE | ASSOC_ARRAY_PTR_SHORTCUT_SUBTYPE);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ASSOCIATIVE_ARRAY */
|
||||
#endif /* _LINUX_ASSOC_ARRAY_PRIV_H */
|
||||
@@ -73,6 +73,8 @@ struct audit_field {
|
||||
void *lsm_rule;
|
||||
};
|
||||
|
||||
extern int is_audit_feature_set(int which);
|
||||
|
||||
extern int __init audit_register_class(int class, unsigned *list);
|
||||
extern int audit_classify_syscall(int abi, unsigned syscall);
|
||||
extern int audit_classify_arch(int arch);
|
||||
@@ -207,7 +209,7 @@ static inline int audit_get_sessionid(struct task_struct *tsk)
|
||||
|
||||
extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp);
|
||||
extern void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode);
|
||||
extern int __audit_bprm(struct linux_binprm *bprm);
|
||||
extern void __audit_bprm(struct linux_binprm *bprm);
|
||||
extern int __audit_socketcall(int nargs, unsigned long *args);
|
||||
extern int __audit_sockaddr(int len, void *addr);
|
||||
extern void __audit_fd_pair(int fd1, int fd2);
|
||||
@@ -236,11 +238,10 @@ static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid
|
||||
if (unlikely(!audit_dummy_context()))
|
||||
__audit_ipc_set_perm(qbytes, uid, gid, mode);
|
||||
}
|
||||
static inline int audit_bprm(struct linux_binprm *bprm)
|
||||
static inline void audit_bprm(struct linux_binprm *bprm)
|
||||
{
|
||||
if (unlikely(!audit_dummy_context()))
|
||||
return __audit_bprm(bprm);
|
||||
return 0;
|
||||
__audit_bprm(bprm);
|
||||
}
|
||||
static inline int audit_socketcall(int nargs, unsigned long *args)
|
||||
{
|
||||
@@ -367,10 +368,8 @@ static inline void audit_ipc_obj(struct kern_ipc_perm *ipcp)
|
||||
static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid,
|
||||
gid_t gid, umode_t mode)
|
||||
{ }
|
||||
static inline int audit_bprm(struct linux_binprm *bprm)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void audit_bprm(struct linux_binprm *bprm)
|
||||
{ }
|
||||
static inline int audit_socketcall(int nargs, unsigned long *args)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -505,6 +505,9 @@ struct request_queue {
|
||||
(1 << QUEUE_FLAG_SAME_COMP) | \
|
||||
(1 << QUEUE_FLAG_ADD_RANDOM))
|
||||
|
||||
#define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
|
||||
(1 << QUEUE_FLAG_SAME_COMP))
|
||||
|
||||
static inline void queue_lockdep_assert_held(struct request_queue *q)
|
||||
{
|
||||
if (q->queue_lock)
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
|
||||
#endif
|
||||
|
||||
#define uninitialized_var(x) x
|
||||
|
||||
#ifndef __HAVE_BUILTIN_BSWAP16__
|
||||
/* icc has this, but it's called _bswap16 */
|
||||
#define __HAVE_BUILTIN_BSWAP16__
|
||||
|
||||
@@ -29,8 +29,10 @@ struct vfsmount;
|
||||
/* The hash is always the low bits of hash_len */
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
#define HASH_LEN_DECLARE u32 hash; u32 len;
|
||||
#define bytemask_from_count(cnt) (~(~0ul << (cnt)*8))
|
||||
#else
|
||||
#define HASH_LEN_DECLARE u32 len; u32 hash;
|
||||
#define bytemask_from_count(cnt) (~(~0ul >> (cnt)*8))
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -644,9 +644,11 @@ struct device_dma_parameters {
|
||||
unsigned long segment_boundary_mask;
|
||||
};
|
||||
|
||||
struct acpi_device;
|
||||
|
||||
struct acpi_dev_node {
|
||||
#ifdef CONFIG_ACPI
|
||||
void *handle;
|
||||
struct acpi_device *companion;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -790,14 +792,6 @@ static inline struct device *kobj_to_dev(struct kobject *kobj)
|
||||
return container_of(kobj, struct device, kobj);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
#define ACPI_HANDLE(dev) ((dev)->acpi_node.handle)
|
||||
#define ACPI_HANDLE_SET(dev, _handle_) (dev)->acpi_node.handle = (_handle_)
|
||||
#else
|
||||
#define ACPI_HANDLE(dev) (NULL)
|
||||
#define ACPI_HANDLE_SET(dev, _handle_) do { } while (0)
|
||||
#endif
|
||||
|
||||
/* Get the wakeup routines, which depend on struct device */
|
||||
#include <linux/pm_wakeup.h>
|
||||
|
||||
|
||||
+56
-20
@@ -45,13 +45,13 @@ static inline int dma_submit_error(dma_cookie_t cookie)
|
||||
|
||||
/**
|
||||
* enum dma_status - DMA transaction status
|
||||
* @DMA_SUCCESS: transaction completed successfully
|
||||
* @DMA_COMPLETE: transaction completed
|
||||
* @DMA_IN_PROGRESS: transaction not yet processed
|
||||
* @DMA_PAUSED: transaction is paused
|
||||
* @DMA_ERROR: transaction failed
|
||||
*/
|
||||
enum dma_status {
|
||||
DMA_SUCCESS,
|
||||
DMA_COMPLETE,
|
||||
DMA_IN_PROGRESS,
|
||||
DMA_PAUSED,
|
||||
DMA_ERROR,
|
||||
@@ -171,12 +171,6 @@ struct dma_interleaved_template {
|
||||
* @DMA_CTRL_ACK - if clear, the descriptor cannot be reused until the client
|
||||
* acknowledges receipt, i.e. has has a chance to establish any dependency
|
||||
* chains
|
||||
* @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s)
|
||||
* @DMA_COMPL_SKIP_DEST_UNMAP - set to disable dma-unmapping the destination(s)
|
||||
* @DMA_COMPL_SRC_UNMAP_SINGLE - set to do the source dma-unmapping as single
|
||||
* (if not set, do the source dma-unmapping as page)
|
||||
* @DMA_COMPL_DEST_UNMAP_SINGLE - set to do the destination dma-unmapping as single
|
||||
* (if not set, do the destination dma-unmapping as page)
|
||||
* @DMA_PREP_PQ_DISABLE_P - prevent generation of P while generating Q
|
||||
* @DMA_PREP_PQ_DISABLE_Q - prevent generation of Q while generating P
|
||||
* @DMA_PREP_CONTINUE - indicate to a driver that it is reusing buffers as
|
||||
@@ -188,14 +182,10 @@ struct dma_interleaved_template {
|
||||
enum dma_ctrl_flags {
|
||||
DMA_PREP_INTERRUPT = (1 << 0),
|
||||
DMA_CTRL_ACK = (1 << 1),
|
||||
DMA_COMPL_SKIP_SRC_UNMAP = (1 << 2),
|
||||
DMA_COMPL_SKIP_DEST_UNMAP = (1 << 3),
|
||||
DMA_COMPL_SRC_UNMAP_SINGLE = (1 << 4),
|
||||
DMA_COMPL_DEST_UNMAP_SINGLE = (1 << 5),
|
||||
DMA_PREP_PQ_DISABLE_P = (1 << 6),
|
||||
DMA_PREP_PQ_DISABLE_Q = (1 << 7),
|
||||
DMA_PREP_CONTINUE = (1 << 8),
|
||||
DMA_PREP_FENCE = (1 << 9),
|
||||
DMA_PREP_PQ_DISABLE_P = (1 << 2),
|
||||
DMA_PREP_PQ_DISABLE_Q = (1 << 3),
|
||||
DMA_PREP_CONTINUE = (1 << 4),
|
||||
DMA_PREP_FENCE = (1 << 5),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -413,6 +403,17 @@ void dma_chan_cleanup(struct kref *kref);
|
||||
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
||||
|
||||
typedef void (*dma_async_tx_callback)(void *dma_async_param);
|
||||
|
||||
struct dmaengine_unmap_data {
|
||||
u8 to_cnt;
|
||||
u8 from_cnt;
|
||||
u8 bidi_cnt;
|
||||
struct device *dev;
|
||||
struct kref kref;
|
||||
size_t len;
|
||||
dma_addr_t addr[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dma_async_tx_descriptor - async transaction descriptor
|
||||
* ---dma generic offload fields---
|
||||
@@ -438,6 +439,7 @@ struct dma_async_tx_descriptor {
|
||||
dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx);
|
||||
dma_async_tx_callback callback;
|
||||
void *callback_param;
|
||||
struct dmaengine_unmap_data *unmap;
|
||||
#ifdef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH
|
||||
struct dma_async_tx_descriptor *next;
|
||||
struct dma_async_tx_descriptor *parent;
|
||||
@@ -445,6 +447,40 @@ struct dma_async_tx_descriptor {
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DMA_ENGINE
|
||||
static inline void dma_set_unmap(struct dma_async_tx_descriptor *tx,
|
||||
struct dmaengine_unmap_data *unmap)
|
||||
{
|
||||
kref_get(&unmap->kref);
|
||||
tx->unmap = unmap;
|
||||
}
|
||||
|
||||
struct dmaengine_unmap_data *
|
||||
dmaengine_get_unmap_data(struct device *dev, int nr, gfp_t flags);
|
||||
void dmaengine_unmap_put(struct dmaengine_unmap_data *unmap);
|
||||
#else
|
||||
static inline void dma_set_unmap(struct dma_async_tx_descriptor *tx,
|
||||
struct dmaengine_unmap_data *unmap)
|
||||
{
|
||||
}
|
||||
static inline struct dmaengine_unmap_data *
|
||||
dmaengine_get_unmap_data(struct device *dev, int nr, gfp_t flags)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline void dmaengine_unmap_put(struct dmaengine_unmap_data *unmap)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void dma_descriptor_unmap(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
if (tx->unmap) {
|
||||
dmaengine_unmap_put(tx->unmap);
|
||||
tx->unmap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH
|
||||
static inline void txd_lock(struct dma_async_tx_descriptor *txd)
|
||||
{
|
||||
@@ -979,10 +1015,10 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie,
|
||||
{
|
||||
if (last_complete <= last_used) {
|
||||
if ((cookie <= last_complete) || (cookie > last_used))
|
||||
return DMA_SUCCESS;
|
||||
return DMA_COMPLETE;
|
||||
} else {
|
||||
if ((cookie <= last_complete) && (cookie > last_used))
|
||||
return DMA_SUCCESS;
|
||||
return DMA_COMPLETE;
|
||||
}
|
||||
return DMA_IN_PROGRESS;
|
||||
}
|
||||
@@ -1013,11 +1049,11 @@ static inline struct dma_chan *dma_find_channel(enum dma_transaction_type tx_typ
|
||||
}
|
||||
static inline enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie)
|
||||
{
|
||||
return DMA_SUCCESS;
|
||||
return DMA_COMPLETE;
|
||||
}
|
||||
static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
return DMA_SUCCESS;
|
||||
return DMA_COMPLETE;
|
||||
}
|
||||
static inline void dma_issue_pending_all(void)
|
||||
{
|
||||
|
||||
@@ -801,6 +801,8 @@ struct efivar_entry {
|
||||
struct efi_variable var;
|
||||
struct list_head list;
|
||||
struct kobject kobj;
|
||||
bool scanning;
|
||||
bool deleting;
|
||||
};
|
||||
|
||||
|
||||
@@ -866,6 +868,8 @@ void efivar_run_worker(void);
|
||||
#if defined(CONFIG_EFI_VARS) || defined(CONFIG_EFI_VARS_MODULE)
|
||||
int efivars_sysfs_init(void);
|
||||
|
||||
#define EFIVARS_DATA_SIZE_MAX 1024
|
||||
|
||||
#endif /* CONFIG_EFI_VARS */
|
||||
|
||||
#endif /* _LINUX_EFI_H */
|
||||
|
||||
@@ -2622,7 +2622,9 @@ extern int simple_write_begin(struct file *file, struct address_space *mapping,
|
||||
extern int simple_write_end(struct file *file, struct address_space *mapping,
|
||||
loff_t pos, unsigned len, unsigned copied,
|
||||
struct page *page, void *fsdata);
|
||||
extern int always_delete_dentry(const struct dentry *);
|
||||
extern struct inode *alloc_anon_inode(struct super_block *);
|
||||
extern const struct dentry_operations simple_dentry_operations;
|
||||
|
||||
extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
|
||||
extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
|
||||
|
||||
@@ -273,49 +273,40 @@ static struct genl_family ZZZ_genl_family __read_mostly = {
|
||||
* Magic: define multicast groups
|
||||
* Magic: define multicast group registration helper
|
||||
*/
|
||||
#define ZZZ_genl_mcgrps CONCAT_(GENL_MAGIC_FAMILY, _genl_mcgrps)
|
||||
static const struct genl_multicast_group ZZZ_genl_mcgrps[] = {
|
||||
#undef GENL_mc_group
|
||||
#define GENL_mc_group(group) { .name = #group, },
|
||||
#include GENL_MAGIC_INCLUDE_FILE
|
||||
};
|
||||
|
||||
enum CONCAT_(GENL_MAGIC_FAMILY, group_ids) {
|
||||
#undef GENL_mc_group
|
||||
#define GENL_mc_group(group) CONCAT_(GENL_MAGIC_FAMILY, _group_ ## group),
|
||||
#include GENL_MAGIC_INCLUDE_FILE
|
||||
};
|
||||
|
||||
#undef GENL_mc_group
|
||||
#define GENL_mc_group(group) \
|
||||
static struct genl_multicast_group \
|
||||
CONCAT_(GENL_MAGIC_FAMILY, _mcg_ ## group) __read_mostly = { \
|
||||
.name = #group, \
|
||||
}; \
|
||||
static int CONCAT_(GENL_MAGIC_FAMILY, _genl_multicast_ ## group)( \
|
||||
struct sk_buff *skb, gfp_t flags) \
|
||||
{ \
|
||||
unsigned int group_id = \
|
||||
CONCAT_(GENL_MAGIC_FAMILY, _mcg_ ## group).id; \
|
||||
if (!group_id) \
|
||||
return -EINVAL; \
|
||||
return genlmsg_multicast(skb, 0, group_id, flags); \
|
||||
CONCAT_(GENL_MAGIC_FAMILY, _group_ ## group); \
|
||||
return genlmsg_multicast(&ZZZ_genl_family, skb, 0, \
|
||||
group_id, flags); \
|
||||
}
|
||||
|
||||
#include GENL_MAGIC_INCLUDE_FILE
|
||||
|
||||
int CONCAT_(GENL_MAGIC_FAMILY, _genl_register)(void)
|
||||
{
|
||||
int err = genl_register_family_with_ops(&ZZZ_genl_family,
|
||||
ZZZ_genl_ops, ARRAY_SIZE(ZZZ_genl_ops));
|
||||
if (err)
|
||||
return err;
|
||||
#undef GENL_mc_group
|
||||
#define GENL_mc_group(group) \
|
||||
err = genl_register_mc_group(&ZZZ_genl_family, \
|
||||
&CONCAT_(GENL_MAGIC_FAMILY, _mcg_ ## group)); \
|
||||
if (err) \
|
||||
goto fail; \
|
||||
else \
|
||||
pr_info("%s: mcg %s: %u\n", #group, \
|
||||
__stringify(GENL_MAGIC_FAMILY), \
|
||||
CONCAT_(GENL_MAGIC_FAMILY, _mcg_ ## group).id);
|
||||
|
||||
#include GENL_MAGIC_INCLUDE_FILE
|
||||
|
||||
#undef GENL_mc_group
|
||||
#define GENL_mc_group(group)
|
||||
return 0;
|
||||
fail:
|
||||
genl_unregister_family(&ZZZ_genl_family);
|
||||
return err;
|
||||
|
||||
int CONCAT_(GENL_MAGIC_FAMILY, _genl_register)(void)
|
||||
{
|
||||
return genl_register_family_with_ops_groups(&ZZZ_genl_family, \
|
||||
ZZZ_genl_ops, \
|
||||
ZZZ_genl_mcgrps);
|
||||
}
|
||||
|
||||
void CONCAT_(GENL_MAGIC_FAMILY, _genl_unregister)(void)
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
#define __LINUX_GPIO_DRIVER_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
struct device;
|
||||
struct gpio_desc;
|
||||
struct of_phandle_args;
|
||||
struct device_node;
|
||||
struct seq_file;
|
||||
|
||||
/**
|
||||
@@ -125,6 +128,13 @@ extern struct gpio_chip *gpiochip_find(void *data,
|
||||
int gpiod_lock_as_irq(struct gpio_desc *desc);
|
||||
void gpiod_unlock_as_irq(struct gpio_desc *desc);
|
||||
|
||||
enum gpio_lookup_flags {
|
||||
GPIO_ACTIVE_HIGH = (0 << 0),
|
||||
GPIO_ACTIVE_LOW = (1 << 0),
|
||||
GPIO_OPEN_DRAIN = (1 << 1),
|
||||
GPIO_OPEN_SOURCE = (1 << 2),
|
||||
};
|
||||
|
||||
/**
|
||||
* Lookup table for associating GPIOs to specific devices and functions using
|
||||
* platform data.
|
||||
@@ -152,9 +162,9 @@ struct gpiod_lookup {
|
||||
*/
|
||||
unsigned int idx;
|
||||
/*
|
||||
* mask of GPIOF_* values
|
||||
* mask of GPIO_* values
|
||||
*/
|
||||
unsigned long flags;
|
||||
enum gpio_lookup_flags flags;
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
#include <linux/hid.h>
|
||||
#include <linux/hid-sensor-ids.h>
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/iio/trigger.h>
|
||||
|
||||
/**
|
||||
* struct hid_sensor_hub_attribute_info - Attribute info
|
||||
@@ -40,6 +42,8 @@ struct hid_sensor_hub_attribute_info {
|
||||
s32 units;
|
||||
s32 unit_expo;
|
||||
s32 size;
|
||||
s32 logical_minimum;
|
||||
s32 logical_maximum;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -184,6 +188,7 @@ struct hid_sensor_common {
|
||||
struct platform_device *pdev;
|
||||
unsigned usage_id;
|
||||
bool data_ready;
|
||||
struct iio_trigger *trigger;
|
||||
struct hid_sensor_hub_attribute_info poll;
|
||||
struct hid_sensor_hub_attribute_info report_state;
|
||||
struct hid_sensor_hub_attribute_info power_state;
|
||||
|
||||
@@ -117,4 +117,16 @@
|
||||
#define HID_USAGE_SENSOR_PROP_REPORT_STATE 0x200316
|
||||
#define HID_USAGE_SENSOR_PROY_POWER_STATE 0x200319
|
||||
|
||||
/* Power state enumerations */
|
||||
#define HID_USAGE_SENSOR_PROP_POWER_STATE_UNDEFINED_ENUM 0x00
|
||||
#define HID_USAGE_SENSOR_PROP_POWER_STATE_D0_FULL_POWER_ENUM 0x01
|
||||
#define HID_USAGE_SENSOR_PROP_POWER_STATE_D1_LOW_POWER_ENUM 0x02
|
||||
#define HID_USAGE_SENSOR_PROP_POWER_STATE_D2_STANDBY_WITH_WAKE_ENUM 0x03
|
||||
#define HID_USAGE_SENSOR_PROP_POWER_STATE_D3_SLEEP_WITH_WAKE_ENUM 0x04
|
||||
#define HID_USAGE_SENSOR_PROP_POWER_STATE_D4_POWER_OFF_ENUM 0x05
|
||||
|
||||
/* Report State enumerations */
|
||||
#define HID_USAGE_SENSOR_PROP_REPORTING_STATE_NO_EVENTS_ENUM 0x00
|
||||
#define HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM 0x01
|
||||
|
||||
#endif
|
||||
|
||||
+10
-5
@@ -31,6 +31,7 @@ struct hugepage_subpool *hugepage_new_subpool(long nr_blocks);
|
||||
void hugepage_put_subpool(struct hugepage_subpool *spool);
|
||||
|
||||
int PageHuge(struct page *page);
|
||||
int PageHeadHuge(struct page *page_head);
|
||||
|
||||
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 *);
|
||||
@@ -69,7 +70,6 @@ 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 copy_huge_page(struct page *dst, struct page *src);
|
||||
|
||||
#ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE
|
||||
pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud);
|
||||
@@ -104,6 +104,11 @@ static inline int PageHuge(struct page *page)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int PageHeadHuge(struct page *page_head)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
@@ -137,12 +142,12 @@ static inline int dequeue_hwpoisoned_huge_page(struct page *page)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define isolate_huge_page(p, l) false
|
||||
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 void copy_huge_page(struct page *dst, struct page *src)
|
||||
{
|
||||
}
|
||||
|
||||
static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
unsigned long address, unsigned long end, pgprot_t newprot)
|
||||
|
||||
@@ -119,4 +119,21 @@ extern int macvlan_link_register(struct rtnl_link_ops *ops);
|
||||
extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev);
|
||||
|
||||
#if IS_ENABLED(CONFIG_MACVLAN)
|
||||
static inline struct net_device *
|
||||
macvlan_dev_real_dev(const struct net_device *dev)
|
||||
{
|
||||
struct macvlan_dev *macvlan = netdev_priv(dev);
|
||||
|
||||
return macvlan->lowerdev;
|
||||
}
|
||||
#else
|
||||
static inline struct net_device *
|
||||
macvlan_dev_real_dev(const struct net_device *dev)
|
||||
{
|
||||
BUG();
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_IF_MACVLAN_H */
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <uapi/linux/ipv6.h>
|
||||
|
||||
#define ipv6_optlen(p) (((p)->hdrlen+1) << 3)
|
||||
#define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
|
||||
/*
|
||||
* This structure contains configuration options per IPv6 link.
|
||||
*/
|
||||
|
||||
+6
-1
@@ -70,6 +70,9 @@ typedef void (*irq_preflow_handler_t)(struct irq_data *data);
|
||||
* IRQ_MOVE_PCNTXT - Interrupt can be migrated from process context
|
||||
* IRQ_NESTED_TRHEAD - Interrupt nests into another thread
|
||||
* IRQ_PER_CPU_DEVID - Dev_id is a per-cpu variable
|
||||
* IRQ_IS_POLLED - Always polled by another interrupt. Exclude
|
||||
* it from the spurious interrupt detection
|
||||
* mechanism and from core side polling.
|
||||
*/
|
||||
enum {
|
||||
IRQ_TYPE_NONE = 0x00000000,
|
||||
@@ -94,12 +97,14 @@ enum {
|
||||
IRQ_NESTED_THREAD = (1 << 15),
|
||||
IRQ_NOTHREAD = (1 << 16),
|
||||
IRQ_PER_CPU_DEVID = (1 << 17),
|
||||
IRQ_IS_POLLED = (1 << 18),
|
||||
};
|
||||
|
||||
#define IRQF_MODIFY_MASK \
|
||||
(IRQ_TYPE_SENSE_MASK | IRQ_NOPROBE | IRQ_NOREQUEST | \
|
||||
IRQ_NOAUTOEN | IRQ_MOVE_PCNTXT | IRQ_LEVEL | IRQ_NO_BALANCING | \
|
||||
IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID)
|
||||
IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID | \
|
||||
IRQ_IS_POLLED)
|
||||
|
||||
#define IRQ_NO_BALANCING_MASK (IRQ_PER_CPU | IRQ_NO_BALANCING)
|
||||
|
||||
|
||||
@@ -14,6 +14,6 @@ enum irqreturn {
|
||||
};
|
||||
|
||||
typedef enum irqreturn irqreturn_t;
|
||||
#define IRQ_RETVAL(x) ((x) != IRQ_NONE)
|
||||
#define IRQ_RETVAL(x) ((x) ? IRQ_HANDLED : IRQ_NONE)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -193,7 +193,8 @@ extern int _cond_resched(void);
|
||||
(__x < 0) ? -__x : __x; \
|
||||
})
|
||||
|
||||
#if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_DEBUG_ATOMIC_SLEEP)
|
||||
#if defined(CONFIG_MMU) && \
|
||||
(defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_DEBUG_ATOMIC_SLEEP))
|
||||
void might_fault(void);
|
||||
#else
|
||||
static inline void might_fault(void) { }
|
||||
|
||||
@@ -198,6 +198,9 @@ extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
|
||||
extern size_t vmcoreinfo_size;
|
||||
extern size_t vmcoreinfo_max_size;
|
||||
|
||||
/* flag to track if kexec reboot is in progress */
|
||||
extern bool kexec_in_progress;
|
||||
|
||||
int __init parse_crashkernel(char *cmdline, unsigned long long system_ram,
|
||||
unsigned long long *crash_size, unsigned long long *crash_base);
|
||||
int parse_crashkernel_high(char *cmdline, unsigned long long system_ram,
|
||||
|
||||
@@ -45,6 +45,7 @@ struct key_preparsed_payload {
|
||||
const void *data; /* Raw data */
|
||||
size_t datalen; /* Raw datalen */
|
||||
size_t quotalen; /* Quota length for proposed payload */
|
||||
bool trusted; /* True if key is trusted */
|
||||
};
|
||||
|
||||
typedef int (*request_key_actor_t)(struct key_construction *key,
|
||||
@@ -63,6 +64,11 @@ struct key_type {
|
||||
*/
|
||||
size_t def_datalen;
|
||||
|
||||
/* Default key search algorithm. */
|
||||
unsigned def_lookup_type;
|
||||
#define KEYRING_SEARCH_LOOKUP_DIRECT 0x0000 /* Direct lookup by description. */
|
||||
#define KEYRING_SEARCH_LOOKUP_ITERATE 0x0001 /* Iterative search. */
|
||||
|
||||
/* vet a description */
|
||||
int (*vet_description)(const char *description);
|
||||
|
||||
|
||||
+37
-15
@@ -22,6 +22,7 @@
|
||||
#include <linux/sysctl.h>
|
||||
#include <linux/rwsem.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/assoc_array.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/uidgid.h>
|
||||
@@ -82,6 +83,12 @@ struct key_owner;
|
||||
struct keyring_list;
|
||||
struct keyring_name;
|
||||
|
||||
struct keyring_index_key {
|
||||
struct key_type *type;
|
||||
const char *description;
|
||||
size_t desc_len;
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
* key reference with possession attribute handling
|
||||
@@ -99,7 +106,7 @@ struct keyring_name;
|
||||
typedef struct __key_reference_with_attributes *key_ref_t;
|
||||
|
||||
static inline key_ref_t make_key_ref(const struct key *key,
|
||||
unsigned long possession)
|
||||
bool possession)
|
||||
{
|
||||
return (key_ref_t) ((unsigned long) key | possession);
|
||||
}
|
||||
@@ -109,7 +116,7 @@ static inline struct key *key_ref_to_ptr(const key_ref_t key_ref)
|
||||
return (struct key *) ((unsigned long) key_ref & ~1UL);
|
||||
}
|
||||
|
||||
static inline unsigned long is_key_possessed(const key_ref_t key_ref)
|
||||
static inline bool is_key_possessed(const key_ref_t key_ref)
|
||||
{
|
||||
return (unsigned long) key_ref & 1UL;
|
||||
}
|
||||
@@ -129,7 +136,6 @@ struct key {
|
||||
struct list_head graveyard_link;
|
||||
struct rb_node serial_node;
|
||||
};
|
||||
struct key_type *type; /* type of key */
|
||||
struct rw_semaphore sem; /* change vs change sem */
|
||||
struct key_user *user; /* owner of this key */
|
||||
void *security; /* security data for this key */
|
||||
@@ -162,13 +168,21 @@ struct key {
|
||||
#define KEY_FLAG_NEGATIVE 5 /* set if key is negative */
|
||||
#define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */
|
||||
#define KEY_FLAG_INVALIDATED 7 /* set if key has been invalidated */
|
||||
#define KEY_FLAG_TRUSTED 8 /* set if key is trusted */
|
||||
#define KEY_FLAG_TRUSTED_ONLY 9 /* set if keyring only accepts links to trusted keys */
|
||||
|
||||
/* the description string
|
||||
* - this is used to match a key against search criteria
|
||||
* - this should be a printable string
|
||||
/* the key type and key description string
|
||||
* - the desc is used to match a key against search criteria
|
||||
* - it should be a printable string
|
||||
* - eg: for krb5 AFS, this might be "afs@REDHAT.COM"
|
||||
*/
|
||||
char *description;
|
||||
union {
|
||||
struct keyring_index_key index_key;
|
||||
struct {
|
||||
struct key_type *type; /* type of key */
|
||||
char *description;
|
||||
};
|
||||
};
|
||||
|
||||
/* type specific data
|
||||
* - this is used by the keyring type to index the name
|
||||
@@ -185,11 +199,14 @@ struct key {
|
||||
* whatever
|
||||
*/
|
||||
union {
|
||||
unsigned long value;
|
||||
void __rcu *rcudata;
|
||||
void *data;
|
||||
struct keyring_list __rcu *subscriptions;
|
||||
} payload;
|
||||
union {
|
||||
unsigned long value;
|
||||
void __rcu *rcudata;
|
||||
void *data;
|
||||
void *data2[2];
|
||||
} payload;
|
||||
struct assoc_array keys;
|
||||
};
|
||||
};
|
||||
|
||||
extern struct key *key_alloc(struct key_type *type,
|
||||
@@ -203,16 +220,21 @@ extern struct key *key_alloc(struct key_type *type,
|
||||
#define KEY_ALLOC_IN_QUOTA 0x0000 /* add to quota, reject if would overrun */
|
||||
#define KEY_ALLOC_QUOTA_OVERRUN 0x0001 /* add to quota, permit even if overrun */
|
||||
#define KEY_ALLOC_NOT_IN_QUOTA 0x0002 /* not in quota */
|
||||
#define KEY_ALLOC_TRUSTED 0x0004 /* Key should be flagged as trusted */
|
||||
|
||||
extern void key_revoke(struct key *key);
|
||||
extern void key_invalidate(struct key *key);
|
||||
extern void key_put(struct key *key);
|
||||
|
||||
static inline struct key *__key_get(struct key *key)
|
||||
{
|
||||
atomic_inc(&key->usage);
|
||||
return key;
|
||||
}
|
||||
|
||||
static inline struct key *key_get(struct key *key)
|
||||
{
|
||||
if (key)
|
||||
atomic_inc(&key->usage);
|
||||
return key;
|
||||
return key ? __key_get(key) : key;
|
||||
}
|
||||
|
||||
static inline void key_ref_put(key_ref_t key_ref)
|
||||
|
||||
@@ -39,7 +39,8 @@ enum sec_device_type {
|
||||
struct sec_pmic_dev {
|
||||
struct device *dev;
|
||||
struct sec_platform_data *pdata;
|
||||
struct regmap *regmap;
|
||||
struct regmap *regmap_pmic;
|
||||
struct regmap *regmap_rtc;
|
||||
struct i2c_client *i2c;
|
||||
struct i2c_client *rtc;
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#define PHY_ID_KSZ8021 0x00221555
|
||||
#define PHY_ID_KSZ8031 0x00221556
|
||||
#define PHY_ID_KSZ8041 0x00221510
|
||||
/* undocumented */
|
||||
#define PHY_ID_KSZ8041RNLI 0x00221537
|
||||
#define PHY_ID_KSZ8051 0x00221550
|
||||
/* same id: ks8001 Rev. A/B, and ks8721 Rev 3. */
|
||||
#define PHY_ID_KSZ8001 0x0022161A
|
||||
|
||||
@@ -1318,7 +1318,6 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a
|
||||
|
||||
#if USE_SPLIT_PTE_PTLOCKS
|
||||
#if BLOATED_SPINLOCKS
|
||||
void __init ptlock_cache_init(void);
|
||||
extern bool ptlock_alloc(struct page *page);
|
||||
extern void ptlock_free(struct page *page);
|
||||
|
||||
@@ -1327,7 +1326,6 @@ static inline spinlock_t *ptlock_ptr(struct page *page)
|
||||
return page->ptl;
|
||||
}
|
||||
#else /* BLOATED_SPINLOCKS */
|
||||
static inline void ptlock_cache_init(void) {}
|
||||
static inline bool ptlock_alloc(struct page *page)
|
||||
{
|
||||
return true;
|
||||
@@ -1380,17 +1378,10 @@ static inline spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd)
|
||||
{
|
||||
return &mm->page_table_lock;
|
||||
}
|
||||
static inline void ptlock_cache_init(void) {}
|
||||
static inline bool ptlock_init(struct page *page) { return true; }
|
||||
static inline void pte_lock_deinit(struct page *page) {}
|
||||
#endif /* USE_SPLIT_PTE_PTLOCKS */
|
||||
|
||||
static inline void pgtable_init(void)
|
||||
{
|
||||
ptlock_cache_init();
|
||||
pgtable_cache_init();
|
||||
}
|
||||
|
||||
static inline bool pgtable_page_ctor(struct page *page)
|
||||
{
|
||||
inc_zone_page_state(page, NR_PAGETABLE);
|
||||
|
||||
+19
-11
@@ -44,18 +44,22 @@ struct page {
|
||||
/* First double word block */
|
||||
unsigned long flags; /* Atomic flags, some possibly
|
||||
* updated asynchronously */
|
||||
struct address_space *mapping; /* If low bit clear, points to
|
||||
* inode address_space, or NULL.
|
||||
* If page mapped as anonymous
|
||||
* memory, low bit is set, and
|
||||
* it points to anon_vma object:
|
||||
* see PAGE_MAPPING_ANON below.
|
||||
*/
|
||||
union {
|
||||
struct address_space *mapping; /* If low bit clear, points to
|
||||
* inode address_space, or NULL.
|
||||
* If page mapped as anonymous
|
||||
* memory, low bit is set, and
|
||||
* it points to anon_vma object:
|
||||
* see PAGE_MAPPING_ANON below.
|
||||
*/
|
||||
void *s_mem; /* slab first object */
|
||||
};
|
||||
|
||||
/* Second double word */
|
||||
struct {
|
||||
union {
|
||||
pgoff_t index; /* Our offset within mapping. */
|
||||
void *freelist; /* slub/slob first free object */
|
||||
void *freelist; /* sl[aou]b first free object */
|
||||
bool pfmemalloc; /* If set by the page allocator,
|
||||
* ALLOC_NO_WATERMARKS was set
|
||||
* and the low watermark was not
|
||||
@@ -65,9 +69,6 @@ struct page {
|
||||
* this page is only used to
|
||||
* free other pages.
|
||||
*/
|
||||
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS
|
||||
pgtable_t pmd_huge_pte; /* protected by page->ptl */
|
||||
#endif
|
||||
};
|
||||
|
||||
union {
|
||||
@@ -114,6 +115,7 @@ struct page {
|
||||
};
|
||||
atomic_t _count; /* Usage count, see below. */
|
||||
};
|
||||
unsigned int active; /* SLAB */
|
||||
};
|
||||
};
|
||||
|
||||
@@ -135,6 +137,12 @@ struct page {
|
||||
|
||||
struct list_head list; /* slobs list of pages */
|
||||
struct slab *slab_page; /* slab fields */
|
||||
struct rcu_head rcu_head; /* Used by SLAB
|
||||
* when destroying via RCU
|
||||
*/
|
||||
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS
|
||||
pgtable_t pmd_huge_pte; /* protected by page->ptl */
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Remainder is not double word aligned */
|
||||
|
||||
+5
-5
@@ -26,11 +26,11 @@ struct msi_desc {
|
||||
struct {
|
||||
__u8 is_msix : 1;
|
||||
__u8 multiple: 3; /* log2 number of messages */
|
||||
__u8 maskbit : 1; /* mask-pending bit supported ? */
|
||||
__u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */
|
||||
__u8 pos; /* Location of the msi capability */
|
||||
__u16 entry_nr; /* specific enabled entry */
|
||||
unsigned default_irq; /* default pre-assigned irq */
|
||||
__u8 maskbit : 1; /* mask-pending bit supported ? */
|
||||
__u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */
|
||||
__u8 pos; /* Location of the msi capability */
|
||||
__u16 entry_nr; /* specific enabled entry */
|
||||
unsigned default_irq; /* default pre-assigned irq */
|
||||
} msi_attrib;
|
||||
|
||||
u32 masked; /* mask bits */
|
||||
|
||||
+9
-1
@@ -164,6 +164,14 @@ struct proto_ops {
|
||||
#endif
|
||||
int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *m, size_t total_len);
|
||||
/* Notes for implementing recvmsg:
|
||||
* ===============================
|
||||
* msg->msg_namelen should get updated by the recvmsg handlers
|
||||
* iff msg_name != NULL. It is by default 0 to prevent
|
||||
* returning uninitialized memory to user space. The recvfrom
|
||||
* handlers can assume that msg.msg_name is either NULL or has
|
||||
* a minimum size of sizeof(struct sockaddr_storage).
|
||||
*/
|
||||
int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *m, size_t total_len,
|
||||
int flags);
|
||||
@@ -173,7 +181,7 @@ struct proto_ops {
|
||||
int offset, size_t size, int flags);
|
||||
ssize_t (*splice_read)(struct socket *sock, loff_t *ppos,
|
||||
struct pipe_inode_info *pipe, size_t len, unsigned int flags);
|
||||
void (*set_peek_off)(struct sock *sk, int val);
|
||||
int (*set_peek_off)(struct sock *sk, int val);
|
||||
};
|
||||
|
||||
#define DECLARE_SOCKADDR(type, dst, src) \
|
||||
|
||||
@@ -1255,7 +1255,7 @@ struct net_device {
|
||||
unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
|
||||
unsigned char addr_assign_type; /* hw address assignment type */
|
||||
unsigned char addr_len; /* hardware address length */
|
||||
unsigned char neigh_priv_len;
|
||||
unsigned short neigh_priv_len;
|
||||
unsigned short dev_id; /* Used to differentiate devices
|
||||
* that share the same link
|
||||
* layer address
|
||||
|
||||
@@ -413,16 +413,6 @@ enum lock_type4 {
|
||||
#define NFS4_VERSION 4
|
||||
#define NFS4_MINOR_VERSION 0
|
||||
|
||||
#if defined(CONFIG_NFS_V4_2)
|
||||
#define NFS4_MAX_MINOR_VERSION 2
|
||||
#else
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
#define NFS4_MAX_MINOR_VERSION 1
|
||||
#else
|
||||
#define NFS4_MAX_MINOR_VERSION 0
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
#endif /* CONFIG_NFS_V4_2 */
|
||||
|
||||
#define NFS4_DEBUG 1
|
||||
|
||||
/* Index of predefined Linux client operations */
|
||||
|
||||
@@ -506,24 +506,6 @@ extern const struct inode_operations nfs_referral_inode_operations;
|
||||
extern int nfs_mountpoint_expiry_timeout;
|
||||
extern void nfs_release_automount_timer(void);
|
||||
|
||||
/*
|
||||
* linux/fs/nfs/nfs4proc.c
|
||||
*/
|
||||
#ifdef CONFIG_NFS_V4_SECURITY_LABEL
|
||||
extern struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags);
|
||||
static inline void nfs4_label_free(struct nfs4_label *label)
|
||||
{
|
||||
if (label) {
|
||||
kfree(label->label);
|
||||
kfree(label);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#else
|
||||
static inline struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags) { return NULL; }
|
||||
static inline void nfs4_label_free(void *label) {}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* linux/fs/nfs/unlink.c
|
||||
*/
|
||||
|
||||
@@ -129,10 +129,9 @@ struct parallel_data {
|
||||
struct padata_serial_queue __percpu *squeue;
|
||||
atomic_t reorder_objects;
|
||||
atomic_t refcnt;
|
||||
atomic_t seq_nr;
|
||||
struct padata_cpumask cpumask;
|
||||
spinlock_t lock ____cacheline_aligned;
|
||||
spinlock_t seq_lock;
|
||||
unsigned int seq_nr;
|
||||
unsigned int processed;
|
||||
struct timer_list timer;
|
||||
};
|
||||
|
||||
@@ -27,7 +27,7 @@ static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
|
||||
while (!pci_is_root_bus(pbus))
|
||||
pbus = pbus->parent;
|
||||
|
||||
return DEVICE_ACPI_HANDLE(pbus->bridge);
|
||||
return ACPI_HANDLE(pbus->bridge);
|
||||
}
|
||||
|
||||
static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus)
|
||||
@@ -39,7 +39,7 @@ static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus)
|
||||
else
|
||||
dev = &pbus->self->dev;
|
||||
|
||||
return DEVICE_ACPI_HANDLE(dev);
|
||||
return ACPI_HANDLE(dev);
|
||||
}
|
||||
|
||||
void acpi_pci_add_bus(struct pci_bus *bus);
|
||||
|
||||
+43
-43
@@ -32,7 +32,6 @@
|
||||
#include <linux/irqreturn.h>
|
||||
#include <uapi/linux/pci.h>
|
||||
|
||||
/* Include the ID list */
|
||||
#include <linux/pci_ids.h>
|
||||
|
||||
/*
|
||||
@@ -42,9 +41,10 @@
|
||||
*
|
||||
* 7:3 = slot
|
||||
* 2:0 = function
|
||||
* PCI_DEVFN(), PCI_SLOT(), and PCI_FUNC() are defined uapi/linux/pci.h
|
||||
*
|
||||
* PCI_DEVFN(), PCI_SLOT(), and PCI_FUNC() are defined in uapi/linux/pci.h.
|
||||
* In the interest of not exposing interfaces to user-space unnecessarily,
|
||||
* the following kernel only defines are being added here.
|
||||
* the following kernel-only defines are being added here.
|
||||
*/
|
||||
#define PCI_DEVID(bus, devfn) ((((u16)bus) << 8) | devfn)
|
||||
/* return bus from PCI devid = ((u16)bus_number) << 8) | devfn */
|
||||
@@ -153,10 +153,10 @@ enum pcie_reset_state {
|
||||
/* Reset is NOT asserted (Use to deassert reset) */
|
||||
pcie_deassert_reset = (__force pcie_reset_state_t) 1,
|
||||
|
||||
/* Use #PERST to reset PCI-E device */
|
||||
/* Use #PERST to reset PCIe device */
|
||||
pcie_warm_reset = (__force pcie_reset_state_t) 2,
|
||||
|
||||
/* Use PCI-E Hot Reset to reset device */
|
||||
/* Use PCIe Hot Reset to reset device */
|
||||
pcie_hot_reset = (__force pcie_reset_state_t) 3
|
||||
};
|
||||
|
||||
@@ -259,13 +259,13 @@ struct pci_dev {
|
||||
unsigned int class; /* 3 bytes: (base,sub,prog-if) */
|
||||
u8 revision; /* PCI revision, low byte of class word */
|
||||
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
|
||||
u8 pcie_cap; /* PCI-E capability offset */
|
||||
u8 pcie_cap; /* PCIe capability offset */
|
||||
u8 msi_cap; /* MSI capability offset */
|
||||
u8 msix_cap; /* MSI-X capability offset */
|
||||
u8 pcie_mpss:3; /* PCI-E Max Payload Size Supported */
|
||||
u8 pcie_mpss:3; /* PCIe Max Payload Size Supported */
|
||||
u8 rom_base_reg; /* which config register controls the ROM */
|
||||
u8 pin; /* which interrupt pin this device uses */
|
||||
u16 pcie_flags_reg; /* cached PCI-E Capabilities Register */
|
||||
u8 pin; /* which interrupt pin this device uses */
|
||||
u16 pcie_flags_reg; /* cached PCIe Capabilities Register */
|
||||
|
||||
struct pci_driver *driver; /* which driver has allocated this device */
|
||||
u64 dma_mask; /* Mask of the bits of bus address this
|
||||
@@ -300,7 +300,7 @@ struct pci_dev {
|
||||
unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */
|
||||
|
||||
#ifdef CONFIG_PCIEASPM
|
||||
struct pcie_link_state *link_state; /* ASPM link state. */
|
||||
struct pcie_link_state *link_state; /* ASPM link state */
|
||||
#endif
|
||||
|
||||
pci_channel_state_t error_state; /* current connectivity state */
|
||||
@@ -317,7 +317,7 @@ struct pci_dev {
|
||||
|
||||
bool match_driver; /* Skip attaching driver */
|
||||
/* These fields are used by common fixups */
|
||||
unsigned int transparent:1; /* Transparent PCI bridge */
|
||||
unsigned int transparent:1; /* Subtractive decode PCI bridge */
|
||||
unsigned int multifunction:1;/* Part of multi-function device */
|
||||
/* keep track of device state */
|
||||
unsigned int is_added:1;
|
||||
@@ -326,7 +326,7 @@ struct pci_dev {
|
||||
unsigned int block_cfg_access:1; /* config space access is blocked */
|
||||
unsigned int broken_parity_status:1; /* Device generates false positive parity */
|
||||
unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */
|
||||
unsigned int msi_enabled:1;
|
||||
unsigned int msi_enabled:1;
|
||||
unsigned int msix_enabled:1;
|
||||
unsigned int ari_enabled:1; /* ARI forwarding */
|
||||
unsigned int is_managed:1;
|
||||
@@ -371,7 +371,6 @@ static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
|
||||
if (dev->is_virtfn)
|
||||
dev = dev->physfn;
|
||||
#endif
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
@@ -456,7 +455,7 @@ struct pci_bus {
|
||||
char name[48];
|
||||
|
||||
unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */
|
||||
pci_bus_flags_t bus_flags; /* Inherited by child busses */
|
||||
pci_bus_flags_t bus_flags; /* inherited by child buses */
|
||||
struct device *bridge;
|
||||
struct device dev;
|
||||
struct bin_attribute *legacy_io; /* legacy I/O for this bus */
|
||||
@@ -468,7 +467,7 @@ struct pci_bus {
|
||||
#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
|
||||
|
||||
/*
|
||||
* Returns true if the pci bus is root (behind host-pci bridge),
|
||||
* Returns true if the PCI bus is root (behind host-PCI bridge),
|
||||
* false otherwise
|
||||
*
|
||||
* Some code assumes that "bus->self == NULL" means that bus is a root bus.
|
||||
@@ -510,7 +509,7 @@ static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false;
|
||||
#define PCIBIOS_BUFFER_TOO_SMALL 0x89
|
||||
|
||||
/*
|
||||
* Translate above to generic errno for passing back through non-pci.
|
||||
* Translate above to generic errno for passing back through non-PCI code.
|
||||
*/
|
||||
static inline int pcibios_err_to_errno(int err)
|
||||
{
|
||||
@@ -561,11 +560,12 @@ struct pci_dynids {
|
||||
struct list_head list; /* for IDs added at runtime */
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/** PCI Error Recovery System (PCI-ERS). If a PCI device driver provides
|
||||
* a set of callbacks in struct pci_error_handlers, then that device driver
|
||||
* will be notified of PCI bus errors, and will be driven to recovery
|
||||
* when an error occurs.
|
||||
|
||||
/*
|
||||
* PCI Error Recovery System (PCI-ERS). If a PCI device driver provides
|
||||
* a set of callbacks in struct pci_error_handlers, that device driver
|
||||
* will be notified of PCI bus errors, and will be driven to recovery
|
||||
* when an error occurs.
|
||||
*/
|
||||
|
||||
typedef unsigned int __bitwise pci_ers_result_t;
|
||||
@@ -609,7 +609,6 @@ struct pci_error_handlers {
|
||||
void (*resume)(struct pci_dev *dev);
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
struct module;
|
||||
struct pci_driver {
|
||||
@@ -713,10 +712,10 @@ extern enum pcie_bus_config_types pcie_bus_config;
|
||||
|
||||
extern struct bus_type pci_bus_type;
|
||||
|
||||
/* Do NOT directly access these two variables, unless you are arch specific pci
|
||||
* code, or pci core code. */
|
||||
/* Do NOT directly access these two variables, unless you are arch-specific PCI
|
||||
* code, or PCI core code. */
|
||||
extern struct list_head pci_root_buses; /* list of all known PCI buses */
|
||||
/* Some device drivers need know if pci is initiated */
|
||||
/* Some device drivers need know if PCI is initiated */
|
||||
int no_pci_devices(void);
|
||||
|
||||
void pcibios_resource_survey_bus(struct pci_bus *bus);
|
||||
@@ -724,7 +723,7 @@ void pcibios_add_bus(struct pci_bus *bus);
|
||||
void pcibios_remove_bus(struct pci_bus *bus);
|
||||
void pcibios_fixup_bus(struct pci_bus *);
|
||||
int __must_check pcibios_enable_device(struct pci_dev *, int mask);
|
||||
/* Architecture specific versions may override this (weak) */
|
||||
/* Architecture-specific versions may override this (weak) */
|
||||
char *pcibios_setup(char *str);
|
||||
|
||||
/* Used only when drivers/pci/setup.c is used */
|
||||
@@ -961,6 +960,7 @@ void pci_update_resource(struct pci_dev *dev, int resno);
|
||||
int __must_check pci_assign_resource(struct pci_dev *dev, int i);
|
||||
int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align);
|
||||
int pci_select_bars(struct pci_dev *dev, unsigned long flags);
|
||||
bool pci_device_is_present(struct pci_dev *pdev);
|
||||
|
||||
/* ROM control related routines */
|
||||
int pci_enable_rom(struct pci_dev *pdev);
|
||||
@@ -1258,7 +1258,7 @@ void pci_cfg_access_unlock(struct pci_dev *dev);
|
||||
|
||||
/*
|
||||
* PCI domain support. Sometimes called PCI segment (eg by ACPI),
|
||||
* a PCI domain is defined to be a set of PCI busses which share
|
||||
* a PCI domain is defined to be a set of PCI buses which share
|
||||
* configuration space.
|
||||
*/
|
||||
#ifdef CONFIG_PCI_DOMAINS
|
||||
@@ -1568,65 +1568,65 @@ enum pci_fixup_pass {
|
||||
/* Anonymous variables would be nice... */
|
||||
#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
static const struct pci_fixup __pci_fixup_##name __used \
|
||||
static const struct pci_fixup __PASTE(__pci_fixup_##name,__LINE__) __used \
|
||||
__attribute__((__section__(#section), aligned((sizeof(void *))))) \
|
||||
= { vendor, device, class, class_shift, hook };
|
||||
|
||||
#define DECLARE_PCI_FIXUP_CLASS_EARLY(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
|
||||
vendor##device##hook, vendor, device, class, class_shift, hook)
|
||||
hook, vendor, device, class, class_shift, hook)
|
||||
#define DECLARE_PCI_FIXUP_CLASS_HEADER(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
|
||||
vendor##device##hook, vendor, device, class, class_shift, hook)
|
||||
hook, vendor, device, class, class_shift, hook)
|
||||
#define DECLARE_PCI_FIXUP_CLASS_FINAL(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
|
||||
vendor##device##hook, vendor, device, class, class_shift, hook)
|
||||
hook, vendor, device, class, class_shift, hook)
|
||||
#define DECLARE_PCI_FIXUP_CLASS_ENABLE(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
|
||||
vendor##device##hook, vendor, device, class, class_shift, hook)
|
||||
hook, vendor, device, class, class_shift, hook)
|
||||
#define DECLARE_PCI_FIXUP_CLASS_RESUME(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
|
||||
resume##vendor##device##hook, vendor, device, class, \
|
||||
resume##hook, vendor, device, class, \
|
||||
class_shift, hook)
|
||||
#define DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
|
||||
resume_early##vendor##device##hook, vendor, device, \
|
||||
resume_early##hook, vendor, device, \
|
||||
class, class_shift, hook)
|
||||
#define DECLARE_PCI_FIXUP_CLASS_SUSPEND(vendor, device, class, \
|
||||
class_shift, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
|
||||
suspend##vendor##device##hook, vendor, device, class, \
|
||||
suspend##hook, vendor, device, class, \
|
||||
class_shift, hook)
|
||||
|
||||
#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
|
||||
vendor##device##hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
#define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
|
||||
vendor##device##hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
#define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
|
||||
vendor##device##hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
#define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
|
||||
vendor##device##hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
hook, vendor, device, PCI_ANY_ID, 0, hook)
|
||||
#define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
|
||||
resume##vendor##device##hook, vendor, device, \
|
||||
resume##hook, vendor, device, \
|
||||
PCI_ANY_ID, 0, hook)
|
||||
#define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
|
||||
resume_early##vendor##device##hook, vendor, device, \
|
||||
resume_early##hook, vendor, device, \
|
||||
PCI_ANY_ID, 0, hook)
|
||||
#define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \
|
||||
DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
|
||||
suspend##vendor##device##hook, vendor, device, \
|
||||
suspend##hook, vendor, device, \
|
||||
PCI_ANY_ID, 0, hook)
|
||||
|
||||
#ifdef CONFIG_PCI_QUIRKS
|
||||
@@ -1672,7 +1672,7 @@ extern u8 pci_cache_line_size;
|
||||
extern unsigned long pci_hotplug_io_size;
|
||||
extern unsigned long pci_hotplug_mem_size;
|
||||
|
||||
/* Architecture specific versions may override these (weak) */
|
||||
/* Architecture-specific versions may override these (weak) */
|
||||
int pcibios_add_platform_entries(struct pci_dev *dev);
|
||||
void pcibios_disable_device(struct pci_dev *dev);
|
||||
void pcibios_set_master(struct pci_dev *dev);
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
* @hardware_test: Called to run a specified hardware test on the specified
|
||||
* slot.
|
||||
* @get_power_status: Called to get the current power status of a slot.
|
||||
* If this field is NULL, the value passed in the struct hotplug_slot_info
|
||||
* will be used when this value is requested by a user.
|
||||
* If this field is NULL, the value passed in the struct hotplug_slot_info
|
||||
* will be used when this value is requested by a user.
|
||||
* @get_attention_status: Called to get the current attention status of a slot.
|
||||
* If this field is NULL, the value passed in the struct hotplug_slot_info
|
||||
* will be used when this value is requested by a user.
|
||||
@@ -191,4 +191,3 @@ static inline int pci_get_hp_params(struct pci_dev *dev,
|
||||
|
||||
void pci_configure_slot(struct pci_dev *dev);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#define PCIE_PORT_SERVICE_VC (1 << PCIE_PORT_SERVICE_VC_SHIFT)
|
||||
|
||||
struct pcie_device {
|
||||
int irq; /* Service IRQ/MSI/MSI-X Vector */
|
||||
int irq; /* Service IRQ/MSI/MSI-X Vector */
|
||||
struct pci_dev *port; /* Root/Upstream/Downstream Port */
|
||||
u32 service; /* Port service this device represents */
|
||||
void *priv_data; /* Service Private Data */
|
||||
|
||||
@@ -559,6 +559,7 @@ static inline int phy_read_status(struct phy_device *phydev) {
|
||||
return phydev->drv->read_status(phydev);
|
||||
}
|
||||
|
||||
int genphy_setup_forced(struct phy_device *phydev);
|
||||
int genphy_restart_aneg(struct phy_device *phydev);
|
||||
int genphy_config_aneg(struct phy_device *phydev);
|
||||
int genphy_update_link(struct phy_device *phydev);
|
||||
|
||||
@@ -67,10 +67,10 @@ struct edmacc_param {
|
||||
#define ITCCHEN BIT(23)
|
||||
|
||||
/*ch_status paramater of callback function possible values*/
|
||||
#define DMA_COMPLETE 1
|
||||
#define DMA_CC_ERROR 2
|
||||
#define DMA_TC1_ERROR 3
|
||||
#define DMA_TC2_ERROR 4
|
||||
#define EDMA_DMA_COMPLETE 1
|
||||
#define EDMA_DMA_CC_ERROR 2
|
||||
#define EDMA_DMA_TC1_ERROR 3
|
||||
#define EDMA_DMA_TC2_ERROR 4
|
||||
|
||||
enum address_mode {
|
||||
INCR = 0,
|
||||
|
||||
@@ -11,36 +11,23 @@
|
||||
* - bits 0-7 are the preemption count (max preemption depth: 256)
|
||||
* - bits 8-15 are the softirq count (max # of softirqs: 256)
|
||||
*
|
||||
* The hardirq count can in theory reach the same as NR_IRQS.
|
||||
* In reality, the number of nested IRQS is limited to the stack
|
||||
* size as well. For archs with over 1000 IRQS it is not practical
|
||||
* to expect that they will all nest. We give a max of 10 bits for
|
||||
* hardirq nesting. An arch may choose to give less than 10 bits.
|
||||
* m68k expects it to be 8.
|
||||
* The hardirq count could in theory be the same as the number of
|
||||
* interrupts in the system, but we run all interrupt handlers with
|
||||
* interrupts disabled, so we cannot have nesting interrupts. Though
|
||||
* there are a few palaeontologic drivers which reenable interrupts in
|
||||
* the handler, so we need more than one bit here.
|
||||
*
|
||||
* - bits 16-25 are the hardirq count (max # of nested hardirqs: 1024)
|
||||
* - bit 26 is the NMI_MASK
|
||||
* - bit 27 is the PREEMPT_ACTIVE flag
|
||||
*
|
||||
* PREEMPT_MASK: 0x000000ff
|
||||
* SOFTIRQ_MASK: 0x0000ff00
|
||||
* HARDIRQ_MASK: 0x03ff0000
|
||||
* NMI_MASK: 0x04000000
|
||||
* PREEMPT_MASK: 0x000000ff
|
||||
* SOFTIRQ_MASK: 0x0000ff00
|
||||
* HARDIRQ_MASK: 0x000f0000
|
||||
* NMI_MASK: 0x00100000
|
||||
* PREEMPT_ACTIVE: 0x00200000
|
||||
*/
|
||||
#define PREEMPT_BITS 8
|
||||
#define SOFTIRQ_BITS 8
|
||||
#define HARDIRQ_BITS 4
|
||||
#define NMI_BITS 1
|
||||
|
||||
#define MAX_HARDIRQ_BITS 10
|
||||
|
||||
#ifndef HARDIRQ_BITS
|
||||
# define HARDIRQ_BITS MAX_HARDIRQ_BITS
|
||||
#endif
|
||||
|
||||
#if HARDIRQ_BITS > MAX_HARDIRQ_BITS
|
||||
#error HARDIRQ_BITS too high!
|
||||
#endif
|
||||
|
||||
#define PREEMPT_SHIFT 0
|
||||
#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
|
||||
#define HARDIRQ_SHIFT (SOFTIRQ_SHIFT + SOFTIRQ_BITS)
|
||||
@@ -60,15 +47,9 @@
|
||||
|
||||
#define SOFTIRQ_DISABLE_OFFSET (2 * SOFTIRQ_OFFSET)
|
||||
|
||||
#ifndef PREEMPT_ACTIVE
|
||||
#define PREEMPT_ACTIVE_BITS 1
|
||||
#define PREEMPT_ACTIVE_SHIFT (NMI_SHIFT + NMI_BITS)
|
||||
#define PREEMPT_ACTIVE (__IRQ_MASK(PREEMPT_ACTIVE_BITS) << PREEMPT_ACTIVE_SHIFT)
|
||||
#endif
|
||||
|
||||
#if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS))
|
||||
#error PREEMPT_ACTIVE is too low!
|
||||
#endif
|
||||
|
||||
#define hardirq_count() (preempt_count() & HARDIRQ_MASK)
|
||||
#define softirq_count() (preempt_count() & SOFTIRQ_MASK)
|
||||
|
||||
@@ -22,7 +22,7 @@ struct sched_param {
|
||||
#include <linux/errno.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/preempt.h>
|
||||
#include <linux/preempt_mask.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/ptrace.h>
|
||||
@@ -831,8 +831,6 @@ struct sched_domain {
|
||||
unsigned int balance_interval; /* initialise to 1. units in ms. */
|
||||
unsigned int nr_balance_failed; /* initialise to 0 */
|
||||
|
||||
u64 last_update;
|
||||
|
||||
/* idle_balance() stats */
|
||||
u64 max_newidle_lb_cost;
|
||||
unsigned long next_decay_max_lb_cost;
|
||||
|
||||
@@ -1052,17 +1052,25 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @xfrm_policy_delete_security:
|
||||
* @ctx contains the xfrm_sec_ctx.
|
||||
* Authorize deletion of xp->security.
|
||||
* @xfrm_state_alloc_security:
|
||||
* @xfrm_state_alloc:
|
||||
* @x contains the xfrm_state being added to the Security Association
|
||||
* Database by the XFRM system.
|
||||
* @sec_ctx contains the security context information being provided by
|
||||
* the user-level SA generation program (e.g., setkey or racoon).
|
||||
* @secid contains the secid from which to take the mls portion of the context.
|
||||
* Allocate a security structure to the x->security field; the security
|
||||
* field is initialized to NULL when the xfrm_state is allocated. Set the
|
||||
* context to correspond to either sec_ctx or polsec, with the mls portion
|
||||
* taken from secid in the latter case.
|
||||
* Return 0 if operation was successful (memory to allocate, legal context).
|
||||
* context to correspond to sec_ctx. Return 0 if operation was successful
|
||||
* (memory to allocate, legal context).
|
||||
* @xfrm_state_alloc_acquire:
|
||||
* @x contains the xfrm_state being added to the Security Association
|
||||
* Database by the XFRM system.
|
||||
* @polsec contains the policy's security context.
|
||||
* @secid contains the secid from which to take the mls portion of the
|
||||
* context.
|
||||
* Allocate a security structure to the x->security field; the security
|
||||
* field is initialized to NULL when the xfrm_state is allocated. Set the
|
||||
* context to correspond to secid. Return 0 if operation was successful
|
||||
* (memory to allocate, legal context).
|
||||
* @xfrm_state_free_security:
|
||||
* @x contains the xfrm_state.
|
||||
* Deallocate x->security.
|
||||
@@ -1679,9 +1687,11 @@ struct security_operations {
|
||||
int (*xfrm_policy_clone_security) (struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctx);
|
||||
void (*xfrm_policy_free_security) (struct xfrm_sec_ctx *ctx);
|
||||
int (*xfrm_policy_delete_security) (struct xfrm_sec_ctx *ctx);
|
||||
int (*xfrm_state_alloc_security) (struct xfrm_state *x,
|
||||
struct xfrm_user_sec_ctx *sec_ctx,
|
||||
u32 secid);
|
||||
int (*xfrm_state_alloc) (struct xfrm_state *x,
|
||||
struct xfrm_user_sec_ctx *sec_ctx);
|
||||
int (*xfrm_state_alloc_acquire) (struct xfrm_state *x,
|
||||
struct xfrm_sec_ctx *polsec,
|
||||
u32 secid);
|
||||
void (*xfrm_state_free_security) (struct xfrm_state *x);
|
||||
int (*xfrm_state_delete_security) (struct xfrm_state *x);
|
||||
int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
|
||||
|
||||
@@ -354,6 +354,35 @@ static inline void read_sequnlock_excl(seqlock_t *sl)
|
||||
spin_unlock(&sl->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* read_seqbegin_or_lock - begin a sequence number check or locking block
|
||||
* @lock: sequence lock
|
||||
* @seq : sequence number to be checked
|
||||
*
|
||||
* First try it once optimistically without taking the lock. If that fails,
|
||||
* take the lock. The sequence number is also used as a marker for deciding
|
||||
* whether to be a reader (even) or writer (odd).
|
||||
* N.B. seq must be initialized to an even number to begin with.
|
||||
*/
|
||||
static inline void read_seqbegin_or_lock(seqlock_t *lock, int *seq)
|
||||
{
|
||||
if (!(*seq & 1)) /* Even */
|
||||
*seq = read_seqbegin(lock);
|
||||
else /* Odd */
|
||||
read_seqlock_excl(lock);
|
||||
}
|
||||
|
||||
static inline int need_seqretry(seqlock_t *lock, int seq)
|
||||
{
|
||||
return !(seq & 1) && read_seqretry(lock, seq);
|
||||
}
|
||||
|
||||
static inline void done_seqretry(seqlock_t *lock, int seq)
|
||||
{
|
||||
if (seq & 1)
|
||||
read_sequnlock_excl(lock);
|
||||
}
|
||||
|
||||
static inline void read_seqlock_excl_bh(seqlock_t *sl)
|
||||
{
|
||||
spin_lock_bh(&sl->lock);
|
||||
|
||||
@@ -47,6 +47,8 @@ extern int shmem_init(void);
|
||||
extern int shmem_fill_super(struct super_block *sb, void *data, int silent);
|
||||
extern struct file *shmem_file_setup(const char *name,
|
||||
loff_t size, unsigned long flags);
|
||||
extern struct file *shmem_kernel_file_setup(const char *name, loff_t size,
|
||||
unsigned long flags);
|
||||
extern int shmem_zero_setup(struct vm_area_struct *);
|
||||
extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
|
||||
extern void shmem_unlock_mapping(struct address_space *mapping);
|
||||
|
||||
+54
-57
@@ -53,7 +53,14 @@
|
||||
* }
|
||||
* rcu_read_unlock();
|
||||
*
|
||||
* See also the comment on struct slab_rcu in mm/slab.c.
|
||||
* This is useful if we need to approach a kernel structure obliquely,
|
||||
* from its address obtained without the usual locking. We can lock
|
||||
* the structure to stabilize it and check it's still at the given address,
|
||||
* only if we can be sure that the memory has not been meanwhile reused
|
||||
* for some other kind of object (which our subsystem's lock might corrupt).
|
||||
*
|
||||
* rcu_read_lock before reading the address, then rcu_read_unlock after
|
||||
* taking the spinlock within the structure expected at that address.
|
||||
*/
|
||||
#define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */
|
||||
#define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */
|
||||
@@ -381,10 +388,55 @@ static __always_inline void *kmalloc_large(size_t size, gfp_t flags)
|
||||
/**
|
||||
* kmalloc - allocate memory
|
||||
* @size: how many bytes of memory are required.
|
||||
* @flags: the type of memory to allocate (see kcalloc).
|
||||
* @flags: the type of memory to allocate.
|
||||
*
|
||||
* kmalloc is the normal method of allocating memory
|
||||
* for objects smaller than page size in the kernel.
|
||||
*
|
||||
* The @flags argument may be one of:
|
||||
*
|
||||
* %GFP_USER - Allocate memory on behalf of user. May sleep.
|
||||
*
|
||||
* %GFP_KERNEL - Allocate normal kernel ram. May sleep.
|
||||
*
|
||||
* %GFP_ATOMIC - Allocation will not sleep. May use emergency pools.
|
||||
* For example, use this inside interrupt handlers.
|
||||
*
|
||||
* %GFP_HIGHUSER - Allocate pages from high memory.
|
||||
*
|
||||
* %GFP_NOIO - Do not do any I/O at all while trying to get memory.
|
||||
*
|
||||
* %GFP_NOFS - Do not make any fs calls while trying to get memory.
|
||||
*
|
||||
* %GFP_NOWAIT - Allocation will not sleep.
|
||||
*
|
||||
* %GFP_THISNODE - Allocate node-local memory only.
|
||||
*
|
||||
* %GFP_DMA - Allocation suitable for DMA.
|
||||
* Should only be used for kmalloc() caches. Otherwise, use a
|
||||
* slab created with SLAB_DMA.
|
||||
*
|
||||
* Also it is possible to set different flags by OR'ing
|
||||
* in one or more of the following additional @flags:
|
||||
*
|
||||
* %__GFP_COLD - Request cache-cold pages instead of
|
||||
* trying to return cache-warm pages.
|
||||
*
|
||||
* %__GFP_HIGH - This allocation has high priority and may use emergency pools.
|
||||
*
|
||||
* %__GFP_NOFAIL - Indicate that this allocation is in no way allowed to fail
|
||||
* (think twice before using).
|
||||
*
|
||||
* %__GFP_NORETRY - If memory is not immediately available,
|
||||
* then give up at once.
|
||||
*
|
||||
* %__GFP_NOWARN - If allocation fails, don't issue any warnings.
|
||||
*
|
||||
* %__GFP_REPEAT - If allocation fails initially, try once more before failing.
|
||||
*
|
||||
* There are other flags available as well, but these are not intended
|
||||
* for general use, and so are not documented here. For a full list of
|
||||
* potential flags, always refer to linux/gfp.h.
|
||||
*/
|
||||
static __always_inline void *kmalloc(size_t size, gfp_t flags)
|
||||
{
|
||||
@@ -494,61 +546,6 @@ struct seq_file;
|
||||
int cache_show(struct kmem_cache *s, struct seq_file *m);
|
||||
void print_slabinfo_header(struct seq_file *m);
|
||||
|
||||
/**
|
||||
* kmalloc - allocate memory
|
||||
* @size: how many bytes of memory are required.
|
||||
* @flags: the type of memory to allocate.
|
||||
*
|
||||
* The @flags argument may be one of:
|
||||
*
|
||||
* %GFP_USER - Allocate memory on behalf of user. May sleep.
|
||||
*
|
||||
* %GFP_KERNEL - Allocate normal kernel ram. May sleep.
|
||||
*
|
||||
* %GFP_ATOMIC - Allocation will not sleep. May use emergency pools.
|
||||
* For example, use this inside interrupt handlers.
|
||||
*
|
||||
* %GFP_HIGHUSER - Allocate pages from high memory.
|
||||
*
|
||||
* %GFP_NOIO - Do not do any I/O at all while trying to get memory.
|
||||
*
|
||||
* %GFP_NOFS - Do not make any fs calls while trying to get memory.
|
||||
*
|
||||
* %GFP_NOWAIT - Allocation will not sleep.
|
||||
*
|
||||
* %GFP_THISNODE - Allocate node-local memory only.
|
||||
*
|
||||
* %GFP_DMA - Allocation suitable for DMA.
|
||||
* Should only be used for kmalloc() caches. Otherwise, use a
|
||||
* slab created with SLAB_DMA.
|
||||
*
|
||||
* Also it is possible to set different flags by OR'ing
|
||||
* in one or more of the following additional @flags:
|
||||
*
|
||||
* %__GFP_COLD - Request cache-cold pages instead of
|
||||
* trying to return cache-warm pages.
|
||||
*
|
||||
* %__GFP_HIGH - This allocation has high priority and may use emergency pools.
|
||||
*
|
||||
* %__GFP_NOFAIL - Indicate that this allocation is in no way allowed to fail
|
||||
* (think twice before using).
|
||||
*
|
||||
* %__GFP_NORETRY - If memory is not immediately available,
|
||||
* then give up at once.
|
||||
*
|
||||
* %__GFP_NOWARN - If allocation fails, don't issue any warnings.
|
||||
*
|
||||
* %__GFP_REPEAT - If allocation fails initially, try once more before failing.
|
||||
*
|
||||
* There are other flags available as well, but these are not intended
|
||||
* for general use, and so are not documented here. For a full list of
|
||||
* potential flags, always refer to linux/gfp.h.
|
||||
*
|
||||
* kmalloc is the normal method of allocating memory
|
||||
* in the kernel.
|
||||
*/
|
||||
static __always_inline void *kmalloc(size_t size, gfp_t flags);
|
||||
|
||||
/**
|
||||
* kmalloc_array - allocate memory for an array.
|
||||
* @n: number of elements.
|
||||
|
||||
@@ -27,8 +27,8 @@ struct kmem_cache {
|
||||
|
||||
size_t colour; /* cache colouring range */
|
||||
unsigned int colour_off; /* colour offset */
|
||||
struct kmem_cache *slabp_cache;
|
||||
unsigned int slab_size;
|
||||
struct kmem_cache *freelist_cache;
|
||||
unsigned int freelist_size;
|
||||
|
||||
/* constructor func */
|
||||
void (*ctor)(void *obj);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
enum stat_item {
|
||||
ALLOC_FASTPATH, /* Allocation from cpu slab */
|
||||
ALLOC_SLOWPATH, /* Allocation by getting a new cpu slab */
|
||||
FREE_FASTPATH, /* Free to cpu slub */
|
||||
FREE_FASTPATH, /* Free to cpu slab */
|
||||
FREE_SLOWPATH, /* Freeing not to cpu slab */
|
||||
FREE_FROZEN, /* Freeing to frozen slab */
|
||||
FREE_ADD_PARTIAL, /* Freeing moves slab to partial list */
|
||||
|
||||
@@ -45,6 +45,7 @@ struct clk;
|
||||
|
||||
#define TEGRA_POWERGATE_3D0 TEGRA_POWERGATE_3D
|
||||
|
||||
#ifdef CONFIG_ARCH_TEGRA
|
||||
int tegra_powergate_is_powered(int id);
|
||||
int tegra_powergate_power_on(int id);
|
||||
int tegra_powergate_power_off(int id);
|
||||
@@ -52,5 +53,31 @@ int tegra_powergate_remove_clamping(int id);
|
||||
|
||||
/* Must be called with clk disabled, and returns with clk enabled */
|
||||
int tegra_powergate_sequence_power_up(int id, struct clk *clk);
|
||||
#else
|
||||
static inline int tegra_powergate_is_powered(int id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_powergate_power_on(int id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_powergate_power_off(int id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_powergate_remove_clamping(int id)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int tegra_powergate_sequence_power_up(int id, struct clk *clk)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _MACH_TEGRA_POWERGATE_H_ */
|
||||
|
||||
@@ -1264,6 +1264,8 @@ typedef void (*usb_complete_t)(struct urb *);
|
||||
* @sg: scatter gather buffer list, the buffer size of each element in
|
||||
* the list (except the last) must be divisible by the endpoint's
|
||||
* max packet size if no_sg_constraint isn't set in 'struct usb_bus'
|
||||
* (FIXME: scatter-gather under xHCI is broken for periodic transfers.
|
||||
* Do not use urb->sg for interrupt endpoints for now, only bulk.)
|
||||
* @num_mapped_sgs: (internal) number of mapped sg entries
|
||||
* @num_sgs: number of entries in the sg list
|
||||
* @transfer_buffer_length: How big is transfer_buffer. The transfer may
|
||||
|
||||
@@ -271,6 +271,8 @@ static inline u8 wusb_key_index(int index, int type, int originator)
|
||||
#define WUSB_KEY_INDEX_TYPE_GTK 2
|
||||
#define WUSB_KEY_INDEX_ORIGINATOR_HOST 0
|
||||
#define WUSB_KEY_INDEX_ORIGINATOR_DEVICE 1
|
||||
/* bits 0-3 used for the key index. */
|
||||
#define WUSB_KEY_INDEX_MAX 15
|
||||
|
||||
/* A CCM Nonce, defined in WUSB1.0[6.4.1] */
|
||||
struct aes_ccm_nonce {
|
||||
|
||||
@@ -27,6 +27,12 @@ struct user_namespace {
|
||||
kuid_t owner;
|
||||
kgid_t group;
|
||||
unsigned int proc_inum;
|
||||
|
||||
/* Register of per-UID persistent keyrings for this namespace */
|
||||
#ifdef CONFIG_PERSISTENT_KEYRINGS
|
||||
struct key *persistent_keyring_register;
|
||||
struct rw_semaphore persistent_keyring_register_sem;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern struct user_namespace init_user_ns;
|
||||
|
||||
@@ -278,6 +278,31 @@ do { \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#define __wait_event_cmd(wq, condition, cmd1, cmd2) \
|
||||
(void)___wait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, 0, \
|
||||
cmd1; schedule(); cmd2)
|
||||
|
||||
/**
|
||||
* wait_event_cmd - sleep until a condition gets true
|
||||
* @wq: the waitqueue to wait on
|
||||
* @condition: a C expression for the event to wait for
|
||||
* cmd1: the command will be executed before sleep
|
||||
* cmd2: the command will be executed after sleep
|
||||
*
|
||||
* The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
|
||||
* @condition evaluates to true. The @condition is checked each time
|
||||
* the waitqueue @wq is woken up.
|
||||
*
|
||||
* wake_up() has to be called after changing any variable that could
|
||||
* change the result of the wait condition.
|
||||
*/
|
||||
#define wait_event_cmd(wq, condition, cmd1, cmd2) \
|
||||
do { \
|
||||
if (condition) \
|
||||
break; \
|
||||
__wait_event_cmd(wq, condition, cmd1, cmd2); \
|
||||
} while (0)
|
||||
|
||||
#define __wait_event_interruptible(wq, condition) \
|
||||
___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \
|
||||
schedule())
|
||||
|
||||
Reference in New Issue
Block a user