Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Conflicts: drivers/net/pcmcia/fmvj18x_cs.c drivers/net/pcmcia/nmclan_cs.c drivers/net/pcmcia/xirc2ps_cs.c drivers/net/wireless/ray_cs.c
This commit is contained in:
@@ -330,6 +330,7 @@ unifdef-y += scc.h
|
||||
unifdef-y += sched.h
|
||||
unifdef-y += screen_info.h
|
||||
unifdef-y += sdla.h
|
||||
unifdef-y += securebits.h
|
||||
unifdef-y += selinux_netlink.h
|
||||
unifdef-y += sem.h
|
||||
unifdef-y += serial_core.h
|
||||
|
@@ -53,6 +53,7 @@ extern void free_bootmem_node(pg_data_t *pgdat,
|
||||
unsigned long addr,
|
||||
unsigned long size);
|
||||
extern void free_bootmem(unsigned long addr, unsigned long size);
|
||||
extern void free_bootmem_late(unsigned long addr, unsigned long size);
|
||||
|
||||
/*
|
||||
* Flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE,
|
||||
|
@@ -92,9 +92,7 @@ struct vfs_cap_data {
|
||||
#define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3
|
||||
#define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3
|
||||
|
||||
#ifdef CONFIG_SECURITY_FILE_CAPABILITIES
|
||||
extern int file_caps_enabled;
|
||||
#endif
|
||||
|
||||
typedef struct kernel_cap_struct {
|
||||
__u32 cap[_KERNEL_CAPABILITY_U32S];
|
||||
|
@@ -79,6 +79,7 @@
|
||||
#define noinline __attribute__((noinline))
|
||||
#define __attribute_const__ __attribute__((__const__))
|
||||
#define __maybe_unused __attribute__((unused))
|
||||
#define __always_unused __attribute__((unused))
|
||||
|
||||
#define __gcc_header(x) #x
|
||||
#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
|
||||
|
@@ -36,4 +36,18 @@
|
||||
the kernel context */
|
||||
#define __cold __attribute__((__cold__))
|
||||
|
||||
|
||||
#if __GNUC_MINOR__ >= 5
|
||||
/*
|
||||
* Mark a position in code as unreachable. This can be used to
|
||||
* suppress control flow warnings after asm blocks that transfer
|
||||
* control elsewhere.
|
||||
*
|
||||
* Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
* this in the preprocessor, but we can live with this because they're
|
||||
* unreleased. Really, we need to have autoconf for the kernel.
|
||||
*/
|
||||
#define unreachable() __builtin_unreachable()
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@@ -144,6 +144,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
||||
# define barrier() __memory_barrier()
|
||||
#endif
|
||||
|
||||
/* Unreachable code */
|
||||
#ifndef unreachable
|
||||
# define unreachable() do { } while (1)
|
||||
#endif
|
||||
|
||||
#ifndef RELOC_HIDE
|
||||
# define RELOC_HIDE(ptr, off) \
|
||||
({ unsigned long __ptr; \
|
||||
@@ -213,6 +218,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
||||
# define __maybe_unused /* unimplemented */
|
||||
#endif
|
||||
|
||||
#ifndef __always_unused
|
||||
# define __always_unused /* unimplemented */
|
||||
#endif
|
||||
|
||||
#ifndef noinline
|
||||
#define noinline
|
||||
#endif
|
||||
|
@@ -208,16 +208,9 @@ struct dmar_atsr_unit {
|
||||
u8 include_all:1; /* include all ports */
|
||||
};
|
||||
|
||||
/* Intel DMAR initialization functions */
|
||||
extern int intel_iommu_init(void);
|
||||
#else
|
||||
static inline int intel_iommu_init(void)
|
||||
{
|
||||
#ifdef CONFIG_INTR_REMAP
|
||||
return dmar_dev_scope_init();
|
||||
#else
|
||||
return -ENODEV;
|
||||
#endif
|
||||
}
|
||||
#endif /* !CONFIG_DMAR */
|
||||
#else /* !CONFIG_DMAR: */
|
||||
static inline int intel_iommu_init(void) { return -ENODEV; }
|
||||
#endif /* CONFIG_DMAR */
|
||||
|
||||
#endif /* __DMAR_H__ */
|
||||
|
@@ -81,7 +81,11 @@ struct gfs2_meta_header {
|
||||
__be32 mh_type;
|
||||
__be64 __pad0; /* Was generation number in gfs1 */
|
||||
__be32 mh_format;
|
||||
__be32 __pad1; /* Was incarnation number in gfs1 */
|
||||
/* This union is to keep userspace happy */
|
||||
union {
|
||||
__be32 mh_jid; /* Was incarnation number in gfs1 */
|
||||
__be32 __pad1;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -139,10 +139,34 @@ static inline void account_system_vtime(struct task_struct *tsk)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_NO_HZ)
|
||||
#if defined(CONFIG_TINY_RCU)
|
||||
extern void rcu_enter_nohz(void);
|
||||
extern void rcu_exit_nohz(void);
|
||||
|
||||
static inline void rcu_irq_enter(void)
|
||||
{
|
||||
rcu_exit_nohz();
|
||||
}
|
||||
|
||||
static inline void rcu_irq_exit(void)
|
||||
{
|
||||
rcu_enter_nohz();
|
||||
}
|
||||
|
||||
static inline void rcu_nmi_enter(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void rcu_nmi_exit(void)
|
||||
{
|
||||
}
|
||||
|
||||
#else
|
||||
extern void rcu_irq_enter(void);
|
||||
extern void rcu_irq_exit(void);
|
||||
extern void rcu_nmi_enter(void);
|
||||
extern void rcu_nmi_exit(void);
|
||||
#endif
|
||||
#else
|
||||
# define rcu_irq_enter() do { } while (0)
|
||||
# define rcu_irq_exit() do { } while (0)
|
||||
|
@@ -83,16 +83,12 @@ extern struct group_info init_groups;
|
||||
#define INIT_IDS
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SECURITY_FILE_CAPABILITIES
|
||||
/*
|
||||
* Because of the reduced scope of CAP_SETPCAP when filesystem
|
||||
* capabilities are in effect, it is safe to allow CAP_SETPCAP to
|
||||
* be available in the default configuration.
|
||||
*/
|
||||
# define CAP_INIT_BSET CAP_FULL_SET
|
||||
#else
|
||||
# define CAP_INIT_BSET CAP_INIT_EFF_SET
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
#define INIT_TASK_RCU_PREEMPT(tsk) \
|
||||
|
@@ -603,12 +603,6 @@ static inline void init_irq_proc(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_GENERIC_HARDIRQS) && defined(CONFIG_DEBUG_SHIRQ)
|
||||
extern void debug_poll_all_shared_irqs(void);
|
||||
#else
|
||||
static inline void debug_poll_all_shared_irqs(void) { }
|
||||
#endif
|
||||
|
||||
struct seq_file;
|
||||
int show_interrupts(struct seq_file *p, void *v);
|
||||
|
||||
|
@@ -124,6 +124,6 @@
|
||||
typecheck(unsigned long, flags); \
|
||||
raw_irqs_disabled_flags(flags); \
|
||||
})
|
||||
#endif /* CONFIG_X86 */
|
||||
#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
|
||||
|
||||
#endif
|
||||
|
@@ -15,7 +15,6 @@
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/typecheck.h>
|
||||
#include <linux/ratelimit.h>
|
||||
#include <linux/dynamic_debug.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/bug.h>
|
||||
@@ -241,8 +240,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)
|
||||
asmlinkage int printk(const char * fmt, ...)
|
||||
__attribute__ ((format (printf, 1, 2))) __cold;
|
||||
|
||||
extern struct ratelimit_state printk_ratelimit_state;
|
||||
extern int printk_ratelimit(void);
|
||||
extern int __printk_ratelimit(const char *func);
|
||||
#define printk_ratelimit() __printk_ratelimit(__func__)
|
||||
extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
|
||||
unsigned int interval_msec);
|
||||
|
||||
|
@@ -26,14 +26,15 @@
|
||||
|
||||
/* Auxiliary data to use in generating the audit record. */
|
||||
struct common_audit_data {
|
||||
char type;
|
||||
#define LSM_AUDIT_DATA_FS 1
|
||||
#define LSM_AUDIT_DATA_NET 2
|
||||
#define LSM_AUDIT_DATA_CAP 3
|
||||
#define LSM_AUDIT_DATA_IPC 4
|
||||
#define LSM_AUDIT_DATA_TASK 5
|
||||
#define LSM_AUDIT_DATA_KEY 6
|
||||
#define LSM_AUDIT_NO_AUDIT 7
|
||||
char type;
|
||||
#define LSM_AUDIT_DATA_FS 1
|
||||
#define LSM_AUDIT_DATA_NET 2
|
||||
#define LSM_AUDIT_DATA_CAP 3
|
||||
#define LSM_AUDIT_DATA_IPC 4
|
||||
#define LSM_AUDIT_DATA_TASK 5
|
||||
#define LSM_AUDIT_DATA_KEY 6
|
||||
#define LSM_AUDIT_NO_AUDIT 7
|
||||
#define LSM_AUDIT_DATA_KMOD 8
|
||||
struct task_struct *tsk;
|
||||
union {
|
||||
struct {
|
||||
@@ -66,6 +67,7 @@ struct common_audit_data {
|
||||
char *key_desc;
|
||||
} key_struct;
|
||||
#endif
|
||||
char *kmod_name;
|
||||
} u;
|
||||
/* this union contains LSM specific data */
|
||||
union {
|
||||
|
@@ -1212,7 +1212,7 @@
|
||||
#define WM831X_LDO1_OK_SHIFT 0 /* LDO1_OK */
|
||||
#define WM831X_LDO1_OK_WIDTH 1 /* LDO1_OK */
|
||||
|
||||
#define WM831X_ISINK_MAX_ISEL 56
|
||||
extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL];
|
||||
#define WM831X_ISINK_MAX_ISEL 55
|
||||
extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1];
|
||||
|
||||
#endif
|
||||
|
@@ -280,6 +280,7 @@ extern int kernel_sock_shutdown(struct socket *sock,
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
#include <linux/sysctl.h>
|
||||
#include <linux/ratelimit.h>
|
||||
extern struct ratelimit_state net_ratelimit_state;
|
||||
#endif
|
||||
|
||||
|
@@ -1633,6 +1633,8 @@
|
||||
#define PCI_DEVICE_ID_O2_6730 0x673a
|
||||
#define PCI_DEVICE_ID_O2_6832 0x6832
|
||||
#define PCI_DEVICE_ID_O2_6836 0x6836
|
||||
#define PCI_DEVICE_ID_O2_6812 0x6872
|
||||
#define PCI_DEVICE_ID_O2_6933 0x6933
|
||||
|
||||
#define PCI_VENDOR_ID_3DFX 0x121a
|
||||
#define PCI_DEVICE_ID_3DFX_VOODOO 0x0001
|
||||
|
@@ -147,6 +147,20 @@ static inline void forget_cached_acl(struct inode *inode, int type)
|
||||
if (old != ACL_NOT_CACHED)
|
||||
posix_acl_release(old);
|
||||
}
|
||||
|
||||
static inline void forget_all_cached_acls(struct inode *inode)
|
||||
{
|
||||
struct posix_acl *old_access, *old_default;
|
||||
spin_lock(&inode->i_lock);
|
||||
old_access = inode->i_acl;
|
||||
old_default = inode->i_default_acl;
|
||||
inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
|
||||
spin_unlock(&inode->i_lock);
|
||||
if (old_access != ACL_NOT_CACHED)
|
||||
posix_acl_release(old_access);
|
||||
if (old_default != ACL_NOT_CACHED)
|
||||
posix_acl_release(old_default);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void cache_no_acl(struct inode *inode)
|
||||
|
@@ -376,6 +376,17 @@ static inline unsigned int dquot_generic_flag(unsigned int flags, int type)
|
||||
return flags >> _DQUOT_STATE_FLAGS;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_QUOTA_NETLINK_INTERFACE
|
||||
extern void quota_send_warning(short type, unsigned int id, dev_t dev,
|
||||
const char warntype);
|
||||
#else
|
||||
static inline void quota_send_warning(short type, unsigned int id, dev_t dev,
|
||||
const char warntype)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_QUOTA_NETLINK_INTERFACE */
|
||||
|
||||
struct quota_info {
|
||||
unsigned int flags; /* Flags for diskquotas on this device */
|
||||
struct mutex dqio_mutex; /* lock device while I/O in progress */
|
||||
|
@@ -1,20 +1,31 @@
|
||||
#ifndef _LINUX_RATELIMIT_H
|
||||
#define _LINUX_RATELIMIT_H
|
||||
#include <linux/param.h>
|
||||
|
||||
#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
|
||||
#define DEFAULT_RATELIMIT_BURST 10
|
||||
#include <linux/param.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
|
||||
#define DEFAULT_RATELIMIT_BURST 10
|
||||
|
||||
struct ratelimit_state {
|
||||
int interval;
|
||||
int burst;
|
||||
int printed;
|
||||
int missed;
|
||||
unsigned long begin;
|
||||
spinlock_t lock; /* protect the state */
|
||||
|
||||
int interval;
|
||||
int burst;
|
||||
int printed;
|
||||
int missed;
|
||||
unsigned long begin;
|
||||
};
|
||||
|
||||
#define DEFINE_RATELIMIT_STATE(name, interval, burst) \
|
||||
struct ratelimit_state name = {interval, burst,}
|
||||
#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \
|
||||
\
|
||||
struct ratelimit_state name = { \
|
||||
.lock = __SPIN_LOCK_UNLOCKED(name.lock), \
|
||||
.interval = interval_init, \
|
||||
.burst = burst_init, \
|
||||
}
|
||||
|
||||
extern int __ratelimit(struct ratelimit_state *rs);
|
||||
#endif
|
||||
extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
|
||||
#define __ratelimit(state) ___ratelimit(state, __func__)
|
||||
|
||||
#endif /* _LINUX_RATELIMIT_H */
|
||||
|
@@ -52,11 +52,6 @@ struct rcu_head {
|
||||
};
|
||||
|
||||
/* Exported common interfaces */
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
extern void synchronize_rcu(void);
|
||||
#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
#define synchronize_rcu synchronize_sched
|
||||
#endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
extern void synchronize_rcu_bh(void);
|
||||
extern void synchronize_sched(void);
|
||||
extern void rcu_barrier(void);
|
||||
@@ -67,12 +62,11 @@ extern int sched_expedited_torture_stats(char *page);
|
||||
|
||||
/* Internal to kernel */
|
||||
extern void rcu_init(void);
|
||||
extern void rcu_scheduler_starting(void);
|
||||
extern int rcu_needs_cpu(int cpu);
|
||||
extern int rcu_scheduler_active;
|
||||
|
||||
#if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU)
|
||||
#include <linux/rcutree.h>
|
||||
#elif defined(CONFIG_TINY_RCU)
|
||||
#include <linux/rcutiny.h>
|
||||
#else
|
||||
#error "Unknown RCU implementation specified to kernel configuration"
|
||||
#endif
|
||||
|
104
include/linux/rcutiny.h
Normal file
104
include/linux/rcutiny.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Read-Copy Update mechanism for mutual exclusion, the Bloatwatch edition.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Copyright IBM Corporation, 2008
|
||||
*
|
||||
* Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
*
|
||||
* For detailed explanation of Read-Copy Update mechanism see -
|
||||
* Documentation/RCU
|
||||
*/
|
||||
#ifndef __LINUX_TINY_H
|
||||
#define __LINUX_TINY_H
|
||||
|
||||
#include <linux/cache.h>
|
||||
|
||||
void rcu_sched_qs(int cpu);
|
||||
void rcu_bh_qs(int cpu);
|
||||
|
||||
#define __rcu_read_lock() preempt_disable()
|
||||
#define __rcu_read_unlock() preempt_enable()
|
||||
#define __rcu_read_lock_bh() local_bh_disable()
|
||||
#define __rcu_read_unlock_bh() local_bh_enable()
|
||||
#define call_rcu_sched call_rcu
|
||||
|
||||
#define rcu_init_sched() do { } while (0)
|
||||
extern void rcu_check_callbacks(int cpu, int user);
|
||||
|
||||
static inline int rcu_needs_cpu(int cpu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of grace periods.
|
||||
*/
|
||||
static inline long rcu_batches_completed(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of bottom-half grace periods.
|
||||
*/
|
||||
static inline long rcu_batches_completed_bh(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int rcu_expedited_torture_stats(char *page);
|
||||
|
||||
#define synchronize_rcu synchronize_sched
|
||||
|
||||
static inline void synchronize_rcu_expedited(void)
|
||||
{
|
||||
synchronize_sched();
|
||||
}
|
||||
|
||||
static inline void synchronize_rcu_bh_expedited(void)
|
||||
{
|
||||
synchronize_sched();
|
||||
}
|
||||
|
||||
struct notifier_block;
|
||||
|
||||
#ifdef CONFIG_NO_HZ
|
||||
|
||||
extern void rcu_enter_nohz(void);
|
||||
extern void rcu_exit_nohz(void);
|
||||
|
||||
#else /* #ifdef CONFIG_NO_HZ */
|
||||
|
||||
static inline void rcu_enter_nohz(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void rcu_exit_nohz(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* #else #ifdef CONFIG_NO_HZ */
|
||||
|
||||
static inline void rcu_scheduler_starting(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void exit_rcu(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* __LINUX_RCUTINY_H */
|
@@ -34,15 +34,15 @@ struct notifier_block;
|
||||
|
||||
extern void rcu_sched_qs(int cpu);
|
||||
extern void rcu_bh_qs(int cpu);
|
||||
extern int rcu_cpu_notify(struct notifier_block *self,
|
||||
unsigned long action, void *hcpu);
|
||||
extern int rcu_needs_cpu(int cpu);
|
||||
extern void rcu_scheduler_starting(void);
|
||||
extern int rcu_expedited_torture_stats(char *page);
|
||||
|
||||
#ifdef CONFIG_TREE_PREEMPT_RCU
|
||||
|
||||
extern void __rcu_read_lock(void);
|
||||
extern void __rcu_read_unlock(void);
|
||||
extern void synchronize_rcu(void);
|
||||
extern void exit_rcu(void);
|
||||
|
||||
#else /* #ifdef CONFIG_TREE_PREEMPT_RCU */
|
||||
@@ -57,7 +57,7 @@ static inline void __rcu_read_unlock(void)
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
#define __synchronize_sched() synchronize_rcu()
|
||||
#define synchronize_rcu synchronize_sched
|
||||
|
||||
static inline void exit_rcu(void)
|
||||
{
|
||||
@@ -83,7 +83,6 @@ static inline void synchronize_rcu_bh_expedited(void)
|
||||
synchronize_sched_expedited();
|
||||
}
|
||||
|
||||
extern void __rcu_init(void);
|
||||
extern void rcu_check_callbacks(int cpu, int user);
|
||||
|
||||
extern long rcu_batches_completed(void);
|
||||
|
@@ -1421,17 +1421,17 @@ struct task_struct {
|
||||
#endif
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
unsigned int irq_events;
|
||||
int hardirqs_enabled;
|
||||
unsigned long hardirq_enable_ip;
|
||||
unsigned int hardirq_enable_event;
|
||||
unsigned long hardirq_disable_ip;
|
||||
unsigned int hardirq_enable_event;
|
||||
unsigned int hardirq_disable_event;
|
||||
int softirqs_enabled;
|
||||
unsigned long softirq_disable_ip;
|
||||
unsigned int softirq_disable_event;
|
||||
unsigned long softirq_enable_ip;
|
||||
unsigned int softirq_enable_event;
|
||||
int hardirqs_enabled;
|
||||
int hardirq_context;
|
||||
unsigned long softirq_disable_ip;
|
||||
unsigned long softirq_enable_ip;
|
||||
unsigned int softirq_disable_event;
|
||||
unsigned int softirq_enable_event;
|
||||
int softirqs_enabled;
|
||||
int softirq_context;
|
||||
#endif
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
@@ -2086,11 +2086,18 @@ static inline int is_si_special(const struct siginfo *info)
|
||||
return info <= SEND_SIG_FORCED;
|
||||
}
|
||||
|
||||
/* True if we are on the alternate signal stack. */
|
||||
|
||||
/*
|
||||
* True if we are on the alternate signal stack.
|
||||
*/
|
||||
static inline int on_sig_stack(unsigned long sp)
|
||||
{
|
||||
return (sp - current->sas_ss_sp < current->sas_ss_size);
|
||||
#ifdef CONFIG_STACK_GROWSUP
|
||||
return sp >= current->sas_ss_sp &&
|
||||
sp - current->sas_ss_sp < current->sas_ss_size;
|
||||
#else
|
||||
return sp > current->sas_ss_sp &&
|
||||
sp - current->sas_ss_sp <= current->sas_ss_size;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int sas_ss_flags(unsigned long sp)
|
||||
|
@@ -1,6 +1,15 @@
|
||||
#ifndef _LINUX_SECUREBITS_H
|
||||
#define _LINUX_SECUREBITS_H 1
|
||||
|
||||
/* Each securesetting is implemented using two bits. One bit specifies
|
||||
whether the setting is on or off. The other bit specify whether the
|
||||
setting is locked or not. A setting which is locked cannot be
|
||||
changed from user-level. */
|
||||
#define issecure_mask(X) (1 << (X))
|
||||
#ifdef __KERNEL__
|
||||
#define issecure(X) (issecure_mask(X) & current_cred_xxx(securebits))
|
||||
#endif
|
||||
|
||||
#define SECUREBITS_DEFAULT 0x00000000
|
||||
|
||||
/* When set UID 0 has no special privileges. When unset, we support
|
||||
@@ -12,6 +21,9 @@
|
||||
#define SECURE_NOROOT 0
|
||||
#define SECURE_NOROOT_LOCKED 1 /* make bit-0 immutable */
|
||||
|
||||
#define SECBIT_NOROOT (issecure_mask(SECURE_NOROOT))
|
||||
#define SECBIT_NOROOT_LOCKED (issecure_mask(SECURE_NOROOT_LOCKED))
|
||||
|
||||
/* When set, setuid to/from uid 0 does not trigger capability-"fixup".
|
||||
When unset, to provide compatiblility with old programs relying on
|
||||
set*uid to gain/lose privilege, transitions to/from uid 0 cause
|
||||
@@ -19,6 +31,10 @@
|
||||
#define SECURE_NO_SETUID_FIXUP 2
|
||||
#define SECURE_NO_SETUID_FIXUP_LOCKED 3 /* make bit-2 immutable */
|
||||
|
||||
#define SECBIT_NO_SETUID_FIXUP (issecure_mask(SECURE_NO_SETUID_FIXUP))
|
||||
#define SECBIT_NO_SETUID_FIXUP_LOCKED \
|
||||
(issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED))
|
||||
|
||||
/* When set, a process can retain its capabilities even after
|
||||
transitioning to a non-root user (the set-uid fixup suppressed by
|
||||
bit 2). Bit-4 is cleared when a process calls exec(); setting both
|
||||
@@ -27,12 +43,8 @@
|
||||
#define SECURE_KEEP_CAPS 4
|
||||
#define SECURE_KEEP_CAPS_LOCKED 5 /* make bit-4 immutable */
|
||||
|
||||
/* Each securesetting is implemented using two bits. One bit specifies
|
||||
whether the setting is on or off. The other bit specify whether the
|
||||
setting is locked or not. A setting which is locked cannot be
|
||||
changed from user-level. */
|
||||
#define issecure_mask(X) (1 << (X))
|
||||
#define issecure(X) (issecure_mask(X) & current_cred_xxx(securebits))
|
||||
#define SECBIT_KEEP_CAPS (issecure_mask(SECURE_KEEP_CAPS))
|
||||
#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED))
|
||||
|
||||
#define SECURE_ALL_BITS (issecure_mask(SECURE_NOROOT) | \
|
||||
issecure_mask(SECURE_NO_SETUID_FIXUP) | \
|
||||
|
@@ -447,6 +447,22 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @new_dir contains the path structure for parent of the new link.
|
||||
* @new_dentry contains the dentry structure of the new link.
|
||||
* Return 0 if permission is granted.
|
||||
* @path_chmod:
|
||||
* Check for permission to change DAC's permission of a file or directory.
|
||||
* @dentry contains the dentry structure.
|
||||
* @mnt contains the vfsmnt structure.
|
||||
* @mode contains DAC's mode.
|
||||
* Return 0 if permission is granted.
|
||||
* @path_chown:
|
||||
* Check for permission to change owner/group of a file or directory.
|
||||
* @path contains the path structure.
|
||||
* @uid contains new owner's ID.
|
||||
* @gid contains new group's ID.
|
||||
* Return 0 if permission is granted.
|
||||
* @path_chroot:
|
||||
* Check for permission to change root directory.
|
||||
* @path contains the path structure.
|
||||
* Return 0 if permission is granted.
|
||||
* @inode_readlink:
|
||||
* Check the permission to read the symbolic link.
|
||||
* @dentry contains the dentry structure for the file link.
|
||||
@@ -690,6 +706,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @kernel_module_request:
|
||||
* Ability to trigger the kernel to automatically upcall to userspace for
|
||||
* userspace to load a kernel module with the given name.
|
||||
* @kmod_name name of the module requested by the kernel
|
||||
* Return 0 if successful.
|
||||
* @task_setuid:
|
||||
* Check permission before setting one or more of the user identity
|
||||
@@ -1488,6 +1505,10 @@ struct security_operations {
|
||||
struct dentry *new_dentry);
|
||||
int (*path_rename) (struct path *old_dir, struct dentry *old_dentry,
|
||||
struct path *new_dir, struct dentry *new_dentry);
|
||||
int (*path_chmod) (struct dentry *dentry, struct vfsmount *mnt,
|
||||
mode_t mode);
|
||||
int (*path_chown) (struct path *path, uid_t uid, gid_t gid);
|
||||
int (*path_chroot) (struct path *path);
|
||||
#endif
|
||||
|
||||
int (*inode_alloc_security) (struct inode *inode);
|
||||
@@ -1557,7 +1578,7 @@ struct security_operations {
|
||||
void (*cred_transfer)(struct cred *new, const struct cred *old);
|
||||
int (*kernel_act_as)(struct cred *new, u32 secid);
|
||||
int (*kernel_create_files_as)(struct cred *new, struct inode *inode);
|
||||
int (*kernel_module_request)(void);
|
||||
int (*kernel_module_request)(char *kmod_name);
|
||||
int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags);
|
||||
int (*task_fix_setuid) (struct cred *new, const struct cred *old,
|
||||
int flags);
|
||||
@@ -1822,7 +1843,7 @@ void security_commit_creds(struct cred *new, const struct cred *old);
|
||||
void security_transfer_creds(struct cred *new, const struct cred *old);
|
||||
int security_kernel_act_as(struct cred *new, u32 secid);
|
||||
int security_kernel_create_files_as(struct cred *new, struct inode *inode);
|
||||
int security_kernel_module_request(void);
|
||||
int security_kernel_module_request(char *kmod_name);
|
||||
int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags);
|
||||
int security_task_fix_setuid(struct cred *new, const struct cred *old,
|
||||
int flags);
|
||||
@@ -2387,7 +2408,7 @@ static inline int security_kernel_create_files_as(struct cred *cred,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_kernel_module_request(void)
|
||||
static inline int security_kernel_module_request(char *kmod_name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -2952,6 +2973,10 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||
struct dentry *new_dentry);
|
||||
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||
struct path *new_dir, struct dentry *new_dentry);
|
||||
int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
|
||||
mode_t mode);
|
||||
int security_path_chown(struct path *path, uid_t uid, gid_t gid);
|
||||
int security_path_chroot(struct path *path);
|
||||
#else /* CONFIG_SECURITY_PATH */
|
||||
static inline int security_path_unlink(struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -3001,6 +3026,23 @@ static inline int security_path_rename(struct path *old_dir,
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_path_chmod(struct dentry *dentry,
|
||||
struct vfsmount *mnt,
|
||||
mode_t mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_path_chroot(struct path *path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_SECURITY_PATH */
|
||||
|
||||
#ifdef CONFIG_KEYS
|
||||
|
@@ -76,6 +76,9 @@ void smp_call_function_many(const struct cpumask *mask,
|
||||
void __smp_call_function_single(int cpuid, struct call_single_data *data,
|
||||
int wait);
|
||||
|
||||
int smp_call_function_any(const struct cpumask *mask,
|
||||
void (*func)(void *info), void *info, int wait);
|
||||
|
||||
/*
|
||||
* Generic and arch helpers
|
||||
*/
|
||||
@@ -137,9 +140,15 @@ static inline void smp_send_reschedule(int cpu) { }
|
||||
#define smp_prepare_boot_cpu() do {} while (0)
|
||||
#define smp_call_function_many(mask, func, info, wait) \
|
||||
(up_smp_call_function(func, info))
|
||||
static inline void init_call_single_data(void)
|
||||
static inline void init_call_single_data(void) { }
|
||||
|
||||
static inline int
|
||||
smp_call_function_any(const struct cpumask *mask, void (*func)(void *info),
|
||||
void *info, int wait)
|
||||
{
|
||||
return smp_call_function_single(0, func, info, wait);
|
||||
}
|
||||
|
||||
#endif /* !SMP */
|
||||
|
||||
/*
|
||||
|
@@ -24,8 +24,21 @@ static inline int reacquire_kernel_lock(struct task_struct *task)
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern void __lockfunc lock_kernel(void) __acquires(kernel_lock);
|
||||
extern void __lockfunc unlock_kernel(void) __releases(kernel_lock);
|
||||
extern void __lockfunc
|
||||
_lock_kernel(const char *func, const char *file, int line)
|
||||
__acquires(kernel_lock);
|
||||
|
||||
extern void __lockfunc
|
||||
_unlock_kernel(const char *func, const char *file, int line)
|
||||
__releases(kernel_lock);
|
||||
|
||||
#define lock_kernel() do { \
|
||||
_lock_kernel(__func__, __FILE__, __LINE__); \
|
||||
} while (0)
|
||||
|
||||
#define unlock_kernel() do { \
|
||||
_unlock_kernel(__func__, __FILE__, __LINE__); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Various legacy drivers don't really need the BKL in a specific
|
||||
@@ -41,8 +54,8 @@ static inline void cycle_kernel_lock(void)
|
||||
|
||||
#else
|
||||
|
||||
#define lock_kernel() do { } while(0)
|
||||
#define unlock_kernel() do { } while(0)
|
||||
#define lock_kernel()
|
||||
#define unlock_kernel()
|
||||
#define release_kernel_lock(task) do { } while(0)
|
||||
#define cycle_kernel_lock() do { } while(0)
|
||||
#define reacquire_kernel_lock(task) 0
|
||||
|
@@ -79,8 +79,6 @@
|
||||
*/
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock);
|
||||
|
||||
/*
|
||||
* Pull the __raw*() functions/declarations (UP-nondebug doesnt need them):
|
||||
*/
|
||||
@@ -102,7 +100,7 @@ do { \
|
||||
|
||||
#else
|
||||
# define spin_lock_init(lock) \
|
||||
do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0)
|
||||
do { *(lock) = __SPIN_LOCK_UNLOCKED(lock); } while (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_SPINLOCK
|
||||
@@ -116,7 +114,7 @@ do { \
|
||||
} while (0)
|
||||
#else
|
||||
# define rwlock_init(lock) \
|
||||
do { *(lock) = RW_LOCK_UNLOCKED; } while (0)
|
||||
do { *(lock) = __RW_LOCK_UNLOCKED(lock); } while (0)
|
||||
#endif
|
||||
|
||||
#define spin_is_locked(lock) __raw_spin_is_locked(&(lock)->raw_lock)
|
||||
|
@@ -60,137 +60,118 @@ void __lockfunc _read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
|
||||
void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
|
||||
__releases(lock);
|
||||
|
||||
/*
|
||||
* We inline the unlock functions in the nondebug case:
|
||||
*/
|
||||
#if !defined(CONFIG_DEBUG_SPINLOCK) && !defined(CONFIG_PREEMPT)
|
||||
#define __always_inline__spin_unlock
|
||||
#define __always_inline__read_unlock
|
||||
#define __always_inline__write_unlock
|
||||
#define __always_inline__spin_unlock_irq
|
||||
#define __always_inline__read_unlock_irq
|
||||
#define __always_inline__write_unlock_irq
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DEBUG_SPINLOCK
|
||||
#ifndef CONFIG_GENERIC_LOCKBREAK
|
||||
|
||||
#ifdef __always_inline__spin_lock
|
||||
#ifdef CONFIG_INLINE_SPIN_LOCK
|
||||
#define _spin_lock(lock) __spin_lock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_lock
|
||||
#ifdef CONFIG_INLINE_READ_LOCK
|
||||
#define _read_lock(lock) __read_lock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_lock
|
||||
#ifdef CONFIG_INLINE_WRITE_LOCK
|
||||
#define _write_lock(lock) __write_lock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_lock_bh
|
||||
#ifdef CONFIG_INLINE_SPIN_LOCK_BH
|
||||
#define _spin_lock_bh(lock) __spin_lock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_lock_bh
|
||||
#ifdef CONFIG_INLINE_READ_LOCK_BH
|
||||
#define _read_lock_bh(lock) __read_lock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_lock_bh
|
||||
#ifdef CONFIG_INLINE_WRITE_LOCK_BH
|
||||
#define _write_lock_bh(lock) __write_lock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_lock_irq
|
||||
#ifdef CONFIG_INLINE_SPIN_LOCK_IRQ
|
||||
#define _spin_lock_irq(lock) __spin_lock_irq(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_lock_irq
|
||||
#ifdef CONFIG_INLINE_READ_LOCK_IRQ
|
||||
#define _read_lock_irq(lock) __read_lock_irq(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_lock_irq
|
||||
#ifdef CONFIG_INLINE_WRITE_LOCK_IRQ
|
||||
#define _write_lock_irq(lock) __write_lock_irq(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_lock_irqsave
|
||||
#ifdef CONFIG_INLINE_SPIN_LOCK_IRQSAVE
|
||||
#define _spin_lock_irqsave(lock) __spin_lock_irqsave(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_lock_irqsave
|
||||
#ifdef CONFIG_INLINE_READ_LOCK_IRQSAVE
|
||||
#define _read_lock_irqsave(lock) __read_lock_irqsave(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_lock_irqsave
|
||||
#ifdef CONFIG_INLINE_WRITE_LOCK_IRQSAVE
|
||||
#define _write_lock_irqsave(lock) __write_lock_irqsave(lock)
|
||||
#endif
|
||||
|
||||
#endif /* !CONFIG_GENERIC_LOCKBREAK */
|
||||
|
||||
#ifdef __always_inline__spin_trylock
|
||||
#ifdef CONFIG_INLINE_SPIN_TRYLOCK
|
||||
#define _spin_trylock(lock) __spin_trylock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_trylock
|
||||
#ifdef CONFIG_INLINE_READ_TRYLOCK
|
||||
#define _read_trylock(lock) __read_trylock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_trylock
|
||||
#ifdef CONFIG_INLINE_WRITE_TRYLOCK
|
||||
#define _write_trylock(lock) __write_trylock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_trylock_bh
|
||||
#ifdef CONFIG_INLINE_SPIN_TRYLOCK_BH
|
||||
#define _spin_trylock_bh(lock) __spin_trylock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_unlock
|
||||
#ifdef CONFIG_INLINE_SPIN_UNLOCK
|
||||
#define _spin_unlock(lock) __spin_unlock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_unlock
|
||||
#ifdef CONFIG_INLINE_READ_UNLOCK
|
||||
#define _read_unlock(lock) __read_unlock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_unlock
|
||||
#ifdef CONFIG_INLINE_WRITE_UNLOCK
|
||||
#define _write_unlock(lock) __write_unlock(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_unlock_bh
|
||||
#ifdef CONFIG_INLINE_SPIN_UNLOCK_BH
|
||||
#define _spin_unlock_bh(lock) __spin_unlock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_unlock_bh
|
||||
#ifdef CONFIG_INLINE_READ_UNLOCK_BH
|
||||
#define _read_unlock_bh(lock) __read_unlock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_unlock_bh
|
||||
#ifdef CONFIG_INLINE_WRITE_UNLOCK_BH
|
||||
#define _write_unlock_bh(lock) __write_unlock_bh(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_unlock_irq
|
||||
#ifdef CONFIG_INLINE_SPIN_UNLOCK_IRQ
|
||||
#define _spin_unlock_irq(lock) __spin_unlock_irq(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_unlock_irq
|
||||
#ifdef CONFIG_INLINE_READ_UNLOCK_IRQ
|
||||
#define _read_unlock_irq(lock) __read_unlock_irq(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_unlock_irq
|
||||
#ifdef CONFIG_INLINE_WRITE_UNLOCK_IRQ
|
||||
#define _write_unlock_irq(lock) __write_unlock_irq(lock)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__spin_unlock_irqrestore
|
||||
#ifdef CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE
|
||||
#define _spin_unlock_irqrestore(lock, flags) __spin_unlock_irqrestore(lock, flags)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__read_unlock_irqrestore
|
||||
#ifdef CONFIG_INLINE_READ_UNLOCK_IRQRESTORE
|
||||
#define _read_unlock_irqrestore(lock, flags) __read_unlock_irqrestore(lock, flags)
|
||||
#endif
|
||||
|
||||
#ifdef __always_inline__write_unlock_irqrestore
|
||||
#ifdef CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE
|
||||
#define _write_unlock_irqrestore(lock, flags) __write_unlock_irqrestore(lock, flags)
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_DEBUG_SPINLOCK */
|
||||
|
||||
static inline int __spin_trylock(spinlock_t *lock)
|
||||
{
|
||||
preempt_disable();
|
||||
|
@@ -48,6 +48,7 @@ void cleanup_srcu_struct(struct srcu_struct *sp);
|
||||
int srcu_read_lock(struct srcu_struct *sp) __acquires(sp);
|
||||
void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp);
|
||||
void synchronize_srcu(struct srcu_struct *sp);
|
||||
void synchronize_srcu_expedited(struct srcu_struct *sp);
|
||||
long srcu_batches_completed(struct srcu_struct *sp);
|
||||
|
||||
#endif
|
||||
|
@@ -7,6 +7,8 @@ struct device;
|
||||
struct dma_attrs;
|
||||
struct scatterlist;
|
||||
|
||||
extern int swiotlb_force;
|
||||
|
||||
/*
|
||||
* Maximum allowable number of contiguous slabs to map,
|
||||
* must be a power of 2. What is the appropriate value ?
|
||||
@@ -20,8 +22,7 @@ struct scatterlist;
|
||||
*/
|
||||
#define IO_TLB_SHIFT 11
|
||||
|
||||
extern void
|
||||
swiotlb_init(void);
|
||||
extern void swiotlb_init(int verbose);
|
||||
|
||||
extern void
|
||||
*swiotlb_alloc_coherent(struct device *hwdev, size_t size,
|
||||
@@ -88,4 +89,11 @@ swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
|
||||
extern int
|
||||
swiotlb_dma_supported(struct device *hwdev, u64 mask);
|
||||
|
||||
#ifdef CONFIG_SWIOTLB
|
||||
extern void __init swiotlb_free(void);
|
||||
#else
|
||||
static inline void swiotlb_free(void) { }
|
||||
#endif
|
||||
|
||||
extern void swiotlb_print_info(void);
|
||||
#endif /* __LINUX_SWIOTLB_H */
|
||||
|
@@ -27,9 +27,16 @@
|
||||
*/
|
||||
#define TPM_ANY_NUM 0xFFFF
|
||||
|
||||
#if defined(CONFIG_TCG_TPM)
|
||||
#if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
|
||||
|
||||
extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf);
|
||||
extern int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash);
|
||||
#else
|
||||
static inline int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf) {
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash) {
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user