merge linus into release branch
Conflicts: drivers/acpi/acpi_memhotplug.c
This commit is contained in:
@@ -259,7 +259,7 @@ struct ac97_codec {
|
||||
int type;
|
||||
u32 model;
|
||||
|
||||
int modem:1;
|
||||
unsigned int modem:1;
|
||||
|
||||
struct ac97_ops *codec_ops;
|
||||
|
||||
|
@@ -528,12 +528,18 @@ static inline void acpi_set_cstate_limit(unsigned int new_limit) { return; }
|
||||
|
||||
#ifdef CONFIG_ACPI_NUMA
|
||||
int acpi_get_pxm(acpi_handle handle);
|
||||
int acpi_get_node(acpi_handle *handle);
|
||||
#else
|
||||
static inline int acpi_get_pxm(acpi_handle handle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int acpi_get_node(acpi_handle *handle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
extern int acpi_paddr_to_node(u64 start_addr, u64 size);
|
||||
|
||||
extern int pnpacpi_disabled;
|
||||
|
||||
|
@@ -149,7 +149,6 @@ void create_empty_buffers(struct page *, unsigned long,
|
||||
unsigned long b_state);
|
||||
void end_buffer_read_sync(struct buffer_head *bh, int uptodate);
|
||||
void end_buffer_write_sync(struct buffer_head *bh, int uptodate);
|
||||
void end_buffer_async_write(struct buffer_head *bh, int uptodate);
|
||||
|
||||
/* Things to do with buffers at mapping->private_list */
|
||||
void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode);
|
||||
@@ -214,6 +213,7 @@ int nobh_truncate_page(struct address_space *, loff_t);
|
||||
int nobh_writepage(struct page *page, get_block_t *get_block,
|
||||
struct writeback_control *wbc);
|
||||
|
||||
void buffer_init(void);
|
||||
|
||||
/*
|
||||
* inline definitions
|
||||
|
@@ -27,8 +27,8 @@ extern struct inode_operations coda_dir_inode_operations;
|
||||
extern struct inode_operations coda_file_inode_operations;
|
||||
extern struct inode_operations coda_ioctl_inode_operations;
|
||||
|
||||
extern struct address_space_operations coda_file_aops;
|
||||
extern struct address_space_operations coda_symlink_aops;
|
||||
extern const struct address_space_operations coda_file_aops;
|
||||
extern const struct address_space_operations coda_symlink_aops;
|
||||
|
||||
extern const struct file_operations coda_dir_operations;
|
||||
extern const struct file_operations coda_file_operations;
|
||||
|
@@ -567,11 +567,6 @@ COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOSUBVER)
|
||||
COMPATIBLE_IOCTL(AUTOFS_IOC_ASKREGHOST)
|
||||
COMPATIBLE_IOCTL(AUTOFS_IOC_TOGGLEREGHOST)
|
||||
COMPATIBLE_IOCTL(AUTOFS_IOC_ASKUMOUNT)
|
||||
/* DEVFS */
|
||||
COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV)
|
||||
COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK)
|
||||
COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE)
|
||||
COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK)
|
||||
/* Raw devices */
|
||||
COMPATIBLE_IOCTL(RAW_SETBIND)
|
||||
COMPATIBLE_IOCTL(RAW_GETBIND)
|
||||
|
@@ -31,17 +31,23 @@ struct cpu {
|
||||
struct sys_device sysdev;
|
||||
};
|
||||
|
||||
extern int register_cpu(struct cpu *, int, struct node *);
|
||||
extern int register_cpu(struct cpu *cpu, int num);
|
||||
extern struct sys_device *get_cpu_sysdev(unsigned cpu);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
extern void unregister_cpu(struct cpu *, struct node *);
|
||||
extern void unregister_cpu(struct cpu *cpu);
|
||||
#endif
|
||||
struct notifier_block;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/* Need to know about CPUs going up/down? */
|
||||
extern int register_cpu_notifier(struct notifier_block *nb);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
extern void unregister_cpu_notifier(struct notifier_block *nb);
|
||||
#else
|
||||
static inline void unregister_cpu_notifier(struct notifier_block *nb)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
extern int current_in_cpu_hotplug(void);
|
||||
|
||||
int cpu_up(unsigned int cpu);
|
||||
@@ -73,6 +79,8 @@ extern int lock_cpu_hotplug_interruptible(void);
|
||||
{ .notifier_call = fn, .priority = pri }; \
|
||||
register_cpu_notifier(&fn##_nb); \
|
||||
}
|
||||
#define register_hotcpu_notifier(nb) register_cpu_notifier(nb)
|
||||
#define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb)
|
||||
int cpu_down(unsigned int cpu);
|
||||
#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
|
||||
#else
|
||||
@@ -80,6 +88,8 @@ int cpu_down(unsigned int cpu);
|
||||
#define unlock_cpu_hotplug() do { } while (0)
|
||||
#define lock_cpu_hotplug_interruptible() 0
|
||||
#define hotcpu_notifier(fn, pri)
|
||||
#define register_hotcpu_notifier(nb)
|
||||
#define unregister_hotcpu_notifier(nb)
|
||||
|
||||
/* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */
|
||||
static inline int cpu_is_offline(int cpu) { return 0; }
|
||||
|
@@ -1,41 +0,0 @@
|
||||
#ifndef _LINUX_DEVFS_FS_H
|
||||
#define _LINUX_DEVFS_FS_H
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#define DEVFSD_PROTOCOL_REVISION_KERNEL 5
|
||||
|
||||
#define DEVFSD_IOCTL_BASE 'd'
|
||||
|
||||
/* These are the various ioctls */
|
||||
#define DEVFSDIOC_GET_PROTO_REV _IOR(DEVFSD_IOCTL_BASE, 0, int)
|
||||
#define DEVFSDIOC_SET_EVENT_MASK _IOW(DEVFSD_IOCTL_BASE, 2, int)
|
||||
#define DEVFSDIOC_RELEASE_EVENT_QUEUE _IOW(DEVFSD_IOCTL_BASE, 3, int)
|
||||
#define DEVFSDIOC_SET_DEBUG_MASK _IOW(DEVFSD_IOCTL_BASE, 4, int)
|
||||
|
||||
#define DEVFSD_NOTIFY_REGISTERED 0
|
||||
#define DEVFSD_NOTIFY_UNREGISTERED 1
|
||||
#define DEVFSD_NOTIFY_ASYNC_OPEN 2
|
||||
#define DEVFSD_NOTIFY_CLOSE 3
|
||||
#define DEVFSD_NOTIFY_LOOKUP 4
|
||||
#define DEVFSD_NOTIFY_CHANGE 5
|
||||
#define DEVFSD_NOTIFY_CREATE 6
|
||||
#define DEVFSD_NOTIFY_DELETE 7
|
||||
|
||||
#define DEVFS_PATHLEN 1024 /* Never change this otherwise the
|
||||
binary interface will change */
|
||||
|
||||
struct devfsd_notify_struct { /* Use native C types to ensure same types in kernel and user space */
|
||||
unsigned int type; /* DEVFSD_NOTIFY_* value */
|
||||
unsigned int mode; /* Mode of the inode or device entry */
|
||||
unsigned int major; /* Major number of device entry */
|
||||
unsigned int minor; /* Minor number of device entry */
|
||||
unsigned int uid; /* Uid of process, inode or device entry */
|
||||
unsigned int gid; /* Gid of process, inode or device entry */
|
||||
unsigned int overrun_count; /* Number of lost events */
|
||||
unsigned int namelen; /* Number of characters not including '\0' */
|
||||
/* The device name MUST come last */
|
||||
char devname[DEVFS_PATHLEN]; /* This will be '\0' terminated */
|
||||
};
|
||||
|
||||
#endif /* _LINUX_DEVFS_FS_H */
|
@@ -1,57 +0,0 @@
|
||||
#ifndef _LINUX_DEVFS_FS_KERNEL_H
|
||||
#define _LINUX_DEVFS_FS_KERNEL_H
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/semaphore.h>
|
||||
|
||||
#define DEVFS_SUPER_MAGIC 0x1373
|
||||
|
||||
#ifdef CONFIG_DEVFS_FS
|
||||
extern int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...)
|
||||
__attribute__ ((format(printf, 3, 4)));
|
||||
extern int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...)
|
||||
__attribute__ ((format(printf, 3, 4)));
|
||||
extern int devfs_mk_symlink(const char *name, const char *link);
|
||||
extern int devfs_mk_dir(const char *fmt, ...)
|
||||
__attribute__ ((format(printf, 1, 2)));
|
||||
extern void devfs_remove(const char *fmt, ...)
|
||||
__attribute__ ((format(printf, 1, 2)));
|
||||
extern int devfs_register_tape(const char *name);
|
||||
extern void devfs_unregister_tape(int num);
|
||||
extern void mount_devfs_fs(void);
|
||||
#else /* CONFIG_DEVFS_FS */
|
||||
static inline int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int devfs_mk_symlink(const char *name, const char *link)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int devfs_mk_dir(const char *fmt, ...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void devfs_remove(const char *fmt, ...)
|
||||
{
|
||||
}
|
||||
static inline int devfs_register_tape(const char *name)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
static inline void devfs_unregister_tape(int num)
|
||||
{
|
||||
}
|
||||
static inline void mount_devfs_fs(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_DEVFS_FS */
|
||||
#endif /* _LINUX_DEVFS_FS_KERNEL_H */
|
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
#ifndef DMAENGINE_H
|
||||
#define DMAENGINE_H
|
||||
#include <linux/config.h>
|
||||
|
||||
#ifdef CONFIG_DMA_ENGINE
|
||||
|
||||
#include <linux/device.h>
|
||||
|
@@ -38,7 +38,7 @@ struct statfs;
|
||||
|
||||
extern struct inode_operations efs_dir_inode_operations;
|
||||
extern const struct file_operations efs_dir_operations;
|
||||
extern struct address_space_operations efs_symlink_aops;
|
||||
extern const struct address_space_operations efs_symlink_aops;
|
||||
|
||||
extern void efs_read_inode(struct inode *);
|
||||
extern efs_block_t efs_map_block(struct inode *, efs_block_t);
|
||||
|
@@ -11,7 +11,12 @@
|
||||
#define EM_486 6 /* Perhaps disused */
|
||||
#define EM_860 7
|
||||
#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
|
||||
/* Next two are historical and binaries and
|
||||
modules of these types will be rejected by
|
||||
Linux. */
|
||||
#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
|
||||
#define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
|
||||
|
||||
#define EM_PARISC 15 /* HPPA */
|
||||
#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
|
||||
#define EM_PPC 20 /* PowerPC */
|
||||
|
@@ -380,7 +380,6 @@ struct fb_cursor {
|
||||
#include <linux/tty.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/devfs_fs_kernel.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/list.h>
|
||||
#include <asm/io.h>
|
||||
|
@@ -392,7 +392,7 @@ struct address_space {
|
||||
unsigned int truncate_count; /* Cover race condition with truncate */
|
||||
unsigned long nrpages; /* number of total pages */
|
||||
pgoff_t writeback_index;/* writeback starts here */
|
||||
struct address_space_operations *a_ops; /* methods */
|
||||
const struct address_space_operations *a_ops; /* methods */
|
||||
unsigned long flags; /* error bits/gfp mask */
|
||||
struct backing_dev_info *backing_dev_info; /* device readahead, etc */
|
||||
spinlock_t private_lock; /* for use by the address_space */
|
||||
@@ -1405,7 +1405,7 @@ extern void bd_forget(struct inode *inode);
|
||||
extern void bdput(struct block_device *);
|
||||
extern struct block_device *open_by_devnum(dev_t, unsigned);
|
||||
extern const struct file_operations def_blk_fops;
|
||||
extern struct address_space_operations def_blk_aops;
|
||||
extern const struct address_space_operations def_blk_aops;
|
||||
extern const struct file_operations def_chr_fops;
|
||||
extern const struct file_operations bad_sock_fops;
|
||||
extern const struct file_operations def_fifo_fops;
|
||||
|
@@ -12,6 +12,9 @@
|
||||
#define FUTEX_REQUEUE 3
|
||||
#define FUTEX_CMP_REQUEUE 4
|
||||
#define FUTEX_WAKE_OP 5
|
||||
#define FUTEX_LOCK_PI 6
|
||||
#define FUTEX_UNLOCK_PI 7
|
||||
#define FUTEX_TRYLOCK_PI 8
|
||||
|
||||
/*
|
||||
* Support for robust futexes: the kernel cleans up held futexes at
|
||||
@@ -90,18 +93,21 @@ struct robust_list_head {
|
||||
*/
|
||||
#define ROBUST_LIST_LIMIT 2048
|
||||
|
||||
long do_futex(unsigned long uaddr, int op, int val,
|
||||
unsigned long timeout, unsigned long uaddr2, int val2,
|
||||
int val3);
|
||||
long do_futex(u32 __user *uaddr, int op, u32 val, unsigned long timeout,
|
||||
u32 __user *uaddr2, u32 val2, u32 val3);
|
||||
|
||||
extern int handle_futex_death(u32 __user *uaddr, struct task_struct *curr);
|
||||
|
||||
#ifdef CONFIG_FUTEX
|
||||
extern void exit_robust_list(struct task_struct *curr);
|
||||
extern void exit_pi_state_list(struct task_struct *curr);
|
||||
#else
|
||||
static inline void exit_robust_list(struct task_struct *curr)
|
||||
{
|
||||
}
|
||||
static inline void exit_pi_state_list(struct task_struct *curr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */
|
||||
|
@@ -112,8 +112,6 @@ struct gendisk {
|
||||
sector_t capacity;
|
||||
|
||||
int flags;
|
||||
char devfs_name[64]; /* devfs crap */
|
||||
int number; /* more of the same */
|
||||
struct device *driverfs_dev;
|
||||
struct kobject kobj;
|
||||
struct kobject *holder_dir;
|
||||
|
@@ -552,7 +552,6 @@ typedef struct ide_drive_s {
|
||||
struct hd_driveid *id; /* drive model identification info */
|
||||
struct proc_dir_entry *proc; /* /proc/ide/ directory entry */
|
||||
struct ide_settings_s *settings;/* /proc/ide/ drive settings */
|
||||
char devfs_name[64]; /* devfs crap */
|
||||
|
||||
struct hwif_s *hwif; /* actually (ide_hwif_t *) */
|
||||
|
||||
@@ -793,6 +792,7 @@ typedef struct hwif_s {
|
||||
unsigned auto_poll : 1; /* supports nop auto-poll */
|
||||
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
|
||||
unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
|
||||
unsigned err_stops_fifo : 1; /* 1=data FIFO is cleared by an error */
|
||||
|
||||
struct device gendev;
|
||||
struct completion gendev_rel_comp; /* To deal with device release() */
|
||||
|
@@ -87,6 +87,7 @@ extern struct group_info init_groups;
|
||||
.lock_depth = -1, \
|
||||
.prio = MAX_PRIO-20, \
|
||||
.static_prio = MAX_PRIO-20, \
|
||||
.normal_prio = MAX_PRIO-20, \
|
||||
.policy = SCHED_NORMAL, \
|
||||
.cpus_allowed = CPU_MASK_ALL, \
|
||||
.mm = NULL, \
|
||||
@@ -122,6 +123,8 @@ extern struct group_info init_groups;
|
||||
.journal_info = NULL, \
|
||||
.cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \
|
||||
.fs_excl = ATOMIC_INIT(0), \
|
||||
.pi_lock = SPIN_LOCK_UNLOCKED, \
|
||||
INIT_RT_MUTEXES(tsk) \
|
||||
}
|
||||
|
||||
|
||||
|
@@ -36,6 +36,20 @@ extern void free_irq(unsigned int, void *);
|
||||
extern void disable_irq_nosync(unsigned int irq);
|
||||
extern void disable_irq(unsigned int irq);
|
||||
extern void enable_irq(unsigned int irq);
|
||||
|
||||
/* IRQ wakeup (PM) control: */
|
||||
extern int set_irq_wake(unsigned int irq, unsigned int on);
|
||||
|
||||
static inline int enable_irq_wake(unsigned int irq)
|
||||
{
|
||||
return set_irq_wake(irq, 1);
|
||||
}
|
||||
|
||||
static inline int disable_irq_wake(unsigned int irq)
|
||||
{
|
||||
return set_irq_wake(irq, 0);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __ARCH_SET_SOFTIRQ_PENDING
|
||||
|
@@ -9,13 +9,15 @@
|
||||
#define _LINUX_IOPORT_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
/*
|
||||
* Resources are tree-like, allowing
|
||||
* nesting etc..
|
||||
*/
|
||||
struct resource {
|
||||
resource_size_t start;
|
||||
resource_size_t end;
|
||||
const char *name;
|
||||
unsigned long start, end;
|
||||
unsigned long flags;
|
||||
struct resource *parent, *sibling, *child;
|
||||
};
|
||||
@@ -96,31 +98,37 @@ extern struct resource * ____request_resource(struct resource *root, struct reso
|
||||
extern int release_resource(struct resource *new);
|
||||
extern __deprecated_for_modules int insert_resource(struct resource *parent, struct resource *new);
|
||||
extern int allocate_resource(struct resource *root, struct resource *new,
|
||||
unsigned long size,
|
||||
unsigned long min, unsigned long max,
|
||||
unsigned long align,
|
||||
resource_size_t size, resource_size_t min,
|
||||
resource_size_t max, resource_size_t align,
|
||||
void (*alignf)(void *, struct resource *,
|
||||
unsigned long, unsigned long),
|
||||
resource_size_t, resource_size_t),
|
||||
void *alignf_data);
|
||||
int adjust_resource(struct resource *res, unsigned long start,
|
||||
unsigned long size);
|
||||
int adjust_resource(struct resource *res, resource_size_t start,
|
||||
resource_size_t size);
|
||||
|
||||
/* get registered SYSTEM_RAM resources in specified area */
|
||||
extern int find_next_system_ram(struct resource *res);
|
||||
|
||||
/* Convenience shorthand with allocation */
|
||||
#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name))
|
||||
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
|
||||
#define rename_region(region, newname) do { (region)->name = (newname); } while (0)
|
||||
|
||||
extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name);
|
||||
extern struct resource * __request_region(struct resource *,
|
||||
resource_size_t start,
|
||||
resource_size_t n, const char *name);
|
||||
|
||||
/* Compatibility cruft */
|
||||
#define release_region(start,n) __release_region(&ioport_resource, (start), (n))
|
||||
#define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n))
|
||||
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
|
||||
|
||||
extern int __check_region(struct resource *, unsigned long, unsigned long);
|
||||
extern void __release_region(struct resource *, unsigned long, unsigned long);
|
||||
extern int __check_region(struct resource *, resource_size_t, resource_size_t);
|
||||
extern void __release_region(struct resource *, resource_size_t,
|
||||
resource_size_t);
|
||||
|
||||
static inline int __deprecated check_region(unsigned long s, unsigned long n)
|
||||
static inline int __deprecated check_region(resource_size_t s,
|
||||
resource_size_t n)
|
||||
{
|
||||
return __check_region(&ioport_resource, s, n);
|
||||
}
|
||||
|
@@ -210,11 +210,7 @@ struct kernel_ipmi_msg
|
||||
#include <linux/list.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
#include <linux/proc_fs.h>
|
||||
extern struct proc_dir_entry *proc_ipmi_root;
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
|
||||
/* Opaque type for a IPMI message user. One of these is needed to
|
||||
send and receive messages. */
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#ifndef __irq_h
|
||||
#define __irq_h
|
||||
#ifndef _LINUX_IRQ_H
|
||||
#define _LINUX_IRQ_H
|
||||
|
||||
/*
|
||||
* Please do not include this file in generic code. There is currently
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
#include <linux/smp.h>
|
||||
|
||||
#if !defined(CONFIG_S390)
|
||||
#ifndef CONFIG_S390
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/cache.h>
|
||||
@@ -33,75 +33,160 @@
|
||||
#define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */
|
||||
#define IRQ_LEVEL 64 /* IRQ level triggered */
|
||||
#define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */
|
||||
#if defined(ARCH_HAS_IRQ_PER_CPU)
|
||||
#ifdef CONFIG_IRQ_PER_CPU
|
||||
# define IRQ_PER_CPU 256 /* IRQ is per CPU */
|
||||
# define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU)
|
||||
#else
|
||||
# define CHECK_IRQ_PER_CPU(var) 0
|
||||
#endif
|
||||
|
||||
#define IRQ_NOPROBE 512 /* IRQ is not valid for probing */
|
||||
#define IRQ_NOREQUEST 1024 /* IRQ cannot be requested */
|
||||
#define IRQ_NOAUTOEN 2048 /* IRQ will not be enabled on request irq */
|
||||
#define IRQ_DELAYED_DISABLE \
|
||||
4096 /* IRQ disable (masking) happens delayed. */
|
||||
|
||||
/*
|
||||
* Interrupt controller descriptor. This is all we need
|
||||
* to describe about the low-level hardware.
|
||||
* IRQ types, see also include/linux/interrupt.h
|
||||
*/
|
||||
struct hw_interrupt_type {
|
||||
const char * typename;
|
||||
unsigned int (*startup)(unsigned int irq);
|
||||
void (*shutdown)(unsigned int irq);
|
||||
void (*enable)(unsigned int irq);
|
||||
void (*disable)(unsigned int irq);
|
||||
void (*ack)(unsigned int irq);
|
||||
void (*end)(unsigned int irq);
|
||||
void (*set_affinity)(unsigned int irq, cpumask_t dest);
|
||||
#define IRQ_TYPE_NONE 0x0000 /* Default, unspecified type */
|
||||
#define IRQ_TYPE_EDGE_RISING 0x0001 /* Edge rising type */
|
||||
#define IRQ_TYPE_EDGE_FALLING 0x0002 /* Edge falling type */
|
||||
#define IRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)
|
||||
#define IRQ_TYPE_LEVEL_HIGH 0x0004 /* Level high type */
|
||||
#define IRQ_TYPE_LEVEL_LOW 0x0008 /* Level low type */
|
||||
#define IRQ_TYPE_SENSE_MASK 0x000f /* Mask of the above */
|
||||
#define IRQ_TYPE_SIMPLE 0x0010 /* Simple type */
|
||||
#define IRQ_TYPE_PERCPU 0x0020 /* Per CPU type */
|
||||
#define IRQ_TYPE_PROBE 0x0040 /* Probing in progress */
|
||||
|
||||
struct proc_dir_entry;
|
||||
|
||||
/**
|
||||
* struct irq_chip - hardware interrupt chip descriptor
|
||||
*
|
||||
* @name: name for /proc/interrupts
|
||||
* @startup: start up the interrupt (defaults to ->enable if NULL)
|
||||
* @shutdown: shut down the interrupt (defaults to ->disable if NULL)
|
||||
* @enable: enable the interrupt (defaults to chip->unmask if NULL)
|
||||
* @disable: disable the interrupt (defaults to chip->mask if NULL)
|
||||
* @ack: start of a new interrupt
|
||||
* @mask: mask an interrupt source
|
||||
* @mask_ack: ack and mask an interrupt source
|
||||
* @unmask: unmask an interrupt source
|
||||
* @eoi: end of interrupt - chip level
|
||||
* @end: end of interrupt - flow level
|
||||
* @set_affinity: set the CPU affinity on SMP machines
|
||||
* @retrigger: resend an IRQ to the CPU
|
||||
* @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ
|
||||
* @set_wake: enable/disable power-management wake-on of an IRQ
|
||||
*
|
||||
* @release: release function solely used by UML
|
||||
* @typename: obsoleted by name, kept as migration helper
|
||||
*/
|
||||
struct irq_chip {
|
||||
const char *name;
|
||||
unsigned int (*startup)(unsigned int irq);
|
||||
void (*shutdown)(unsigned int irq);
|
||||
void (*enable)(unsigned int irq);
|
||||
void (*disable)(unsigned int irq);
|
||||
|
||||
void (*ack)(unsigned int irq);
|
||||
void (*mask)(unsigned int irq);
|
||||
void (*mask_ack)(unsigned int irq);
|
||||
void (*unmask)(unsigned int irq);
|
||||
void (*eoi)(unsigned int irq);
|
||||
|
||||
void (*end)(unsigned int irq);
|
||||
void (*set_affinity)(unsigned int irq, cpumask_t dest);
|
||||
int (*retrigger)(unsigned int irq);
|
||||
int (*set_type)(unsigned int irq, unsigned int flow_type);
|
||||
int (*set_wake)(unsigned int irq, unsigned int on);
|
||||
|
||||
/* Currently used only by UML, might disappear one day.*/
|
||||
#ifdef CONFIG_IRQ_RELEASE_METHOD
|
||||
void (*release)(unsigned int irq, void *dev_id);
|
||||
void (*release)(unsigned int irq, void *dev_id);
|
||||
#endif
|
||||
/*
|
||||
* For compatibility, ->typename is copied into ->name.
|
||||
* Will disappear.
|
||||
*/
|
||||
const char *typename;
|
||||
};
|
||||
|
||||
typedef struct hw_interrupt_type hw_irq_controller;
|
||||
|
||||
/*
|
||||
* This is the "IRQ descriptor", which contains various information
|
||||
* about the irq, including what kind of hardware handling it has,
|
||||
* whether it is disabled etc etc.
|
||||
/**
|
||||
* struct irq_desc - interrupt descriptor
|
||||
*
|
||||
* @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()]
|
||||
* @chip: low level interrupt hardware access
|
||||
* @handler_data: per-IRQ data for the irq_chip methods
|
||||
* @chip_data: platform-specific per-chip private data for the chip
|
||||
* methods, to allow shared chip implementations
|
||||
* @action: the irq action chain
|
||||
* @status: status information
|
||||
* @depth: disable-depth, for nested irq_disable() calls
|
||||
* @irq_count: stats field to detect stalled irqs
|
||||
* @irqs_unhandled: stats field for spurious unhandled interrupts
|
||||
* @lock: locking for SMP
|
||||
* @affinity: IRQ affinity on SMP
|
||||
* @cpu: cpu index useful for balancing
|
||||
* @pending_mask: pending rebalanced interrupts
|
||||
* @move_irq: need to re-target IRQ destination
|
||||
* @dir: /proc/irq/ procfs entry
|
||||
* @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP
|
||||
*
|
||||
* Pad this out to 32 bytes for cache and indexing reasons.
|
||||
*/
|
||||
typedef struct irq_desc {
|
||||
hw_irq_controller *handler;
|
||||
void *handler_data;
|
||||
struct irqaction *action; /* IRQ action list */
|
||||
unsigned int status; /* IRQ status */
|
||||
unsigned int depth; /* nested irq disables */
|
||||
unsigned int irq_count; /* For detecting broken interrupts */
|
||||
unsigned int irqs_unhandled;
|
||||
spinlock_t lock;
|
||||
#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
|
||||
unsigned int move_irq; /* Flag need to re-target intr dest*/
|
||||
struct irq_desc {
|
||||
void fastcall (*handle_irq)(unsigned int irq,
|
||||
struct irq_desc *desc,
|
||||
struct pt_regs *regs);
|
||||
struct irq_chip *chip;
|
||||
void *handler_data;
|
||||
void *chip_data;
|
||||
struct irqaction *action; /* IRQ action list */
|
||||
unsigned int status; /* IRQ status */
|
||||
|
||||
unsigned int depth; /* nested irq disables */
|
||||
unsigned int irq_count; /* For detecting broken IRQs */
|
||||
unsigned int irqs_unhandled;
|
||||
spinlock_t lock;
|
||||
#ifdef CONFIG_SMP
|
||||
cpumask_t affinity;
|
||||
unsigned int cpu;
|
||||
#endif
|
||||
} ____cacheline_aligned irq_desc_t;
|
||||
#if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)
|
||||
cpumask_t pending_mask;
|
||||
unsigned int move_irq; /* need to re-target IRQ dest */
|
||||
#endif
|
||||
#ifdef CONFIG_PROC_FS
|
||||
struct proc_dir_entry *dir;
|
||||
#endif
|
||||
} ____cacheline_aligned;
|
||||
|
||||
extern irq_desc_t irq_desc [NR_IRQS];
|
||||
extern struct irq_desc irq_desc[NR_IRQS];
|
||||
|
||||
/* Return a pointer to the irq descriptor for IRQ. */
|
||||
static inline irq_desc_t *
|
||||
irq_descp (int irq)
|
||||
{
|
||||
return irq_desc + irq;
|
||||
}
|
||||
/*
|
||||
* Migration helpers for obsolete names, they will go away:
|
||||
*/
|
||||
#define hw_interrupt_type irq_chip
|
||||
typedef struct irq_chip hw_irq_controller;
|
||||
#define no_irq_type no_irq_chip
|
||||
typedef struct irq_desc irq_desc_t;
|
||||
|
||||
#include <asm/hw_irq.h> /* the arch dependent stuff */
|
||||
/*
|
||||
* Pick up the arch-dependent methods:
|
||||
*/
|
||||
#include <asm/hw_irq.h>
|
||||
|
||||
extern int setup_irq(unsigned int irq, struct irqaction * new);
|
||||
extern int setup_irq(unsigned int irq, struct irqaction *new);
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
extern cpumask_t irq_affinity[NR_IRQS];
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
irq_affinity[irq] = mask;
|
||||
irq_desc[irq].affinity = mask;
|
||||
}
|
||||
#else
|
||||
static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
@@ -111,8 +196,7 @@ static inline void set_native_irq_info(int irq, cpumask_t mask)
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
|
||||
extern cpumask_t pending_irq_cpumask[NR_IRQS];
|
||||
#if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)
|
||||
|
||||
void set_pending_irq(unsigned int irq, cpumask_t mask);
|
||||
void move_native_irq(int irq);
|
||||
@@ -133,7 +217,7 @@ static inline void set_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
}
|
||||
|
||||
#else // CONFIG_PCI_MSI
|
||||
#else /* CONFIG_PCI_MSI */
|
||||
|
||||
static inline void move_irq(int irq)
|
||||
{
|
||||
@@ -144,26 +228,36 @@ static inline void set_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
set_native_irq_info(irq, mask);
|
||||
}
|
||||
#endif // CONFIG_PCI_MSI
|
||||
|
||||
#else // CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE
|
||||
#endif /* CONFIG_PCI_MSI */
|
||||
|
||||
#else /* CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE */
|
||||
|
||||
static inline void move_irq(int irq)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void move_native_irq(int irq)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void set_pending_irq(unsigned int irq, cpumask_t mask)
|
||||
{
|
||||
}
|
||||
|
||||
#define move_irq(x)
|
||||
#define move_native_irq(x)
|
||||
#define set_pending_irq(x,y)
|
||||
static inline void set_irq_info(int irq, cpumask_t mask)
|
||||
{
|
||||
set_native_irq_info(irq, mask);
|
||||
}
|
||||
|
||||
#endif // CONFIG_GENERIC_PENDING_IRQ
|
||||
#endif /* CONFIG_GENERIC_PENDING_IRQ */
|
||||
|
||||
#else // CONFIG_SMP
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
#define move_irq(x)
|
||||
#define move_native_irq(x)
|
||||
|
||||
#endif // CONFIG_SMP
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#ifdef CONFIG_IRQBALANCE
|
||||
extern void set_balance_irq_affinity(unsigned int irq, cpumask_t mask);
|
||||
@@ -173,32 +267,138 @@ static inline void set_balance_irq_affinity(unsigned int irq, cpumask_t mask)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int no_irq_affinity;
|
||||
extern int noirqdebug_setup(char *str);
|
||||
|
||||
extern fastcall irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs,
|
||||
struct irqaction *action);
|
||||
extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
|
||||
extern void note_interrupt(unsigned int irq, irq_desc_t *desc,
|
||||
int action_ret, struct pt_regs *regs);
|
||||
extern int can_request_irq(unsigned int irq, unsigned long irqflags);
|
||||
|
||||
extern void init_irq_proc(void);
|
||||
|
||||
#ifdef CONFIG_AUTO_IRQ_AFFINITY
|
||||
extern int select_smp_affinity(unsigned int irq);
|
||||
#else
|
||||
static inline int
|
||||
select_smp_affinity(unsigned int irq)
|
||||
static inline int select_smp_affinity(unsigned int irq)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
extern int no_irq_affinity;
|
||||
|
||||
extern hw_irq_controller no_irq_type; /* needed in every arch ? */
|
||||
/* Handle irq action chains: */
|
||||
extern int handle_IRQ_event(unsigned int irq, struct pt_regs *regs,
|
||||
struct irqaction *action);
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Built-in IRQ handlers for various IRQ types,
|
||||
* callable via desc->chip->handle_irq()
|
||||
*/
|
||||
extern void fastcall
|
||||
handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs);
|
||||
extern void fastcall
|
||||
handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc,
|
||||
struct pt_regs *regs);
|
||||
extern void fastcall
|
||||
handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs);
|
||||
extern void fastcall
|
||||
handle_simple_irq(unsigned int irq, struct irq_desc *desc,
|
||||
struct pt_regs *regs);
|
||||
extern void fastcall
|
||||
handle_percpu_irq(unsigned int irq, struct irq_desc *desc,
|
||||
struct pt_regs *regs);
|
||||
extern void fastcall
|
||||
handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs);
|
||||
|
||||
#endif /* __irq_h */
|
||||
/*
|
||||
* Get a descriptive string for the highlevel handler, for
|
||||
* /proc/interrupts output:
|
||||
*/
|
||||
extern const char *
|
||||
handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *,
|
||||
struct pt_regs *));
|
||||
|
||||
/*
|
||||
* Monolithic do_IRQ implementation.
|
||||
* (is an explicit fastcall, because i386 4KSTACKS calls it from assembly)
|
||||
*/
|
||||
extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
|
||||
|
||||
/*
|
||||
* Architectures call this to let the generic IRQ layer
|
||||
* handle an interrupt. If the descriptor is attached to an
|
||||
* irqchip-style controller then we call the ->handle_irq() handler,
|
||||
* and it calls __do_IRQ() if it's attached to an irqtype-style controller.
|
||||
*/
|
||||
static inline void generic_handle_irq(unsigned int irq, struct pt_regs *regs)
|
||||
{
|
||||
struct irq_desc *desc = irq_desc + irq;
|
||||
|
||||
if (likely(desc->handle_irq))
|
||||
desc->handle_irq(irq, desc, regs);
|
||||
else
|
||||
__do_IRQ(irq, regs);
|
||||
}
|
||||
|
||||
/* Handling of unhandled and spurious interrupts: */
|
||||
extern void note_interrupt(unsigned int irq, struct irq_desc *desc,
|
||||
int action_ret, struct pt_regs *regs);
|
||||
|
||||
/* Resending of interrupts :*/
|
||||
void check_irq_resend(struct irq_desc *desc, unsigned int irq);
|
||||
|
||||
/* Initialize /proc/irq/ */
|
||||
extern void init_irq_proc(void);
|
||||
|
||||
/* Enable/disable irq debugging output: */
|
||||
extern int noirqdebug_setup(char *str);
|
||||
|
||||
/* Checks whether the interrupt can be requested by request_irq(): */
|
||||
extern int can_request_irq(unsigned int irq, unsigned long irqflags);
|
||||
|
||||
/* Dummy irq-chip implementation: */
|
||||
extern struct irq_chip no_irq_chip;
|
||||
|
||||
extern void
|
||||
set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
|
||||
void fastcall (*handle)(unsigned int,
|
||||
struct irq_desc *,
|
||||
struct pt_regs *));
|
||||
extern void
|
||||
__set_irq_handler(unsigned int irq,
|
||||
void fastcall (*handle)(unsigned int, struct irq_desc *,
|
||||
struct pt_regs *),
|
||||
int is_chained);
|
||||
|
||||
/*
|
||||
* Set a highlevel flow handler for a given IRQ:
|
||||
*/
|
||||
static inline void
|
||||
set_irq_handler(unsigned int irq,
|
||||
void fastcall (*handle)(unsigned int, struct irq_desc *,
|
||||
struct pt_regs *))
|
||||
{
|
||||
__set_irq_handler(irq, handle, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set a highlevel chained flow handler for a given IRQ.
|
||||
* (a chained handler is automatically enabled and set to
|
||||
* IRQ_NOREQUEST and IRQ_NOPROBE)
|
||||
*/
|
||||
static inline void
|
||||
set_irq_chained_handler(unsigned int irq,
|
||||
void fastcall (*handle)(unsigned int, struct irq_desc *,
|
||||
struct pt_regs *))
|
||||
{
|
||||
__set_irq_handler(irq, handle, 1);
|
||||
}
|
||||
|
||||
/* Set/get chip/data for an IRQ: */
|
||||
|
||||
extern int set_irq_chip(unsigned int irq, struct irq_chip *chip);
|
||||
extern int set_irq_data(unsigned int irq, void *data);
|
||||
extern int set_irq_chip_data(unsigned int irq, void *data);
|
||||
extern int set_irq_type(unsigned int irq, unsigned int type);
|
||||
|
||||
#define get_irq_chip(irq) (irq_desc[irq].chip)
|
||||
#define get_irq_chip_data(irq) (irq_desc[irq].chip_data)
|
||||
#define get_irq_data(irq) (irq_desc[irq].handler_data)
|
||||
|
||||
#endif /* CONFIG_GENERIC_HARDIRQS */
|
||||
|
||||
#endif /* !CONFIG_S390 */
|
||||
|
||||
#endif /* _LINUX_IRQ_H */
|
||||
|
@@ -1,55 +0,0 @@
|
||||
/* $Id: tpam.h,v 1.1.2.1 2001/06/08 08:23:46 kai Exp $
|
||||
*
|
||||
* Turbo PAM ISDN driver for Linux. (Kernel Driver)
|
||||
*
|
||||
* Copyright 2001 Stelian Pop <stelian.pop@fr.alcove.com>, Alc<6C>ve
|
||||
*
|
||||
* For all support questions please contact: <support@auvertech.fr>
|
||||
*
|
||||
* 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _TPAM_H_
|
||||
#define _TPAM_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* IOCTL commands */
|
||||
#define TPAM_CMD_DSPLOAD 0x0001
|
||||
#define TPAM_CMD_DSPSAVE 0x0002
|
||||
#define TPAM_CMD_DSPRUN 0x0003
|
||||
#define TPAM_CMD_LOOPMODEON 0x0004
|
||||
#define TPAM_CMD_LOOPMODEOFF 0x0005
|
||||
|
||||
/* addresses of debug information zones on board */
|
||||
#define TPAM_TRAPAUDIT_REGISTER 0x005493e4
|
||||
#define TPAM_NCOAUDIT_REGISTER 0x00500000
|
||||
#define TPAM_MSGAUDIT_REGISTER 0x008E30F0
|
||||
|
||||
/* length of debug information zones on board */
|
||||
#define TPAM_TRAPAUDIT_LENGTH 10000
|
||||
#define TPAM_NCOAUDIT_LENGTH 300000
|
||||
#define TPAM_NCOAUDIT_COUNT 30
|
||||
#define TPAM_MSGAUDIT_LENGTH 60000
|
||||
|
||||
/* IOCTL load/save parameter */
|
||||
typedef struct tpam_dsp_ioctl {
|
||||
__u32 address; /* address to load/save data */
|
||||
__u32 data_len; /* size of data to be loaded/saved */
|
||||
__u8 data[0]; /* data */
|
||||
} tpam_dsp_ioctl;
|
||||
|
||||
#endif /* _TPAM_H_ */
|
@@ -186,6 +186,7 @@ struct jffs2_raw_xref
|
||||
jint32_t hdr_crc;
|
||||
jint32_t ino; /* inode number */
|
||||
jint32_t xid; /* XATTR identifier number */
|
||||
jint32_t xseqno; /* xref sequencial number */
|
||||
jint32_t node_crc;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
@@ -155,10 +155,8 @@ static inline void con_schedule_flip(struct tty_struct *t)
|
||||
{
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&t->buf.lock, flags);
|
||||
if (t->buf.tail != NULL) {
|
||||
t->buf.tail->active = 0;
|
||||
if (t->buf.tail != NULL)
|
||||
t->buf.tail->commit = t->buf.tail->used;
|
||||
}
|
||||
spin_unlock_irqrestore(&t->buf.lock, flags);
|
||||
schedule_work(&t->buf.work);
|
||||
}
|
||||
|
@@ -177,7 +177,8 @@ struct key {
|
||||
/*
|
||||
* kernel managed key type definition
|
||||
*/
|
||||
typedef int (*request_key_actor_t)(struct key *key, struct key *authkey, const char *op);
|
||||
typedef int (*request_key_actor_t)(struct key *key, struct key *authkey,
|
||||
const char *op, void *aux);
|
||||
|
||||
struct key_type {
|
||||
/* name of the type */
|
||||
@@ -285,6 +286,11 @@ extern struct key *request_key(struct key_type *type,
|
||||
const char *description,
|
||||
const char *callout_info);
|
||||
|
||||
extern struct key *request_key_with_auxdata(struct key_type *type,
|
||||
const char *description,
|
||||
const char *callout_info,
|
||||
void *aux);
|
||||
|
||||
extern int key_validate(struct key *key);
|
||||
|
||||
extern key_ref_t key_create_or_update(key_ref_t keyring,
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <asm/scatterlist.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/ata.h>
|
||||
#include <linux/workqueue.h>
|
||||
@@ -887,6 +888,9 @@ static inline unsigned int ata_tag_internal(unsigned int tag)
|
||||
return tag == ATA_MAX_QUEUE - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* device helpers
|
||||
*/
|
||||
static inline unsigned int ata_class_enabled(unsigned int class)
|
||||
{
|
||||
return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI;
|
||||
@@ -917,6 +921,17 @@ static inline unsigned int ata_dev_absent(const struct ata_device *dev)
|
||||
return ata_class_absent(dev->class);
|
||||
}
|
||||
|
||||
/*
|
||||
* port helpers
|
||||
*/
|
||||
static inline int ata_port_max_devices(const struct ata_port *ap)
|
||||
{
|
||||
if (ap->flags & ATA_FLAG_SLAVE_POSS)
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static inline u8 ata_chk_status(struct ata_port *ap)
|
||||
{
|
||||
return ap->ops->check_status(ap);
|
||||
|
@@ -4,17 +4,10 @@
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/poison.h>
|
||||
#include <linux/prefetch.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/*
|
||||
* These are non-NULL pointers that will result in page faults
|
||||
* under normal circumstances, used to verify that nobody uses
|
||||
* non-initialized list entries.
|
||||
*/
|
||||
#define LIST_POISON1 ((void *) 0x00100100)
|
||||
#define LIST_POISON2 ((void *) 0x00200200)
|
||||
|
||||
/*
|
||||
* Simple doubly linked list implementation.
|
||||
*
|
||||
|
@@ -63,6 +63,76 @@ extern int online_pages(unsigned long, unsigned long);
|
||||
/* reasonably generic interface to expand the physical pages in a zone */
|
||||
extern int __add_pages(struct zone *zone, unsigned long start_pfn,
|
||||
unsigned long nr_pages);
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
extern int memory_add_physaddr_to_nid(u64 start);
|
||||
#else
|
||||
static inline int memory_add_physaddr_to_nid(u64 start)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_NODEDATA_EXTENSION
|
||||
/*
|
||||
* For supporting node-hotadd, we have to allocate a new pgdat.
|
||||
*
|
||||
* If an arch has generic style NODE_DATA(),
|
||||
* node_data[nid] = kzalloc() works well. But it depends on the architecture.
|
||||
*
|
||||
* In general, generic_alloc_nodedata() is used.
|
||||
* Now, arch_free_nodedata() is just defined for error path of node_hot_add.
|
||||
*
|
||||
*/
|
||||
extern pg_data_t *arch_alloc_nodedata(int nid);
|
||||
extern void arch_free_nodedata(pg_data_t *pgdat);
|
||||
extern void arch_refresh_nodedata(int nid, pg_data_t *pgdat);
|
||||
|
||||
#else /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */
|
||||
|
||||
#define arch_alloc_nodedata(nid) generic_alloc_nodedata(nid)
|
||||
#define arch_free_nodedata(pgdat) generic_free_nodedata(pgdat)
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
/*
|
||||
* If ARCH_HAS_NODEDATA_EXTENSION=n, this func is used to allocate pgdat.
|
||||
* XXX: kmalloc_node() can't work well to get new node's memory at this time.
|
||||
* Because, pgdat for the new node is not allocated/initialized yet itself.
|
||||
* To use new node's memory, more consideration will be necessary.
|
||||
*/
|
||||
#define generic_alloc_nodedata(nid) \
|
||||
({ \
|
||||
kzalloc(sizeof(pg_data_t), GFP_KERNEL); \
|
||||
})
|
||||
/*
|
||||
* This definition is just for error path in node hotadd.
|
||||
* For node hotremove, we have to replace this.
|
||||
*/
|
||||
#define generic_free_nodedata(pgdat) kfree(pgdat)
|
||||
|
||||
extern pg_data_t *node_data[];
|
||||
static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat)
|
||||
{
|
||||
node_data[nid] = pgdat;
|
||||
}
|
||||
|
||||
#else /* !CONFIG_NUMA */
|
||||
|
||||
/* never called */
|
||||
static inline pg_data_t *generic_alloc_nodedata(int nid)
|
||||
{
|
||||
BUG();
|
||||
return NULL;
|
||||
}
|
||||
static inline void generic_free_nodedata(pg_data_t *pgdat)
|
||||
{
|
||||
}
|
||||
static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_NUMA */
|
||||
#endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */
|
||||
|
||||
#else /* ! CONFIG_MEMORY_HOTPLUG */
|
||||
/*
|
||||
* Stub functions for when hotplug is off
|
||||
@@ -99,7 +169,8 @@ static inline int __remove_pages(struct zone *zone, unsigned long start_pfn,
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
extern int add_memory(u64 start, u64 size);
|
||||
extern int add_memory(int nid, u64 start, u64 size);
|
||||
extern int arch_add_memory(int nid, u64 start, u64 size);
|
||||
extern int remove_memory(u64 start, u64 size);
|
||||
|
||||
#endif /* __LINUX_MEMORY_HOTPLUG_H */
|
||||
|
@@ -40,7 +40,6 @@ struct miscdevice {
|
||||
struct list_head list;
|
||||
struct device *dev;
|
||||
struct class_device *class;
|
||||
char devfs_name[64];
|
||||
};
|
||||
|
||||
extern int misc_register(struct miscdevice * misc);
|
||||
|
@@ -1030,13 +1030,20 @@ static inline void vm_stat_account(struct mm_struct *mm,
|
||||
}
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
|
||||
static inline void
|
||||
debug_check_no_locks_freed(const void *from, unsigned long len)
|
||||
{
|
||||
mutex_debug_check_no_locks_freed(from, len);
|
||||
rt_mutex_debug_check_no_locks_freed(from, len);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_DEBUG_PAGEALLOC
|
||||
static inline void
|
||||
kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
if (!PageHighMem(page) && !enable)
|
||||
mutex_debug_check_no_locks_freed(page_address(page),
|
||||
numpages * PAGE_SIZE);
|
||||
debug_check_no_locks_freed(page_address(page),
|
||||
numpages * PAGE_SIZE);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1065,5 +1072,7 @@ void drop_slab(void);
|
||||
extern int randomize_va_space;
|
||||
#endif
|
||||
|
||||
const char *arch_vma_name(struct vm_area_struct *vma);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_MM_H */
|
||||
|
@@ -203,6 +203,15 @@ void *__symbol_get_gpl(const char *symbol);
|
||||
#define EXPORT_SYMBOL_GPL_FUTURE(sym) \
|
||||
__EXPORT_SYMBOL(sym, "_gpl_future")
|
||||
|
||||
|
||||
#ifdef CONFIG_UNUSED_SYMBOLS
|
||||
#define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused")
|
||||
#define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl")
|
||||
#else
|
||||
#define EXPORT_UNUSED_SYMBOL(sym)
|
||||
#define EXPORT_UNUSED_SYMBOL_GPL(sym)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
struct module_ref
|
||||
@@ -261,6 +270,15 @@ struct module
|
||||
unsigned int num_gpl_syms;
|
||||
const unsigned long *gpl_crcs;
|
||||
|
||||
/* unused exported symbols. */
|
||||
const struct kernel_symbol *unused_syms;
|
||||
unsigned int num_unused_syms;
|
||||
const unsigned long *unused_crcs;
|
||||
/* GPL-only, unused exported symbols. */
|
||||
const struct kernel_symbol *unused_gpl_syms;
|
||||
unsigned int num_unused_gpl_syms;
|
||||
const unsigned long *unused_gpl_crcs;
|
||||
|
||||
/* symbols that will be GPL-only in the near future. */
|
||||
const struct kernel_symbol *gpl_future_syms;
|
||||
unsigned int num_gpl_future_syms;
|
||||
@@ -456,6 +474,8 @@ void module_remove_driver(struct device_driver *);
|
||||
#define EXPORT_SYMBOL(sym)
|
||||
#define EXPORT_SYMBOL_GPL(sym)
|
||||
#define EXPORT_SYMBOL_GPL_FUTURE(sym)
|
||||
#define EXPORT_UNUSED_SYMBOL(sym)
|
||||
#define EXPORT_UNUSED_SYMBOL_GPL(sym)
|
||||
|
||||
/* Given an address, look for it in the exception tables. */
|
||||
static inline const struct exception_table_entry *
|
||||
|
@@ -335,7 +335,7 @@ extern struct inode_operations nfs_file_inode_operations;
|
||||
extern struct inode_operations nfs3_file_inode_operations;
|
||||
#endif /* CONFIG_NFS_V3 */
|
||||
extern const struct file_operations nfs_file_operations;
|
||||
extern struct address_space_operations nfs_file_aops;
|
||||
extern const struct address_space_operations nfs_file_aops;
|
||||
|
||||
static inline struct rpc_cred *nfs_file_cred(struct file *file)
|
||||
{
|
||||
|
@@ -26,8 +26,25 @@ struct node {
|
||||
struct sys_device sysdev;
|
||||
};
|
||||
|
||||
extern struct node node_devices[];
|
||||
|
||||
extern int register_node(struct node *, int, struct node *);
|
||||
extern void unregister_node(struct node *node);
|
||||
extern int register_one_node(int nid);
|
||||
extern void unregister_one_node(int nid);
|
||||
#ifdef CONFIG_NUMA
|
||||
extern int register_cpu_under_node(unsigned int cpu, unsigned int nid);
|
||||
extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
|
||||
#else
|
||||
static inline int register_cpu_under_node(unsigned int cpu, unsigned int nid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int unregister_cpu_under_node(unsigned int cpu, unsigned int nid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define to_node(sys_device) container_of(sys_device, struct node, sysdev)
|
||||
|
||||
|
42
include/linux/nsc_gpio.h
Normal file
42
include/linux/nsc_gpio.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
nsc_gpio.c
|
||||
|
||||
National Semiconductor GPIO common access methods.
|
||||
|
||||
struct nsc_gpio_ops abstracts the low-level access
|
||||
operations for the GPIO units on 2 NSC chip families; the GEODE
|
||||
integrated CPU, and the PC-8736[03456] integrated PC-peripheral
|
||||
chips.
|
||||
|
||||
The GPIO units on these chips have the same pin architecture, but
|
||||
the access methods differ. Thus, scx200_gpio and pc8736x_gpio
|
||||
implement their own versions of these routines; and use the common
|
||||
file-operations routines implemented in nsc_gpio module.
|
||||
|
||||
Copyright (c) 2005 Jim Cromie <jim.cromie@gmail.com>
|
||||
|
||||
NB: this work was tested on the Geode SC-1100 and PC-87366 chips.
|
||||
NSC sold the GEODE line to AMD, and the PC-8736x line to Winbond.
|
||||
*/
|
||||
|
||||
struct nsc_gpio_ops {
|
||||
struct module* owner;
|
||||
u32 (*gpio_config) (unsigned iminor, u32 mask, u32 bits);
|
||||
void (*gpio_dump) (struct nsc_gpio_ops *amp, unsigned iminor);
|
||||
int (*gpio_get) (unsigned iminor);
|
||||
void (*gpio_set) (unsigned iminor, int state);
|
||||
void (*gpio_set_high)(unsigned iminor);
|
||||
void (*gpio_set_low) (unsigned iminor);
|
||||
void (*gpio_change) (unsigned iminor);
|
||||
int (*gpio_current) (unsigned iminor);
|
||||
struct device* dev; /* for dev_dbg() support, set in init */
|
||||
};
|
||||
|
||||
extern ssize_t nsc_gpio_write(struct file *file, const char __user *data,
|
||||
size_t len, loff_t *ppos);
|
||||
|
||||
extern ssize_t nsc_gpio_read(struct file *file, char __user *buf,
|
||||
size_t len, loff_t *ppos);
|
||||
|
||||
extern void nsc_gpio_dump(struct nsc_gpio_ops *amp, unsigned index);
|
||||
|
@@ -404,8 +404,8 @@ int pcibios_enable_device(struct pci_dev *, int mask);
|
||||
char *pcibios_setup (char *str);
|
||||
|
||||
/* Used only when drivers/pci/setup.c is used */
|
||||
void pcibios_align_resource(void *, struct resource *,
|
||||
unsigned long, unsigned long);
|
||||
void pcibios_align_resource(void *, struct resource *, resource_size_t,
|
||||
resource_size_t);
|
||||
void pcibios_update_irq(struct pci_dev *, int irq);
|
||||
|
||||
/* Generic PCI functions used internally */
|
||||
@@ -532,10 +532,10 @@ void pci_release_region(struct pci_dev *, int);
|
||||
|
||||
/* drivers/pci/bus.c */
|
||||
int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
|
||||
unsigned long size, unsigned long align,
|
||||
unsigned long min, unsigned int type_mask,
|
||||
resource_size_t size, resource_size_t align,
|
||||
resource_size_t min, unsigned int type_mask,
|
||||
void (*alignf)(void *, struct resource *,
|
||||
unsigned long, unsigned long),
|
||||
resource_size_t, resource_size_t),
|
||||
void *alignf_data);
|
||||
void pci_enable_bridges(struct pci_bus *bus);
|
||||
|
||||
@@ -730,7 +730,8 @@ static inline char *pci_name(struct pci_dev *pdev)
|
||||
*/
|
||||
#ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER
|
||||
static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
|
||||
const struct resource *rsrc, u64 *start, u64 *end)
|
||||
const struct resource *rsrc, resource_size_t *start,
|
||||
resource_size_t *end)
|
||||
{
|
||||
*start = rsrc->start;
|
||||
*end = rsrc->end;
|
||||
|
@@ -1202,6 +1202,7 @@
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7
|
||||
#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451
|
||||
#define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452
|
||||
@@ -2170,7 +2171,6 @@
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e
|
||||
#define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850
|
||||
#define PCI_DEVICE_ID_INTEL_GD31244 0x3200
|
||||
#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340
|
||||
#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575
|
||||
#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
|
||||
|
248
include/linux/plist.h
Normal file
248
include/linux/plist.h
Normal file
@@ -0,0 +1,248 @@
|
||||
/*
|
||||
* Descending-priority-sorted double-linked list
|
||||
*
|
||||
* (C) 2002-2003 Intel Corp
|
||||
* Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>.
|
||||
*
|
||||
* 2001-2005 (c) MontaVista Software, Inc.
|
||||
* Daniel Walker <dwalker@mvista.com>
|
||||
*
|
||||
* (C) 2005 Thomas Gleixner <tglx@linutronix.de>
|
||||
*
|
||||
* Simplifications of the original code by
|
||||
* Oleg Nesterov <oleg@tv-sign.ru>
|
||||
*
|
||||
* Licensed under the FSF's GNU Public License v2 or later.
|
||||
*
|
||||
* Based on simple lists (include/linux/list.h).
|
||||
*
|
||||
* This is a priority-sorted list of nodes; each node has a
|
||||
* priority from INT_MIN (highest) to INT_MAX (lowest).
|
||||
*
|
||||
* Addition is O(K), removal is O(1), change of priority of a node is
|
||||
* O(K) and K is the number of RT priority levels used in the system.
|
||||
* (1 <= K <= 99)
|
||||
*
|
||||
* This list is really a list of lists:
|
||||
*
|
||||
* - The tier 1 list is the prio_list, different priority nodes.
|
||||
*
|
||||
* - The tier 2 list is the node_list, serialized nodes.
|
||||
*
|
||||
* Simple ASCII art explanation:
|
||||
*
|
||||
* |HEAD |
|
||||
* | |
|
||||
* |prio_list.prev|<------------------------------------|
|
||||
* |prio_list.next|<->|pl|<->|pl|<--------------->|pl|<-|
|
||||
* |10 | |10| |21| |21| |21| |40| (prio)
|
||||
* | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | |
|
||||
* |node_list.next|<->|nl|<->|nl|<->|nl|<->|nl|<->|nl|<-|
|
||||
* |node_list.prev|<------------------------------------|
|
||||
*
|
||||
* The nodes on the prio_list list are sorted by priority to simplify
|
||||
* the insertion of new nodes. There are no nodes with duplicate
|
||||
* priorites on the list.
|
||||
*
|
||||
* The nodes on the node_list is ordered by priority and can contain
|
||||
* entries which have the same priority. Those entries are ordered
|
||||
* FIFO
|
||||
*
|
||||
* Addition means: look for the prio_list node in the prio_list
|
||||
* for the priority of the node and insert it before the node_list
|
||||
* entry of the next prio_list node. If it is the first node of
|
||||
* that priority, add it to the prio_list in the right position and
|
||||
* insert it into the serialized node_list list
|
||||
*
|
||||
* Removal means remove it from the node_list and remove it from
|
||||
* the prio_list if the node_list list_head is non empty. In case
|
||||
* of removal from the prio_list it must be checked whether other
|
||||
* entries of the same priority are on the list or not. If there
|
||||
* is another entry of the same priority then this entry has to
|
||||
* replace the removed entry on the prio_list. If the entry which
|
||||
* is removed is the only entry of this priority then a simple
|
||||
* remove from both list is sufficient.
|
||||
*
|
||||
* INT_MIN is the highest priority, 0 is the medium highest, INT_MAX
|
||||
* is lowest priority.
|
||||
*
|
||||
* No locking is done, up to the caller.
|
||||
*
|
||||
*/
|
||||
#ifndef _LINUX_PLIST_H_
|
||||
#define _LINUX_PLIST_H_
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
struct plist_head {
|
||||
struct list_head prio_list;
|
||||
struct list_head node_list;
|
||||
#ifdef CONFIG_DEBUG_PI_LIST
|
||||
spinlock_t *lock;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct plist_node {
|
||||
int prio;
|
||||
struct plist_head plist;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DEBUG_PI_LIST
|
||||
# define PLIST_HEAD_LOCK_INIT(_lock) .lock = _lock
|
||||
#else
|
||||
# define PLIST_HEAD_LOCK_INIT(_lock)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* #PLIST_HEAD_INIT - static struct plist_head initializer
|
||||
*
|
||||
* @head: struct plist_head variable name
|
||||
*/
|
||||
#define PLIST_HEAD_INIT(head, _lock) \
|
||||
{ \
|
||||
.prio_list = LIST_HEAD_INIT((head).prio_list), \
|
||||
.node_list = LIST_HEAD_INIT((head).node_list), \
|
||||
PLIST_HEAD_LOCK_INIT(&(_lock)) \
|
||||
}
|
||||
|
||||
/**
|
||||
* #PLIST_NODE_INIT - static struct plist_node initializer
|
||||
*
|
||||
* @node: struct plist_node variable name
|
||||
* @__prio: initial node priority
|
||||
*/
|
||||
#define PLIST_NODE_INIT(node, __prio) \
|
||||
{ \
|
||||
.prio = (__prio), \
|
||||
.plist = PLIST_HEAD_INIT((node).plist, NULL), \
|
||||
}
|
||||
|
||||
/**
|
||||
* plist_head_init - dynamic struct plist_head initializer
|
||||
*
|
||||
* @head: &struct plist_head pointer
|
||||
*/
|
||||
static inline void
|
||||
plist_head_init(struct plist_head *head, spinlock_t *lock)
|
||||
{
|
||||
INIT_LIST_HEAD(&head->prio_list);
|
||||
INIT_LIST_HEAD(&head->node_list);
|
||||
#ifdef CONFIG_DEBUG_PI_LIST
|
||||
head->lock = lock;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* plist_node_init - Dynamic struct plist_node initializer
|
||||
*
|
||||
* @node: &struct plist_node pointer
|
||||
* @prio: initial node priority
|
||||
*/
|
||||
static inline void plist_node_init(struct plist_node *node, int prio)
|
||||
{
|
||||
node->prio = prio;
|
||||
plist_head_init(&node->plist, NULL);
|
||||
}
|
||||
|
||||
extern void plist_add(struct plist_node *node, struct plist_head *head);
|
||||
extern void plist_del(struct plist_node *node, struct plist_head *head);
|
||||
|
||||
/**
|
||||
* plist_for_each - iterate over the plist
|
||||
*
|
||||
* @pos1: the type * to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define plist_for_each(pos, head) \
|
||||
list_for_each_entry(pos, &(head)->node_list, plist.node_list)
|
||||
|
||||
/**
|
||||
* plist_for_each_entry_safe - iterate over a plist of given type safe
|
||||
* against removal of list entry
|
||||
*
|
||||
* @pos1: the type * to use as a loop counter.
|
||||
* @n1: another type * to use as temporary storage
|
||||
* @head: the head for your list.
|
||||
*/
|
||||
#define plist_for_each_safe(pos, n, head) \
|
||||
list_for_each_entry_safe(pos, n, &(head)->node_list, plist.node_list)
|
||||
|
||||
/**
|
||||
* plist_for_each_entry - iterate over list of given type
|
||||
*
|
||||
* @pos: the type * to use as a loop counter.
|
||||
* @head: the head for your list.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define plist_for_each_entry(pos, head, mem) \
|
||||
list_for_each_entry(pos, &(head)->node_list, mem.plist.node_list)
|
||||
|
||||
/**
|
||||
* plist_for_each_entry_safe - iterate over list of given type safe against
|
||||
* removal of list entry
|
||||
*
|
||||
* @pos: the type * to use as a loop counter.
|
||||
* @n: another type * to use as temporary storage
|
||||
* @head: the head for your list.
|
||||
* @m: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define plist_for_each_entry_safe(pos, n, head, m) \
|
||||
list_for_each_entry_safe(pos, n, &(head)->node_list, m.plist.node_list)
|
||||
|
||||
/**
|
||||
* plist_head_empty - return !0 if a plist_head is empty
|
||||
*
|
||||
* @head: &struct plist_head pointer
|
||||
*/
|
||||
static inline int plist_head_empty(const struct plist_head *head)
|
||||
{
|
||||
return list_empty(&head->node_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* plist_node_empty - return !0 if plist_node is not on a list
|
||||
*
|
||||
* @node: &struct plist_node pointer
|
||||
*/
|
||||
static inline int plist_node_empty(const struct plist_node *node)
|
||||
{
|
||||
return plist_head_empty(&node->plist);
|
||||
}
|
||||
|
||||
/* All functions below assume the plist_head is not empty. */
|
||||
|
||||
/**
|
||||
* plist_first_entry - get the struct for the first entry
|
||||
*
|
||||
* @ptr: the &struct plist_head pointer.
|
||||
* @type: the type of the struct this is embedded in.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#ifdef CONFIG_DEBUG_PI_LIST
|
||||
# define plist_first_entry(head, type, member) \
|
||||
({ \
|
||||
WARN_ON(plist_head_empty(head)); \
|
||||
container_of(plist_first(head), type, member); \
|
||||
})
|
||||
#else
|
||||
# define plist_first_entry(head, type, member) \
|
||||
container_of(plist_first(head), type, member)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* plist_first - return the first node (and thus, highest priority)
|
||||
*
|
||||
* @head: the &struct plist_head pointer
|
||||
*
|
||||
* Assumes the plist is _not_ empty.
|
||||
*/
|
||||
static inline struct plist_node* plist_first(const struct plist_head *head)
|
||||
{
|
||||
return list_entry(head->node_list.next,
|
||||
struct plist_node, plist.node_list);
|
||||
}
|
||||
|
||||
#endif
|
@@ -389,7 +389,8 @@ int pnp_start_dev(struct pnp_dev *dev);
|
||||
int pnp_stop_dev(struct pnp_dev *dev);
|
||||
int pnp_activate_dev(struct pnp_dev *dev);
|
||||
int pnp_disable_dev(struct pnp_dev *dev);
|
||||
void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size);
|
||||
void pnp_resource_change(struct resource *resource, resource_size_t start,
|
||||
resource_size_t size);
|
||||
|
||||
/* protocol helpers */
|
||||
int pnp_is_active(struct pnp_dev * dev);
|
||||
@@ -434,7 +435,9 @@ static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size) { }
|
||||
static inline void pnp_resource_change(struct resource *resource,
|
||||
resource_size_t start,
|
||||
resource_size_t size) { }
|
||||
|
||||
/* protocol helpers */
|
||||
static inline int pnp_is_active(struct pnp_dev * dev) { return 0; }
|
||||
|
58
include/linux/poison.h
Normal file
58
include/linux/poison.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef _LINUX_POISON_H
|
||||
#define _LINUX_POISON_H
|
||||
|
||||
/********** include/linux/list.h **********/
|
||||
/*
|
||||
* These are non-NULL pointers that will result in page faults
|
||||
* under normal circumstances, used to verify that nobody uses
|
||||
* non-initialized list entries.
|
||||
*/
|
||||
#define LIST_POISON1 ((void *) 0x00100100)
|
||||
#define LIST_POISON2 ((void *) 0x00200200)
|
||||
|
||||
/********** mm/slab.c **********/
|
||||
/*
|
||||
* Magic nums for obj red zoning.
|
||||
* Placed in the first word before and the first word after an obj.
|
||||
*/
|
||||
#define RED_INACTIVE 0x5A2CF071UL /* when obj is inactive */
|
||||
#define RED_ACTIVE 0x170FC2A5UL /* when obj is active */
|
||||
|
||||
/* ...and for poisoning */
|
||||
#define POISON_INUSE 0x5a /* for use-uninitialised poisoning */
|
||||
#define POISON_FREE 0x6b /* for use-after-free poisoning */
|
||||
#define POISON_END 0xa5 /* end-byte of poisoning */
|
||||
|
||||
/********** arch/$ARCH/mm/init.c **********/
|
||||
#define POISON_FREE_INITMEM 0xcc
|
||||
|
||||
/********** arch/x86_64/mm/init.c **********/
|
||||
#define POISON_FREE_INITDATA 0xba
|
||||
|
||||
/********** arch/ia64/hp/common/sba_iommu.c **********/
|
||||
/*
|
||||
* arch/ia64/hp/common/sba_iommu.c uses a 16-byte poison string with a
|
||||
* value of "SBAIOMMU POISON\0" for spill-over poisoning.
|
||||
*/
|
||||
|
||||
/********** fs/jbd/journal.c **********/
|
||||
#define JBD_POISON_FREE 0x5b
|
||||
|
||||
/********** drivers/base/dmapool.c **********/
|
||||
#define POOL_POISON_FREED 0xa7 /* !inuse */
|
||||
#define POOL_POISON_ALLOCATED 0xa9 /* !initted */
|
||||
|
||||
/********** drivers/atm/ **********/
|
||||
#define ATM_POISON_FREE 0x12
|
||||
|
||||
/********** kernel/mutexes **********/
|
||||
#define MUTEX_DEBUG_INIT 0x11
|
||||
#define MUTEX_DEBUG_FREE 0x22
|
||||
|
||||
/********** security/ **********/
|
||||
#define KEY_DESTROY 0xbd
|
||||
|
||||
/********** sound/oss/ **********/
|
||||
#define OSS_POISON_FREE 0xAB
|
||||
|
||||
#endif
|
@@ -258,6 +258,7 @@ extern void rcu_init(void);
|
||||
extern void rcu_check_callbacks(int cpu, int user);
|
||||
extern void rcu_restart_cpu(int cpu);
|
||||
extern long rcu_batches_completed(void);
|
||||
extern long rcu_batches_completed_bh(void);
|
||||
|
||||
/* Exported interfaces */
|
||||
extern void FASTCALL(call_rcu(struct rcu_head *head,
|
||||
|
@@ -1973,7 +1973,7 @@ void reiserfs_unmap_buffer(struct buffer_head *);
|
||||
/* file.c */
|
||||
extern struct inode_operations reiserfs_file_inode_operations;
|
||||
extern const struct file_operations reiserfs_file_operations;
|
||||
extern struct address_space_operations reiserfs_address_space_operations;
|
||||
extern const struct address_space_operations reiserfs_address_space_operations;
|
||||
|
||||
/* fix_nodes.c */
|
||||
|
||||
|
117
include/linux/rtmutex.h
Normal file
117
include/linux/rtmutex.h
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* RT Mutexes: blocking mutual exclusion locks with PI support
|
||||
*
|
||||
* started by Ingo Molnar and Thomas Gleixner:
|
||||
*
|
||||
* Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
* Copyright (C) 2006, Timesys Corp., Thomas Gleixner <tglx@timesys.com>
|
||||
*
|
||||
* This file contains the public data structure and API definitions.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_RT_MUTEX_H
|
||||
#define __LINUX_RT_MUTEX_H
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/plist.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
/*
|
||||
* The rt_mutex structure
|
||||
*
|
||||
* @wait_lock: spinlock to protect the structure
|
||||
* @wait_list: pilist head to enqueue waiters in priority order
|
||||
* @owner: the mutex owner
|
||||
*/
|
||||
struct rt_mutex {
|
||||
spinlock_t wait_lock;
|
||||
struct plist_head wait_list;
|
||||
struct task_struct *owner;
|
||||
#ifdef CONFIG_DEBUG_RT_MUTEXES
|
||||
int save_state;
|
||||
struct list_head held_list_entry;
|
||||
unsigned long acquire_ip;
|
||||
const char *name, *file;
|
||||
int line;
|
||||
void *magic;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct rt_mutex_waiter;
|
||||
struct hrtimer_sleeper;
|
||||
|
||||
#ifdef CONFIG_DEBUG_RT_MUTEXES
|
||||
extern int rt_mutex_debug_check_no_locks_freed(const void *from,
|
||||
unsigned long len);
|
||||
extern void rt_mutex_debug_check_no_locks_held(struct task_struct *task);
|
||||
#else
|
||||
static inline int rt_mutex_debug_check_no_locks_freed(const void *from,
|
||||
unsigned long len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
# define rt_mutex_debug_check_no_locks_held(task) do { } while (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_RT_MUTEXES
|
||||
# define __DEBUG_RT_MUTEX_INITIALIZER(mutexname) \
|
||||
, .name = #mutexname, .file = __FILE__, .line = __LINE__
|
||||
# define rt_mutex_init(mutex) __rt_mutex_init(mutex, __FUNCTION__)
|
||||
extern void rt_mutex_debug_task_free(struct task_struct *tsk);
|
||||
#else
|
||||
# define __DEBUG_RT_MUTEX_INITIALIZER(mutexname)
|
||||
# define rt_mutex_init(mutex) __rt_mutex_init(mutex, NULL)
|
||||
# define rt_mutex_debug_task_free(t) do { } while (0)
|
||||
#endif
|
||||
|
||||
#define __RT_MUTEX_INITIALIZER(mutexname) \
|
||||
{ .wait_lock = SPIN_LOCK_UNLOCKED \
|
||||
, .wait_list = PLIST_HEAD_INIT(mutexname.wait_list, mutexname.wait_lock) \
|
||||
, .owner = NULL \
|
||||
__DEBUG_RT_MUTEX_INITIALIZER(mutexname)}
|
||||
|
||||
#define DEFINE_RT_MUTEX(mutexname) \
|
||||
struct rt_mutex mutexname = __RT_MUTEX_INITIALIZER(mutexname)
|
||||
|
||||
/***
|
||||
* rt_mutex_is_locked - is the mutex locked
|
||||
* @lock: the mutex to be queried
|
||||
*
|
||||
* Returns 1 if the mutex is locked, 0 if unlocked.
|
||||
*/
|
||||
static inline int rt_mutex_is_locked(struct rt_mutex *lock)
|
||||
{
|
||||
return lock->owner != NULL;
|
||||
}
|
||||
|
||||
extern void __rt_mutex_init(struct rt_mutex *lock, const char *name);
|
||||
extern void rt_mutex_destroy(struct rt_mutex *lock);
|
||||
|
||||
extern void rt_mutex_lock(struct rt_mutex *lock);
|
||||
extern int rt_mutex_lock_interruptible(struct rt_mutex *lock,
|
||||
int detect_deadlock);
|
||||
extern int rt_mutex_timed_lock(struct rt_mutex *lock,
|
||||
struct hrtimer_sleeper *timeout,
|
||||
int detect_deadlock);
|
||||
|
||||
extern int rt_mutex_trylock(struct rt_mutex *lock);
|
||||
|
||||
extern void rt_mutex_unlock(struct rt_mutex *lock);
|
||||
|
||||
#ifdef CONFIG_DEBUG_RT_MUTEXES
|
||||
# define INIT_RT_MUTEX_DEBUG(tsk) \
|
||||
.held_list_head = LIST_HEAD_INIT(tsk.held_list_head), \
|
||||
.held_list_lock = SPIN_LOCK_UNLOCKED
|
||||
#else
|
||||
# define INIT_RT_MUTEX_DEBUG(tsk)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
# define INIT_RT_MUTEXES(tsk) \
|
||||
.pi_waiters = PLIST_HEAD_INIT(tsk.pi_waiters, tsk.pi_lock), \
|
||||
INIT_RT_MUTEX_DEBUG(tsk)
|
||||
#else
|
||||
# define INIT_RT_MUTEXES(tsk)
|
||||
#endif
|
||||
|
||||
#endif
|
@@ -73,6 +73,7 @@ struct sched_param {
|
||||
#include <linux/seccomp.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/futex.h>
|
||||
#include <linux/rtmutex.h>
|
||||
|
||||
#include <linux/time.h>
|
||||
#include <linux/param.h>
|
||||
@@ -83,6 +84,7 @@ struct sched_param {
|
||||
#include <asm/processor.h>
|
||||
|
||||
struct exec_domain;
|
||||
struct futex_pi_state;
|
||||
|
||||
/*
|
||||
* List of flags we want to share for kernel threads,
|
||||
@@ -123,6 +125,7 @@ extern unsigned long nr_running(void);
|
||||
extern unsigned long nr_uninterruptible(void);
|
||||
extern unsigned long nr_active(void);
|
||||
extern unsigned long nr_iowait(void);
|
||||
extern unsigned long weighted_cpuload(const int cpu);
|
||||
|
||||
|
||||
/*
|
||||
@@ -494,8 +497,11 @@ struct signal_struct {
|
||||
|
||||
#define MAX_PRIO (MAX_RT_PRIO + 40)
|
||||
|
||||
#define rt_task(p) (unlikely((p)->prio < MAX_RT_PRIO))
|
||||
#define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO)
|
||||
#define rt_task(p) rt_prio((p)->prio)
|
||||
#define batch_task(p) (unlikely((p)->policy == SCHED_BATCH))
|
||||
#define has_rt_policy(p) \
|
||||
unlikely((p)->policy != SCHED_NORMAL && (p)->policy != SCHED_BATCH)
|
||||
|
||||
/*
|
||||
* Some day this will be a full-fledged user tracking system..
|
||||
@@ -558,9 +564,9 @@ enum idle_type
|
||||
/*
|
||||
* sched-domains (multiprocessor balancing) declarations:
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */
|
||||
#define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */
|
||||
#define SD_BALANCE_EXEC 4 /* Balance on exec */
|
||||
@@ -569,6 +575,11 @@ enum idle_type
|
||||
#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */
|
||||
#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */
|
||||
#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */
|
||||
#define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */
|
||||
|
||||
#define BALANCE_FOR_POWER ((sched_mc_power_savings || sched_smt_power_savings) \
|
||||
? SD_POWERSAVINGS_BALANCE : 0)
|
||||
|
||||
|
||||
struct sched_group {
|
||||
struct sched_group *next; /* Must be a circular list */
|
||||
@@ -638,7 +649,7 @@ struct sched_domain {
|
||||
#endif
|
||||
};
|
||||
|
||||
extern void partition_sched_domains(cpumask_t *partition1,
|
||||
extern int partition_sched_domains(cpumask_t *partition1,
|
||||
cpumask_t *partition2);
|
||||
|
||||
/*
|
||||
@@ -713,10 +724,13 @@ struct task_struct {
|
||||
|
||||
int lock_depth; /* BKL lock depth */
|
||||
|
||||
#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
|
||||
#ifdef CONFIG_SMP
|
||||
#ifdef __ARCH_WANT_UNLOCKED_CTXSW
|
||||
int oncpu;
|
||||
#endif
|
||||
int prio, static_prio;
|
||||
#endif
|
||||
int load_weight; /* for niceness load balancing purposes */
|
||||
int prio, static_prio, normal_prio;
|
||||
struct list_head run_list;
|
||||
prio_array_t *array;
|
||||
|
||||
@@ -843,6 +857,20 @@ struct task_struct {
|
||||
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */
|
||||
spinlock_t alloc_lock;
|
||||
|
||||
/* Protection of the PI data structures: */
|
||||
spinlock_t pi_lock;
|
||||
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
/* PI waiters blocked on a rt_mutex held by this task */
|
||||
struct plist_head pi_waiters;
|
||||
/* Deadlock detection and priority inheritance handling */
|
||||
struct rt_mutex_waiter *pi_blocked_on;
|
||||
# ifdef CONFIG_DEBUG_RT_MUTEXES
|
||||
spinlock_t held_list_lock;
|
||||
struct list_head held_list_head;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_MUTEXES
|
||||
/* mutex deadlock detection */
|
||||
struct mutex_waiter *blocked_on;
|
||||
@@ -888,6 +916,8 @@ struct task_struct {
|
||||
#ifdef CONFIG_COMPAT
|
||||
struct compat_robust_list_head __user *compat_robust_list;
|
||||
#endif
|
||||
struct list_head pi_state_list;
|
||||
struct futex_pi_state *pi_state_cache;
|
||||
|
||||
atomic_t fs_excl; /* holding fs exclusive resources */
|
||||
struct rcu_head rcu;
|
||||
@@ -955,6 +985,7 @@ static inline void put_task_struct(struct task_struct *t)
|
||||
#define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */
|
||||
#define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */
|
||||
#define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */
|
||||
#define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */
|
||||
|
||||
/*
|
||||
* Only the _current_ task can read/write to tsk->flags, but other
|
||||
@@ -1009,6 +1040,19 @@ static inline void idle_task_exit(void) {}
|
||||
#endif
|
||||
|
||||
extern void sched_idle_next(void);
|
||||
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
extern int rt_mutex_getprio(task_t *p);
|
||||
extern void rt_mutex_setprio(task_t *p, int prio);
|
||||
extern void rt_mutex_adjust_pi(task_t *p);
|
||||
#else
|
||||
static inline int rt_mutex_getprio(task_t *p)
|
||||
{
|
||||
return p->normal_prio;
|
||||
}
|
||||
# define rt_mutex_adjust_pi(p) do { } while (0)
|
||||
#endif
|
||||
|
||||
extern void set_user_nice(task_t *p, long nice);
|
||||
extern int task_prio(const task_t *p);
|
||||
extern int task_nice(const task_t *p);
|
||||
@@ -1408,6 +1452,11 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm)
|
||||
extern long sched_setaffinity(pid_t pid, cpumask_t new_mask);
|
||||
extern long sched_getaffinity(pid_t pid, cpumask_t *mask);
|
||||
|
||||
#include <linux/sysdev.h>
|
||||
extern int sched_mc_power_savings, sched_smt_power_savings;
|
||||
extern struct sysdev_attribute attr_sched_mc_power_savings, attr_sched_smt_power_savings;
|
||||
extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls);
|
||||
|
||||
extern void normalize_rt_tasks(void);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
@@ -49,10 +49,3 @@ extern unsigned scx200_cb_base;
|
||||
#define SCx200_REV 0x3d /* Revision Register */
|
||||
#define SCx200_CBA 0x3e /* Configuration Base Address Register */
|
||||
#define SCx200_CBA_SCRATCH 0x64 /* Configuration Base Address Scratchpad */
|
||||
|
||||
/*
|
||||
Local variables:
|
||||
compile-command: "make -C ../.. bzImage modules"
|
||||
c-basic-offset: 8
|
||||
End:
|
||||
*/
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
u32 scx200_gpio_configure(int index, u32 set, u32 clear);
|
||||
u32 scx200_gpio_configure(unsigned index, u32 set, u32 clear);
|
||||
|
||||
extern unsigned scx200_gpio_base;
|
||||
extern long scx200_gpio_shadow[2];
|
||||
@@ -17,7 +17,7 @@ extern long scx200_gpio_shadow[2];
|
||||
|
||||
/* returns the value of the GPIO pin */
|
||||
|
||||
static inline int scx200_gpio_get(int index) {
|
||||
static inline int scx200_gpio_get(unsigned index) {
|
||||
__SCx200_GPIO_BANK;
|
||||
__SCx200_GPIO_IOADDR + 0x04;
|
||||
__SCx200_GPIO_INDEX;
|
||||
@@ -29,7 +29,7 @@ static inline int scx200_gpio_get(int index) {
|
||||
driven if the GPIO is configured as an output, it might not be the
|
||||
state of the GPIO right now if the GPIO is configured as an input) */
|
||||
|
||||
static inline int scx200_gpio_current(int index) {
|
||||
static inline int scx200_gpio_current(unsigned index) {
|
||||
__SCx200_GPIO_BANK;
|
||||
__SCx200_GPIO_INDEX;
|
||||
|
||||
@@ -38,7 +38,7 @@ static inline int scx200_gpio_current(int index) {
|
||||
|
||||
/* drive the GPIO signal high */
|
||||
|
||||
static inline void scx200_gpio_set_high(int index) {
|
||||
static inline void scx200_gpio_set_high(unsigned index) {
|
||||
__SCx200_GPIO_BANK;
|
||||
__SCx200_GPIO_IOADDR;
|
||||
__SCx200_GPIO_SHADOW;
|
||||
@@ -49,7 +49,7 @@ static inline void scx200_gpio_set_high(int index) {
|
||||
|
||||
/* drive the GPIO signal low */
|
||||
|
||||
static inline void scx200_gpio_set_low(int index) {
|
||||
static inline void scx200_gpio_set_low(unsigned index) {
|
||||
__SCx200_GPIO_BANK;
|
||||
__SCx200_GPIO_IOADDR;
|
||||
__SCx200_GPIO_SHADOW;
|
||||
@@ -60,7 +60,7 @@ static inline void scx200_gpio_set_low(int index) {
|
||||
|
||||
/* drive the GPIO signal to state */
|
||||
|
||||
static inline void scx200_gpio_set(int index, int state) {
|
||||
static inline void scx200_gpio_set(unsigned index, int state) {
|
||||
__SCx200_GPIO_BANK;
|
||||
__SCx200_GPIO_IOADDR;
|
||||
__SCx200_GPIO_SHADOW;
|
||||
@@ -73,7 +73,7 @@ static inline void scx200_gpio_set(int index, int state) {
|
||||
}
|
||||
|
||||
/* toggle the GPIO signal */
|
||||
static inline void scx200_gpio_change(int index) {
|
||||
static inline void scx200_gpio_change(unsigned index) {
|
||||
__SCx200_GPIO_BANK;
|
||||
__SCx200_GPIO_IOADDR;
|
||||
__SCx200_GPIO_SHADOW;
|
||||
@@ -87,10 +87,3 @@ static inline void scx200_gpio_change(int index) {
|
||||
#undef __SCx200_GPIO_SHADOW
|
||||
#undef __SCx200_GPIO_INDEX
|
||||
#undef __SCx200_GPIO_OUT
|
||||
|
||||
/*
|
||||
Local variables:
|
||||
compile-command: "make -C ../.. bzImage modules"
|
||||
c-basic-offset: 8
|
||||
End:
|
||||
*/
|
||||
|
@@ -336,7 +336,6 @@ struct uart_driver {
|
||||
struct module *owner;
|
||||
const char *driver_name;
|
||||
const char *dev_name;
|
||||
const char *devfs_name;
|
||||
int major;
|
||||
int minor;
|
||||
int nr;
|
||||
|
@@ -642,10 +642,14 @@ struct spi_board_info {
|
||||
u16 bus_num;
|
||||
u16 chip_select;
|
||||
|
||||
/* mode becomes spi_device.mode, and is essential for chips
|
||||
* where the default of SPI_CS_HIGH = 0 is wrong.
|
||||
*/
|
||||
u8 mode;
|
||||
|
||||
/* ... may need additional spi_device chip config data here.
|
||||
* avoid stuff protocol drivers can set; but include stuff
|
||||
* needed to behave without being bound to a driver:
|
||||
* - chipselect polarity
|
||||
* - quirks like clock rate mattering when not selected
|
||||
*/
|
||||
};
|
||||
|
@@ -199,6 +199,8 @@ static inline int zone_reclaim(struct zone *z, gfp_t mask, unsigned int order)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int kswapd_run(int nid);
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/* linux/mm/shmem.c */
|
||||
extern int shmem_unuse(swp_entry_t entry, struct page *page);
|
||||
|
@@ -174,9 +174,9 @@ asmlinkage long sys_waitid(int which, pid_t pid,
|
||||
int options, struct rusage __user *ru);
|
||||
asmlinkage long sys_waitpid(pid_t pid, int __user *stat_addr, int options);
|
||||
asmlinkage long sys_set_tid_address(int __user *tidptr);
|
||||
asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
|
||||
asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val,
|
||||
struct timespec __user *utime, u32 __user *uaddr2,
|
||||
int val3);
|
||||
u32 val3);
|
||||
|
||||
asmlinkage long sys_init_module(void __user *umod, unsigned long len,
|
||||
const char __user *uargs);
|
||||
|
@@ -149,6 +149,7 @@ enum
|
||||
KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */
|
||||
KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */
|
||||
KERN_COMPAT_LOG=73, /* int: print compat layer messages */
|
||||
KERN_MAX_LOCK_DEPTH=74,
|
||||
};
|
||||
|
||||
|
||||
@@ -189,6 +190,7 @@ enum
|
||||
VM_ZONE_RECLAIM_MODE=31, /* reclaim local zone memory before going off node */
|
||||
VM_ZONE_RECLAIM_INTERVAL=32, /* time period to wait after reclaim failure */
|
||||
VM_PANIC_ON_OOM=33, /* panic at out-of-memory */
|
||||
VM_VDSO_ENABLED=34, /* map VDSO into new processes? */
|
||||
};
|
||||
|
||||
|
||||
|
@@ -134,7 +134,8 @@
|
||||
.flags = SD_LOAD_BALANCE \
|
||||
| SD_BALANCE_NEWIDLE \
|
||||
| SD_BALANCE_EXEC \
|
||||
| SD_WAKE_AFFINE, \
|
||||
| SD_WAKE_AFFINE \
|
||||
| BALANCE_FOR_POWER, \
|
||||
.last_balance = jiffies, \
|
||||
.balance_interval = 1, \
|
||||
.nr_balance_failed = 0, \
|
||||
|
@@ -57,7 +57,6 @@ struct tty_buffer {
|
||||
unsigned char *flag_buf_ptr;
|
||||
int used;
|
||||
int size;
|
||||
int active;
|
||||
int commit;
|
||||
int read;
|
||||
/* Data points here */
|
||||
@@ -259,7 +258,6 @@ struct tty_struct {
|
||||
#define TTY_DO_WRITE_WAKEUP 5 /* Call write_wakeup after queuing new */
|
||||
#define TTY_PUSH 6 /* n_tty private */
|
||||
#define TTY_CLOSING 7 /* ->close() in progress */
|
||||
#define TTY_DONT_FLIP 8 /* Defer buffer flip */
|
||||
#define TTY_LDISC 9 /* Line discipline attached */
|
||||
#define TTY_HW_COOK_OUT 14 /* Hardware can do output cooking */
|
||||
#define TTY_HW_COOK_IN 15 /* Hardware can do input cooking */
|
||||
|
@@ -157,7 +157,6 @@ struct tty_driver {
|
||||
struct cdev cdev;
|
||||
struct module *owner;
|
||||
const char *driver_name;
|
||||
const char *devfs_name;
|
||||
const char *name;
|
||||
int name_base; /* offset of printed name */
|
||||
int major; /* major device number */
|
||||
@@ -242,8 +241,15 @@ void tty_set_operations(struct tty_driver *driver, struct tty_operations *op);
|
||||
* is also a promise, if the above case is true, not to signal
|
||||
* overruns, either.)
|
||||
*
|
||||
* TTY_DRIVER_NO_DEVFS --- if set, do not create devfs entries. This
|
||||
* is only used by tty_register_driver().
|
||||
* TTY_DRIVER_DYNAMIC_DEV --- if set, the individual tty devices need
|
||||
* to be registered with a call to tty_register_driver() when the
|
||||
* device is found in the system and unregistered with a call to
|
||||
* tty_unregister_device() so the devices will be show up
|
||||
* properly in sysfs. If not set, driver->num entries will be
|
||||
* created by the tty core in sysfs when tty_register_driver() is
|
||||
* called. This is to be used by drivers that have tty devices
|
||||
* that can appear and disappear while the main tty driver is
|
||||
* registered with the tty core.
|
||||
*
|
||||
* TTY_DRIVER_DEVPTS_MEM -- don't use the standard arrays, instead
|
||||
* use dynamic memory keyed through the devpts filesystem. This
|
||||
@@ -252,7 +258,7 @@ void tty_set_operations(struct tty_driver *driver, struct tty_operations *op);
|
||||
#define TTY_DRIVER_INSTALLED 0x0001
|
||||
#define TTY_DRIVER_RESET_TERMIOS 0x0002
|
||||
#define TTY_DRIVER_REAL_RAW 0x0004
|
||||
#define TTY_DRIVER_NO_DEVFS 0x0008
|
||||
#define TTY_DRIVER_DYNAMIC_DEV 0x0008
|
||||
#define TTY_DRIVER_DEVPTS_MEM 0x0010
|
||||
|
||||
/* tty driver types */
|
||||
|
@@ -12,7 +12,7 @@ static inline int tty_insert_flip_char(struct tty_struct *tty,
|
||||
unsigned char ch, char flag)
|
||||
{
|
||||
struct tty_buffer *tb = tty->buf.tail;
|
||||
if (tb && tb->active && tb->used < tb->size) {
|
||||
if (tb && tb->used < tb->size) {
|
||||
tb->flag_buf_ptr[tb->used] = flag;
|
||||
tb->char_buf_ptr[tb->used++] = ch;
|
||||
return 1;
|
||||
|
@@ -177,8 +177,15 @@ typedef __u64 __bitwise __be64;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
typedef unsigned __bitwise__ gfp_t;
|
||||
|
||||
#ifdef CONFIG_RESOURCES_64BIT
|
||||
typedef u64 resource_size_t;
|
||||
#else
|
||||
typedef u32 resource_size_t;
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
struct ustat {
|
||||
__kernel_daddr_t f_tfree;
|
||||
__kernel_ino_t f_tinode;
|
||||
|
@@ -966,7 +966,7 @@ extern void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de,
|
||||
extern struct inode_operations ufs_file_inode_operations;
|
||||
extern const struct file_operations ufs_file_operations;
|
||||
|
||||
extern struct address_space_operations ufs_aops;
|
||||
extern const struct address_space_operations ufs_aops;
|
||||
|
||||
/* ialloc.c */
|
||||
extern void ufs_free_inode (struct inode *inode);
|
||||
|
@@ -28,6 +28,9 @@ struct watchdog_info {
|
||||
#define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int)
|
||||
#define WDIOC_SETTIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
|
||||
#define WDIOC_GETTIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 7, int)
|
||||
#define WDIOC_SETPRETIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 8, int)
|
||||
#define WDIOC_GETPRETIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 9, int)
|
||||
#define WDIOC_GETTIMELEFT _IOR(WATCHDOG_IOCTL_BASE, 10, int)
|
||||
|
||||
#define WDIOF_UNKNOWN -1 /* Unknown flag error */
|
||||
#define WDIOS_UNKNOWN -1 /* Unknown status error */
|
||||
@@ -38,9 +41,10 @@ struct watchdog_info {
|
||||
#define WDIOF_EXTERN2 0x0008 /* External relay 2 */
|
||||
#define WDIOF_POWERUNDER 0x0010 /* Power bad/power fault */
|
||||
#define WDIOF_CARDRESET 0x0020 /* Card previously reset the CPU */
|
||||
#define WDIOF_POWEROVER 0x0040 /* Power over voltage */
|
||||
#define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */
|
||||
#define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */
|
||||
#define WDIOF_POWEROVER 0x0040 /* Power over voltage */
|
||||
#define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */
|
||||
#define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */
|
||||
#define WDIOF_PRETIMEOUT 0x0200 /* Pretimeout (in seconds), get/set */
|
||||
#define WDIOF_KEEPALIVEPING 0x8000 /* Keep alive ping reply */
|
||||
|
||||
#define WDIOS_DISABLECARD 0x0001 /* Turn off the watchdog timer */
|
||||
|
Reference in New Issue
Block a user