diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-07-03 13:49:45 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-07-03 13:49:45 -0400 |
| commit | 026477c1141b67e98e3bd8bdedb7d4b88a3ecd09 (patch) | |
| tree | 2624a44924c625c367f3cebf937853b9da2de282 /include/linux | |
| parent | 9f2fa466383ce100b90fe52cb4489d7a26bf72a9 (diff) | |
| parent | 29454dde27d8e340bb1987bad9aa504af7081eba (diff) | |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Diffstat (limited to 'include/linux')
45 files changed, 808 insertions, 539 deletions
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h index 1eb238affb12..41788a31c438 100644 --- a/include/linux/atmdev.h +++ b/include/linux/atmdev.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #define LINUX_ATMDEV_H | 7 | #define LINUX_ATMDEV_H |
| 8 | 8 | ||
| 9 | 9 | ||
| 10 | #include <linux/device.h> | ||
| 10 | #include <linux/atmapi.h> | 11 | #include <linux/atmapi.h> |
| 11 | #include <linux/atm.h> | 12 | #include <linux/atm.h> |
| 12 | #include <linux/atmioc.h> | 13 | #include <linux/atmioc.h> |
| @@ -358,6 +359,7 @@ struct atm_dev { | |||
| 358 | struct proc_dir_entry *proc_entry; /* proc entry */ | 359 | struct proc_dir_entry *proc_entry; /* proc entry */ |
| 359 | char *proc_name; /* proc entry name */ | 360 | char *proc_name; /* proc entry name */ |
| 360 | #endif | 361 | #endif |
| 362 | struct class_device class_dev; /* sysfs class device */ | ||
| 361 | struct list_head dev_list; /* linkage */ | 363 | struct list_head dev_list; /* linkage */ |
| 362 | }; | 364 | }; |
| 363 | 365 | ||
| @@ -459,7 +461,7 @@ static inline void atm_dev_put(struct atm_dev *dev) | |||
| 459 | BUG_ON(!test_bit(ATM_DF_REMOVED, &dev->flags)); | 461 | BUG_ON(!test_bit(ATM_DF_REMOVED, &dev->flags)); |
| 460 | if (dev->ops->dev_close) | 462 | if (dev->ops->dev_close) |
| 461 | dev->ops->dev_close(dev); | 463 | dev->ops->dev_close(dev); |
| 462 | kfree(dev); | 464 | class_device_put(&dev->class_dev); |
| 463 | } | 465 | } |
| 464 | } | 466 | } |
| 465 | 467 | ||
diff --git a/include/linux/audit.h b/include/linux/audit.h index e051ff9c5b50..b27d7debc5a1 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -122,10 +122,17 @@ | |||
| 122 | /* Rule structure sizes -- if these change, different AUDIT_ADD and | 122 | /* Rule structure sizes -- if these change, different AUDIT_ADD and |
| 123 | * AUDIT_LIST commands must be implemented. */ | 123 | * AUDIT_LIST commands must be implemented. */ |
| 124 | #define AUDIT_MAX_FIELDS 64 | 124 | #define AUDIT_MAX_FIELDS 64 |
| 125 | #define AUDIT_MAX_KEY_LEN 32 | ||
| 125 | #define AUDIT_BITMASK_SIZE 64 | 126 | #define AUDIT_BITMASK_SIZE 64 |
| 126 | #define AUDIT_WORD(nr) ((__u32)((nr)/32)) | 127 | #define AUDIT_WORD(nr) ((__u32)((nr)/32)) |
| 127 | #define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32)) | 128 | #define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32)) |
| 128 | 129 | ||
| 130 | #define AUDIT_SYSCALL_CLASSES 16 | ||
| 131 | #define AUDIT_CLASS_DIR_WRITE 0 | ||
| 132 | #define AUDIT_CLASS_DIR_WRITE_32 1 | ||
| 133 | #define AUDIT_CLASS_CHATTR 2 | ||
| 134 | #define AUDIT_CLASS_CHATTR_32 3 | ||
| 135 | |||
| 129 | /* This bitmask is used to validate user input. It represents all bits that | 136 | /* This bitmask is used to validate user input. It represents all bits that |
| 130 | * are currently used in an audit field constant understood by the kernel. | 137 | * are currently used in an audit field constant understood by the kernel. |
| 131 | * If you are adding a new #define AUDIT_<whatever>, please ensure that | 138 | * If you are adding a new #define AUDIT_<whatever>, please ensure that |
| @@ -150,12 +157,17 @@ | |||
| 150 | #define AUDIT_PERS 10 | 157 | #define AUDIT_PERS 10 |
| 151 | #define AUDIT_ARCH 11 | 158 | #define AUDIT_ARCH 11 |
| 152 | #define AUDIT_MSGTYPE 12 | 159 | #define AUDIT_MSGTYPE 12 |
| 153 | #define AUDIT_SE_USER 13 /* security label user */ | 160 | #define AUDIT_SUBJ_USER 13 /* security label user */ |
| 154 | #define AUDIT_SE_ROLE 14 /* security label role */ | 161 | #define AUDIT_SUBJ_ROLE 14 /* security label role */ |
| 155 | #define AUDIT_SE_TYPE 15 /* security label type */ | 162 | #define AUDIT_SUBJ_TYPE 15 /* security label type */ |
| 156 | #define AUDIT_SE_SEN 16 /* security label sensitivity label */ | 163 | #define AUDIT_SUBJ_SEN 16 /* security label sensitivity label */ |
| 157 | #define AUDIT_SE_CLR 17 /* security label clearance label */ | 164 | #define AUDIT_SUBJ_CLR 17 /* security label clearance label */ |
| 158 | #define AUDIT_PPID 18 | 165 | #define AUDIT_PPID 18 |
| 166 | #define AUDIT_OBJ_USER 19 | ||
| 167 | #define AUDIT_OBJ_ROLE 20 | ||
| 168 | #define AUDIT_OBJ_TYPE 21 | ||
| 169 | #define AUDIT_OBJ_LEV_LOW 22 | ||
| 170 | #define AUDIT_OBJ_LEV_HIGH 23 | ||
| 159 | 171 | ||
| 160 | /* These are ONLY useful when checking | 172 | /* These are ONLY useful when checking |
| 161 | * at syscall exit time (AUDIT_AT_EXIT). */ | 173 | * at syscall exit time (AUDIT_AT_EXIT). */ |
| @@ -171,6 +183,8 @@ | |||
| 171 | #define AUDIT_ARG2 (AUDIT_ARG0+2) | 183 | #define AUDIT_ARG2 (AUDIT_ARG0+2) |
| 172 | #define AUDIT_ARG3 (AUDIT_ARG0+3) | 184 | #define AUDIT_ARG3 (AUDIT_ARG0+3) |
| 173 | 185 | ||
| 186 | #define AUDIT_FILTERKEY 210 | ||
| 187 | |||
| 174 | #define AUDIT_NEGATE 0x80000000 | 188 | #define AUDIT_NEGATE 0x80000000 |
| 175 | 189 | ||
| 176 | /* These are the supported operators. | 190 | /* These are the supported operators. |
| @@ -299,6 +313,7 @@ struct mqstat; | |||
| 299 | #define AUDITSC_SUCCESS 1 | 313 | #define AUDITSC_SUCCESS 1 |
| 300 | #define AUDITSC_FAILURE 2 | 314 | #define AUDITSC_FAILURE 2 |
| 301 | #define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS ) | 315 | #define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS ) |
| 316 | extern int __init audit_register_class(int class, unsigned *list); | ||
| 302 | #ifdef CONFIG_AUDITSYSCALL | 317 | #ifdef CONFIG_AUDITSYSCALL |
| 303 | /* These are defined in auditsc.c */ | 318 | /* These are defined in auditsc.c */ |
| 304 | /* Public API */ | 319 | /* Public API */ |
diff --git a/include/linux/compat_ioctl.h b/include/linux/compat_ioctl.h index 917d62e41480..269d000bb2a3 100644 --- a/include/linux/compat_ioctl.h +++ b/include/linux/compat_ioctl.h | |||
| @@ -567,11 +567,6 @@ COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOSUBVER) | |||
| 567 | COMPATIBLE_IOCTL(AUTOFS_IOC_ASKREGHOST) | 567 | COMPATIBLE_IOCTL(AUTOFS_IOC_ASKREGHOST) |
| 568 | COMPATIBLE_IOCTL(AUTOFS_IOC_TOGGLEREGHOST) | 568 | COMPATIBLE_IOCTL(AUTOFS_IOC_TOGGLEREGHOST) |
| 569 | COMPATIBLE_IOCTL(AUTOFS_IOC_ASKUMOUNT) | 569 | COMPATIBLE_IOCTL(AUTOFS_IOC_ASKUMOUNT) |
| 570 | /* DEVFS */ | ||
| 571 | COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV) | ||
| 572 | COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK) | ||
| 573 | COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE) | ||
| 574 | COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK) | ||
| 575 | /* Raw devices */ | 570 | /* Raw devices */ |
| 576 | COMPATIBLE_IOCTL(RAW_SETBIND) | 571 | COMPATIBLE_IOCTL(RAW_SETBIND) |
| 577 | COMPATIBLE_IOCTL(RAW_GETBIND) | 572 | COMPATIBLE_IOCTL(RAW_GETBIND) |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index a3caf6866bae..44a11f1ccaf2 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -87,9 +87,9 @@ int cpu_down(unsigned int cpu); | |||
| 87 | #define lock_cpu_hotplug() do { } while (0) | 87 | #define lock_cpu_hotplug() do { } while (0) |
| 88 | #define unlock_cpu_hotplug() do { } while (0) | 88 | #define unlock_cpu_hotplug() do { } while (0) |
| 89 | #define lock_cpu_hotplug_interruptible() 0 | 89 | #define lock_cpu_hotplug_interruptible() 0 |
| 90 | #define hotcpu_notifier(fn, pri) | 90 | #define hotcpu_notifier(fn, pri) do { } while (0) |
| 91 | #define register_hotcpu_notifier(nb) | 91 | #define register_hotcpu_notifier(nb) do { } while (0) |
| 92 | #define unregister_hotcpu_notifier(nb) | 92 | #define unregister_hotcpu_notifier(nb) do { } while (0) |
| 93 | 93 | ||
| 94 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ | 94 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ |
| 95 | static inline int cpu_is_offline(int cpu) { return 0; } | 95 | static inline int cpu_is_offline(int cpu) { return 0; } |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 466fbe9e4899..35e137636b0b 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -100,8 +100,10 @@ struct cpufreq_policy { | |||
| 100 | #define CPUFREQ_INCOMPATIBLE (1) | 100 | #define CPUFREQ_INCOMPATIBLE (1) |
| 101 | #define CPUFREQ_NOTIFY (2) | 101 | #define CPUFREQ_NOTIFY (2) |
| 102 | 102 | ||
| 103 | #define CPUFREQ_SHARED_TYPE_ALL (0) /* All dependent CPUs should set freq */ | 103 | #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */ |
| 104 | #define CPUFREQ_SHARED_TYPE_ANY (1) /* Freq can be set from any dependent CPU */ | 104 | #define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */ |
| 105 | #define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */ | ||
| 106 | #define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/ | ||
| 105 | 107 | ||
| 106 | /******************** cpufreq transition notifiers *******************/ | 108 | /******************** cpufreq transition notifiers *******************/ |
| 107 | 109 | ||
diff --git a/include/linux/devfs_fs.h b/include/linux/devfs_fs.h deleted file mode 100644 index de236f431877..000000000000 --- a/include/linux/devfs_fs.h +++ /dev/null | |||
| @@ -1,41 +0,0 @@ | |||
| 1 | #ifndef _LINUX_DEVFS_FS_H | ||
| 2 | #define _LINUX_DEVFS_FS_H | ||
| 3 | |||
| 4 | #include <linux/ioctl.h> | ||
| 5 | |||
| 6 | #define DEVFSD_PROTOCOL_REVISION_KERNEL 5 | ||
| 7 | |||
| 8 | #define DEVFSD_IOCTL_BASE 'd' | ||
| 9 | |||
| 10 | /* These are the various ioctls */ | ||
| 11 | #define DEVFSDIOC_GET_PROTO_REV _IOR(DEVFSD_IOCTL_BASE, 0, int) | ||
| 12 | #define DEVFSDIOC_SET_EVENT_MASK _IOW(DEVFSD_IOCTL_BASE, 2, int) | ||
| 13 | #define DEVFSDIOC_RELEASE_EVENT_QUEUE _IOW(DEVFSD_IOCTL_BASE, 3, int) | ||
| 14 | #define DEVFSDIOC_SET_DEBUG_MASK _IOW(DEVFSD_IOCTL_BASE, 4, int) | ||
| 15 | |||
| 16 | #define DEVFSD_NOTIFY_REGISTERED 0 | ||
| 17 | #define DEVFSD_NOTIFY_UNREGISTERED 1 | ||
| 18 | #define DEVFSD_NOTIFY_ASYNC_OPEN 2 | ||
| 19 | #define DEVFSD_NOTIFY_CLOSE 3 | ||
| 20 | #define DEVFSD_NOTIFY_LOOKUP 4 | ||
| 21 | #define DEVFSD_NOTIFY_CHANGE 5 | ||
| 22 | #define DEVFSD_NOTIFY_CREATE 6 | ||
| 23 | #define DEVFSD_NOTIFY_DELETE 7 | ||
| 24 | |||
| 25 | #define DEVFS_PATHLEN 1024 /* Never change this otherwise the | ||
| 26 | binary interface will change */ | ||
| 27 | |||
| 28 | struct devfsd_notify_struct { /* Use native C types to ensure same types in kernel and user space */ | ||
| 29 | unsigned int type; /* DEVFSD_NOTIFY_* value */ | ||
| 30 | unsigned int mode; /* Mode of the inode or device entry */ | ||
| 31 | unsigned int major; /* Major number of device entry */ | ||
| 32 | unsigned int minor; /* Minor number of device entry */ | ||
| 33 | unsigned int uid; /* Uid of process, inode or device entry */ | ||
| 34 | unsigned int gid; /* Gid of process, inode or device entry */ | ||
| 35 | unsigned int overrun_count; /* Number of lost events */ | ||
| 36 | unsigned int namelen; /* Number of characters not including '\0' */ | ||
| 37 | /* The device name MUST come last */ | ||
| 38 | char devname[DEVFS_PATHLEN]; /* This will be '\0' terminated */ | ||
| 39 | }; | ||
| 40 | |||
| 41 | #endif /* _LINUX_DEVFS_FS_H */ | ||
diff --git a/include/linux/devfs_fs_kernel.h b/include/linux/devfs_fs_kernel.h deleted file mode 100644 index 0d74a6f22abc..000000000000 --- a/include/linux/devfs_fs_kernel.h +++ /dev/null | |||
| @@ -1,57 +0,0 @@ | |||
| 1 | #ifndef _LINUX_DEVFS_FS_KERNEL_H | ||
| 2 | #define _LINUX_DEVFS_FS_KERNEL_H | ||
| 3 | |||
| 4 | #include <linux/fs.h> | ||
| 5 | #include <linux/spinlock.h> | ||
| 6 | #include <linux/types.h> | ||
| 7 | |||
| 8 | #include <asm/semaphore.h> | ||
| 9 | |||
| 10 | #define DEVFS_SUPER_MAGIC 0x1373 | ||
| 11 | |||
| 12 | #ifdef CONFIG_DEVFS_FS | ||
| 13 | extern int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...) | ||
| 14 | __attribute__ ((format(printf, 3, 4))); | ||
| 15 | extern int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...) | ||
| 16 | __attribute__ ((format(printf, 3, 4))); | ||
| 17 | extern int devfs_mk_symlink(const char *name, const char *link); | ||
| 18 | extern int devfs_mk_dir(const char *fmt, ...) | ||
| 19 | __attribute__ ((format(printf, 1, 2))); | ||
| 20 | extern void devfs_remove(const char *fmt, ...) | ||
| 21 | __attribute__ ((format(printf, 1, 2))); | ||
| 22 | extern int devfs_register_tape(const char *name); | ||
| 23 | extern void devfs_unregister_tape(int num); | ||
| 24 | extern void mount_devfs_fs(void); | ||
| 25 | #else /* CONFIG_DEVFS_FS */ | ||
| 26 | static inline int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...) | ||
| 27 | { | ||
| 28 | return 0; | ||
| 29 | } | ||
| 30 | static inline int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...) | ||
| 31 | { | ||
| 32 | return 0; | ||
| 33 | } | ||
| 34 | static inline int devfs_mk_symlink(const char *name, const char *link) | ||
| 35 | { | ||
| 36 | return 0; | ||
| 37 | } | ||
| 38 | static inline int devfs_mk_dir(const char *fmt, ...) | ||
| 39 | { | ||
| 40 | return 0; | ||
| 41 | } | ||
| 42 | static inline void devfs_remove(const char *fmt, ...) | ||
| 43 | { | ||
| 44 | } | ||
| 45 | static inline int devfs_register_tape(const char *name) | ||
| 46 | { | ||
| 47 | return -1; | ||
| 48 | } | ||
| 49 | static inline void devfs_unregister_tape(int num) | ||
| 50 | { | ||
| 51 | } | ||
| 52 | static inline void mount_devfs_fs(void) | ||
| 53 | { | ||
| 54 | return; | ||
| 55 | } | ||
| 56 | #endif /* CONFIG_DEVFS_FS */ | ||
| 57 | #endif /* _LINUX_DEVFS_FS_KERNEL_H */ | ||
diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index 2fda1b2aabd9..527504c11c5e 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h | |||
| @@ -125,14 +125,14 @@ typedef struct fs_disk_quota { | |||
| 125 | 125 | ||
| 126 | /* | 126 | /* |
| 127 | * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system. | 127 | * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system. |
| 128 | * Provides a centralized way to get meta infomation about the quota subsystem. | 128 | * Provides a centralized way to get meta information about the quota subsystem. |
| 129 | * eg. space taken up for user and group quotas, number of dquots currently | 129 | * eg. space taken up for user and group quotas, number of dquots currently |
| 130 | * incore. | 130 | * incore. |
| 131 | */ | 131 | */ |
| 132 | #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ | 132 | #define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */ |
| 133 | 133 | ||
| 134 | /* | 134 | /* |
| 135 | * Some basic infomation about 'quota files'. | 135 | * Some basic information about 'quota files'. |
| 136 | */ | 136 | */ |
| 137 | typedef struct fs_qfilestat { | 137 | typedef struct fs_qfilestat { |
| 138 | __u64 qfs_ino; /* inode number */ | 138 | __u64 qfs_ino; /* inode number */ |
diff --git a/include/linux/elf-em.h b/include/linux/elf-em.h index 114a96d25652..6a5796c81c90 100644 --- a/include/linux/elf-em.h +++ b/include/linux/elf-em.h | |||
| @@ -11,7 +11,12 @@ | |||
| 11 | #define EM_486 6 /* Perhaps disused */ | 11 | #define EM_486 6 /* Perhaps disused */ |
| 12 | #define EM_860 7 | 12 | #define EM_860 7 |
| 13 | #define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */ | 13 | #define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */ |
| 14 | /* Next two are historical and binaries and | ||
| 15 | modules of these types will be rejected by | ||
| 16 | Linux. */ | ||
| 17 | #define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */ | ||
| 14 | #define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */ | 18 | #define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */ |
| 19 | |||
| 15 | #define EM_PARISC 15 /* HPPA */ | 20 | #define EM_PARISC 15 /* HPPA */ |
| 16 | #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */ | 21 | #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */ |
| 17 | #define EM_PPC 20 /* PowerPC */ | 22 | #define EM_PPC 20 /* PowerPC */ |
diff --git a/include/linux/err.h b/include/linux/err.h index ff71d2af5da3..cd3b367f7445 100644 --- a/include/linux/err.h +++ b/include/linux/err.h | |||
| @@ -13,7 +13,9 @@ | |||
| 13 | * This should be a per-architecture thing, to allow different | 13 | * This should be a per-architecture thing, to allow different |
| 14 | * error and pointer decisions. | 14 | * error and pointer decisions. |
| 15 | */ | 15 | */ |
| 16 | #define IS_ERR_VALUE(x) unlikely((x) > (unsigned long)-1000L) | 16 | #define MAX_ERRNO 4095 |
| 17 | |||
| 18 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) | ||
| 17 | 19 | ||
| 18 | static inline void *ERR_PTR(long error) | 20 | static inline void *ERR_PTR(long error) |
| 19 | { | 21 | { |
diff --git a/include/linux/fb.h b/include/linux/fb.h index 07a08e92bc73..ffefeeeeca93 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -380,7 +380,6 @@ struct fb_cursor { | |||
| 380 | #include <linux/tty.h> | 380 | #include <linux/tty.h> |
| 381 | #include <linux/device.h> | 381 | #include <linux/device.h> |
| 382 | #include <linux/workqueue.h> | 382 | #include <linux/workqueue.h> |
| 383 | #include <linux/devfs_fs_kernel.h> | ||
| 384 | #include <linux/notifier.h> | 383 | #include <linux/notifier.h> |
| 385 | #include <linux/list.h> | 384 | #include <linux/list.h> |
| 386 | #include <asm/io.h> | 385 | #include <asm/io.h> |
| @@ -558,7 +557,7 @@ struct fb_pixmap { | |||
| 558 | * Frame buffer operations | 557 | * Frame buffer operations |
| 559 | * | 558 | * |
| 560 | * LOCKING NOTE: those functions must _ALL_ be called with the console | 559 | * LOCKING NOTE: those functions must _ALL_ be called with the console |
| 561 | * semaphore held, this is the only suitable locking mecanism we have | 560 | * semaphore held, this is the only suitable locking mechanism we have |
| 562 | * in 2.6. Some may be called at interrupt time at this point though. | 561 | * in 2.6. Some may be called at interrupt time at this point though. |
| 563 | */ | 562 | */ |
| 564 | 563 | ||
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 3498a0c68184..e4af57e87c17 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -112,8 +112,6 @@ struct gendisk { | |||
| 112 | sector_t capacity; | 112 | sector_t capacity; |
| 113 | 113 | ||
| 114 | int flags; | 114 | int flags; |
| 115 | char devfs_name[64]; /* devfs crap */ | ||
| 116 | int number; /* more of the same */ | ||
| 117 | struct device *driverfs_dev; | 115 | struct device *driverfs_dev; |
| 118 | struct kobject kobj; | 116 | struct kobject kobj; |
| 119 | struct kobject *holder_dir; | 117 | struct kobject *holder_dir; |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 0c100168c0cf..285316c836b5 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -552,7 +552,6 @@ typedef struct ide_drive_s { | |||
| 552 | struct hd_driveid *id; /* drive model identification info */ | 552 | struct hd_driveid *id; /* drive model identification info */ |
| 553 | struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ | 553 | struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ |
| 554 | struct ide_settings_s *settings;/* /proc/ide/ drive settings */ | 554 | struct ide_settings_s *settings;/* /proc/ide/ drive settings */ |
| 555 | char devfs_name[64]; /* devfs crap */ | ||
| 556 | 555 | ||
| 557 | struct hwif_s *hwif; /* actually (ide_hwif_t *) */ | 556 | struct hwif_s *hwif; /* actually (ide_hwif_t *) */ |
| 558 | 557 | ||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 70741e170114..da3e0dbe61d4 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -14,6 +14,55 @@ | |||
| 14 | #include <asm/ptrace.h> | 14 | #include <asm/ptrace.h> |
| 15 | #include <asm/system.h> | 15 | #include <asm/system.h> |
| 16 | 16 | ||
| 17 | /* | ||
| 18 | * These correspond to the IORESOURCE_IRQ_* defines in | ||
| 19 | * linux/ioport.h to select the interrupt line behaviour. When | ||
| 20 | * requesting an interrupt without specifying a IRQF_TRIGGER, the | ||
| 21 | * setting should be assumed to be "as already configured", which | ||
| 22 | * may be as per machine or firmware initialisation. | ||
| 23 | */ | ||
| 24 | #define IRQF_TRIGGER_NONE 0x00000000 | ||
| 25 | #define IRQF_TRIGGER_RISING 0x00000001 | ||
| 26 | #define IRQF_TRIGGER_FALLING 0x00000002 | ||
| 27 | #define IRQF_TRIGGER_HIGH 0x00000004 | ||
| 28 | #define IRQF_TRIGGER_LOW 0x00000008 | ||
| 29 | #define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | \ | ||
| 30 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING) | ||
| 31 | #define IRQF_TRIGGER_PROBE 0x00000010 | ||
| 32 | |||
| 33 | /* | ||
| 34 | * These flags used only by the kernel as part of the | ||
| 35 | * irq handling routines. | ||
| 36 | * | ||
| 37 | * IRQF_DISABLED - keep irqs disabled when calling the action handler | ||
| 38 | * IRQF_SAMPLE_RANDOM - irq is used to feed the random generator | ||
| 39 | * IRQF_SHARED - allow sharing the irq among several devices | ||
| 40 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur | ||
| 41 | * IRQF_TIMER - Flag to mark this interrupt as timer interrupt | ||
| 42 | */ | ||
| 43 | #define IRQF_DISABLED 0x00000020 | ||
| 44 | #define IRQF_SAMPLE_RANDOM 0x00000040 | ||
| 45 | #define IRQF_SHARED 0x00000080 | ||
| 46 | #define IRQF_PROBE_SHARED 0x00000100 | ||
| 47 | #define IRQF_TIMER 0x00000200 | ||
| 48 | #define IRQF_PERCPU 0x00000400 | ||
| 49 | |||
| 50 | /* | ||
| 51 | * Migration helpers. Scheduled for removal in 1/2007 | ||
| 52 | * Do not use for new code ! | ||
| 53 | */ | ||
| 54 | #define SA_INTERRUPT IRQF_DISABLED | ||
| 55 | #define SA_SAMPLE_RANDOM IRQF_SAMPLE_RANDOM | ||
| 56 | #define SA_SHIRQ IRQF_SHARED | ||
| 57 | #define SA_PROBEIRQ IRQF_PROBE_SHARED | ||
| 58 | #define SA_PERCPU IRQF_PERCPU | ||
| 59 | |||
| 60 | #define SA_TRIGGER_LOW IRQF_TRIGGER_LOW | ||
| 61 | #define SA_TRIGGER_HIGH IRQF_TRIGGER_HIGH | ||
| 62 | #define SA_TRIGGER_FALLING IRQF_TRIGGER_FALLING | ||
| 63 | #define SA_TRIGGER_RISING IRQF_TRIGGER_RISING | ||
| 64 | #define SA_TRIGGER_MASK IRQF_TRIGGER_MASK | ||
| 65 | |||
| 17 | struct irqaction { | 66 | struct irqaction { |
| 18 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | 67 | irqreturn_t (*handler)(int, void *, struct pt_regs *); |
| 19 | unsigned long flags; | 68 | unsigned long flags; |
| @@ -36,6 +85,20 @@ extern void free_irq(unsigned int, void *); | |||
| 36 | extern void disable_irq_nosync(unsigned int irq); | 85 | extern void disable_irq_nosync(unsigned int irq); |
| 37 | extern void disable_irq(unsigned int irq); | 86 | extern void disable_irq(unsigned int irq); |
| 38 | extern void enable_irq(unsigned int irq); | 87 | extern void enable_irq(unsigned int irq); |
| 88 | |||
| 89 | /* IRQ wakeup (PM) control: */ | ||
| 90 | extern int set_irq_wake(unsigned int irq, unsigned int on); | ||
| 91 | |||
| 92 | static inline int enable_irq_wake(unsigned int irq) | ||
| 93 | { | ||
| 94 | return set_irq_wake(irq, 1); | ||
| 95 | } | ||
| 96 | |||
| 97 | static inline int disable_irq_wake(unsigned int irq) | ||
| 98 | { | ||
| 99 | return set_irq_wake(irq, 0); | ||
| 100 | } | ||
| 101 | |||
| 39 | #endif | 102 | #endif |
| 40 | 103 | ||
| 41 | #ifndef __ARCH_SET_SOFTIRQ_PENDING | 104 | #ifndef __ARCH_SET_SOFTIRQ_PENDING |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index edfc733b1575..87a9fc039b47 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
| @@ -9,13 +9,15 @@ | |||
| 9 | #define _LINUX_IOPORT_H | 9 | #define _LINUX_IOPORT_H |
| 10 | 10 | ||
| 11 | #include <linux/compiler.h> | 11 | #include <linux/compiler.h> |
| 12 | #include <linux/types.h> | ||
| 12 | /* | 13 | /* |
| 13 | * Resources are tree-like, allowing | 14 | * Resources are tree-like, allowing |
| 14 | * nesting etc.. | 15 | * nesting etc.. |
| 15 | */ | 16 | */ |
| 16 | struct resource { | 17 | struct resource { |
| 18 | resource_size_t start; | ||
| 19 | resource_size_t end; | ||
| 17 | const char *name; | 20 | const char *name; |
| 18 | unsigned long start, end; | ||
| 19 | unsigned long flags; | 21 | unsigned long flags; |
| 20 | struct resource *parent, *sibling, *child; | 22 | struct resource *parent, *sibling, *child; |
| 21 | }; | 23 | }; |
| @@ -96,14 +98,13 @@ extern struct resource * ____request_resource(struct resource *root, struct reso | |||
| 96 | extern int release_resource(struct resource *new); | 98 | extern int release_resource(struct resource *new); |
| 97 | extern __deprecated_for_modules int insert_resource(struct resource *parent, struct resource *new); | 99 | extern __deprecated_for_modules int insert_resource(struct resource *parent, struct resource *new); |
| 98 | extern int allocate_resource(struct resource *root, struct resource *new, | 100 | extern int allocate_resource(struct resource *root, struct resource *new, |
| 99 | unsigned long size, | 101 | resource_size_t size, resource_size_t min, |
| 100 | unsigned long min, unsigned long max, | 102 | resource_size_t max, resource_size_t align, |
| 101 | unsigned long align, | ||
| 102 | void (*alignf)(void *, struct resource *, | 103 | void (*alignf)(void *, struct resource *, |
| 103 | unsigned long, unsigned long), | 104 | resource_size_t, resource_size_t), |
| 104 | void *alignf_data); | 105 | void *alignf_data); |
| 105 | int adjust_resource(struct resource *res, unsigned long start, | 106 | int adjust_resource(struct resource *res, resource_size_t start, |
| 106 | unsigned long size); | 107 | resource_size_t size); |
| 107 | 108 | ||
| 108 | /* get registered SYSTEM_RAM resources in specified area */ | 109 | /* get registered SYSTEM_RAM resources in specified area */ |
| 109 | extern int find_next_system_ram(struct resource *res); | 110 | extern int find_next_system_ram(struct resource *res); |
| @@ -113,17 +114,21 @@ extern int find_next_system_ram(struct resource *res); | |||
| 113 | #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name)) | 114 | #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name)) |
| 114 | #define rename_region(region, newname) do { (region)->name = (newname); } while (0) | 115 | #define rename_region(region, newname) do { (region)->name = (newname); } while (0) |
| 115 | 116 | ||
| 116 | extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name); | 117 | extern struct resource * __request_region(struct resource *, |
| 118 | resource_size_t start, | ||
| 119 | resource_size_t n, const char *name); | ||
| 117 | 120 | ||
| 118 | /* Compatibility cruft */ | 121 | /* Compatibility cruft */ |
| 119 | #define release_region(start,n) __release_region(&ioport_resource, (start), (n)) | 122 | #define release_region(start,n) __release_region(&ioport_resource, (start), (n)) |
| 120 | #define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n)) | 123 | #define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n)) |
| 121 | #define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n)) | 124 | #define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n)) |
| 122 | 125 | ||
| 123 | extern int __check_region(struct resource *, unsigned long, unsigned long); | 126 | extern int __check_region(struct resource *, resource_size_t, resource_size_t); |
| 124 | extern void __release_region(struct resource *, unsigned long, unsigned long); | 127 | extern void __release_region(struct resource *, resource_size_t, |
| 128 | resource_size_t); | ||
| 125 | 129 | ||
| 126 | static inline int __deprecated check_region(unsigned long s, unsigned long n) | 130 | static inline int __deprecated check_region(resource_size_t s, |
| 131 | resource_size_t n) | ||
| 127 | { | 132 | { |
| 128 | return __check_region(&ioport_resource, s, n); | 133 | return __check_region(&ioport_resource, s, n); |
| 129 | } | 134 | } |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 676e00dfb21a..b48eae32dc61 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | #ifndef __irq_h | 1 | #ifndef _LINUX_IRQ_H |
| 2 | #define __irq_h | 2 | #define _LINUX_IRQ_H |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
| 5 | * Please do not include this file in generic code. There is currently | 5 | * Please do not include this file in generic code. There is currently |
| @@ -11,7 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/smp.h> | 12 | #include <linux/smp.h> |
| 13 | 13 | ||
| 14 | #if !defined(CONFIG_S390) | 14 | #ifndef CONFIG_S390 |
| 15 | 15 | ||
| 16 | #include <linux/linkage.h> | 16 | #include <linux/linkage.h> |
| 17 | #include <linux/cache.h> | 17 | #include <linux/cache.h> |
| @@ -24,84 +24,172 @@ | |||
| 24 | 24 | ||
| 25 | /* | 25 | /* |
| 26 | * IRQ line status. | 26 | * IRQ line status. |
| 27 | * | ||
| 28 | * Bits 0-16 are reserved for the IRQF_* bits in linux/interrupt.h | ||
| 29 | * | ||
| 30 | * IRQ types | ||
| 27 | */ | 31 | */ |
| 28 | #define IRQ_INPROGRESS 1 /* IRQ handler active - do not enter! */ | 32 | #define IRQ_TYPE_NONE 0x00000000 /* Default, unspecified type */ |
| 29 | #define IRQ_DISABLED 2 /* IRQ disabled - do not enter! */ | 33 | #define IRQ_TYPE_EDGE_RISING 0x00000001 /* Edge rising type */ |
| 30 | #define IRQ_PENDING 4 /* IRQ pending - replay on enable */ | 34 | #define IRQ_TYPE_EDGE_FALLING 0x00000002 /* Edge falling type */ |
| 31 | #define IRQ_REPLAY 8 /* IRQ has been replayed but not acked yet */ | 35 | #define IRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING) |
| 32 | #define IRQ_AUTODETECT 16 /* IRQ is being autodetected */ | 36 | #define IRQ_TYPE_LEVEL_HIGH 0x00000004 /* Level high type */ |
| 33 | #define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */ | 37 | #define IRQ_TYPE_LEVEL_LOW 0x00000008 /* Level low type */ |
| 34 | #define IRQ_LEVEL 64 /* IRQ level triggered */ | 38 | #define IRQ_TYPE_SENSE_MASK 0x0000000f /* Mask of the above */ |
| 35 | #define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */ | 39 | #define IRQ_TYPE_PROBE 0x00000010 /* Probing in progress */ |
| 36 | #if defined(ARCH_HAS_IRQ_PER_CPU) | 40 | |
| 37 | # define IRQ_PER_CPU 256 /* IRQ is per CPU */ | 41 | /* Internal flags */ |
| 42 | #define IRQ_INPROGRESS 0x00010000 /* IRQ handler active - do not enter! */ | ||
| 43 | #define IRQ_DISABLED 0x00020000 /* IRQ disabled - do not enter! */ | ||
| 44 | #define IRQ_PENDING 0x00040000 /* IRQ pending - replay on enable */ | ||
| 45 | #define IRQ_REPLAY 0x00080000 /* IRQ has been replayed but not acked yet */ | ||
| 46 | #define IRQ_AUTODETECT 0x00100000 /* IRQ is being autodetected */ | ||
| 47 | #define IRQ_WAITING 0x00200000 /* IRQ not yet seen - for autodetection */ | ||
| 48 | #define IRQ_LEVEL 0x00400000 /* IRQ level triggered */ | ||
| 49 | #define IRQ_MASKED 0x00800000 /* IRQ masked - shouldn't be seen again */ | ||
| 50 | #ifdef CONFIG_IRQ_PER_CPU | ||
| 51 | # define IRQ_PER_CPU 0x01000000 /* IRQ is per CPU */ | ||
| 38 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 52 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
| 39 | #else | 53 | #else |
| 40 | # define CHECK_IRQ_PER_CPU(var) 0 | 54 | # define CHECK_IRQ_PER_CPU(var) 0 |
| 41 | #endif | 55 | #endif |
| 42 | 56 | ||
| 43 | /* | 57 | #define IRQ_NOPROBE 0x02000000 /* IRQ is not valid for probing */ |
| 44 | * Interrupt controller descriptor. This is all we need | 58 | #define IRQ_NOREQUEST 0x04000000 /* IRQ cannot be requested */ |
| 45 | * to describe about the low-level hardware. | 59 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ |
| 60 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ | ||
| 61 | |||
| 62 | struct proc_dir_entry; | ||
| 63 | |||
| 64 | /** | ||
| 65 | * struct irq_chip - hardware interrupt chip descriptor | ||
| 66 | * | ||
| 67 | * @name: name for /proc/interrupts | ||
| 68 | * @startup: start up the interrupt (defaults to ->enable if NULL) | ||
| 69 | * @shutdown: shut down the interrupt (defaults to ->disable if NULL) | ||
| 70 | * @enable: enable the interrupt (defaults to chip->unmask if NULL) | ||
| 71 | * @disable: disable the interrupt (defaults to chip->mask if NULL) | ||
| 72 | * @ack: start of a new interrupt | ||
| 73 | * @mask: mask an interrupt source | ||
| 74 | * @mask_ack: ack and mask an interrupt source | ||
| 75 | * @unmask: unmask an interrupt source | ||
| 76 | * @eoi: end of interrupt - chip level | ||
| 77 | * @end: end of interrupt - flow level | ||
| 78 | * @set_affinity: set the CPU affinity on SMP machines | ||
| 79 | * @retrigger: resend an IRQ to the CPU | ||
| 80 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ | ||
| 81 | * @set_wake: enable/disable power-management wake-on of an IRQ | ||
| 82 | * | ||
| 83 | * @release: release function solely used by UML | ||
| 84 | * @typename: obsoleted by name, kept as migration helper | ||
| 46 | */ | 85 | */ |
| 47 | struct hw_interrupt_type { | 86 | struct irq_chip { |
| 48 | const char * typename; | 87 | const char *name; |
| 49 | unsigned int (*startup)(unsigned int irq); | 88 | unsigned int (*startup)(unsigned int irq); |
| 50 | void (*shutdown)(unsigned int irq); | 89 | void (*shutdown)(unsigned int irq); |
| 51 | void (*enable)(unsigned int irq); | 90 | void (*enable)(unsigned int irq); |
| 52 | void (*disable)(unsigned int irq); | 91 | void (*disable)(unsigned int irq); |
| 53 | void (*ack)(unsigned int irq); | 92 | |
| 54 | void (*end)(unsigned int irq); | 93 | void (*ack)(unsigned int irq); |
| 55 | void (*set_affinity)(unsigned int irq, cpumask_t dest); | 94 | void (*mask)(unsigned int irq); |
| 95 | void (*mask_ack)(unsigned int irq); | ||
| 96 | void (*unmask)(unsigned int irq); | ||
| 97 | void (*eoi)(unsigned int irq); | ||
| 98 | |||
| 99 | void (*end)(unsigned int irq); | ||
| 100 | void (*set_affinity)(unsigned int irq, cpumask_t dest); | ||
| 101 | int (*retrigger)(unsigned int irq); | ||
| 102 | int (*set_type)(unsigned int irq, unsigned int flow_type); | ||
| 103 | int (*set_wake)(unsigned int irq, unsigned int on); | ||
| 104 | |||
| 56 | /* Currently used only by UML, might disappear one day.*/ | 105 | /* Currently used only by UML, might disappear one day.*/ |
| 57 | #ifdef CONFIG_IRQ_RELEASE_METHOD | 106 | #ifdef CONFIG_IRQ_RELEASE_METHOD |
| 58 | void (*release)(unsigned int irq, void *dev_id); | 107 | void (*release)(unsigned int irq, void *dev_id); |
| 59 | #endif | 108 | #endif |
| 109 | /* | ||
| 110 | * For compatibility, ->typename is copied into ->name. | ||
| 111 | * Will disappear. | ||
| 112 | */ | ||
| 113 | const char *typename; | ||
| 60 | }; | 114 | }; |
| 61 | 115 | ||
| 62 | typedef struct hw_interrupt_type hw_irq_controller; | 116 | /** |
| 63 | 117 | * struct irq_desc - interrupt descriptor | |
| 64 | /* | 118 | * |
| 65 | * This is the "IRQ descriptor", which contains various information | 119 | * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()] |
| 66 | * about the irq, including what kind of hardware handling it has, | 120 | * @chip: low level interrupt hardware access |
| 67 | * whether it is disabled etc etc. | 121 | * @handler_data: per-IRQ data for the irq_chip methods |
| 122 | * @chip_data: platform-specific per-chip private data for the chip | ||
| 123 | * methods, to allow shared chip implementations | ||
| 124 | * @action: the irq action chain | ||
| 125 | * @status: status information | ||
| 126 | * @depth: disable-depth, for nested irq_disable() calls | ||
| 127 | * @irq_count: stats field to detect stalled irqs | ||
| 128 | * @irqs_unhandled: stats field for spurious unhandled interrupts | ||
| 129 | * @lock: locking for SMP | ||
| 130 | * @affinity: IRQ affinity on SMP | ||
| 131 | * @cpu: cpu index useful for balancing | ||
| 132 | * @pending_mask: pending rebalanced interrupts | ||
| 133 | * @move_irq: need to re-target IRQ destination | ||
| 134 | * @dir: /proc/irq/ procfs entry | ||
| 135 | * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP | ||
| 68 | * | 136 | * |
| 69 | * Pad this out to 32 bytes for cache and indexing reasons. | 137 | * Pad this out to 32 bytes for cache and indexing reasons. |
| 70 | */ | 138 | */ |
| 71 | typedef struct irq_desc { | 139 | struct irq_desc { |
| 72 | hw_irq_controller *handler; | 140 | void fastcall (*handle_irq)(unsigned int irq, |
| 73 | void *handler_data; | 141 | struct irq_desc *desc, |
| 74 | struct irqaction *action; /* IRQ action list */ | 142 | struct pt_regs *regs); |
| 75 | unsigned int status; /* IRQ status */ | 143 | struct irq_chip *chip; |
| 76 | unsigned int depth; /* nested irq disables */ | 144 | void *handler_data; |
| 77 | unsigned int irq_count; /* For detecting broken interrupts */ | 145 | void *chip_data; |
| 78 | unsigned int irqs_unhandled; | 146 | struct irqaction *action; /* IRQ action list */ |
| 79 | spinlock_t lock; | 147 | unsigned int status; /* IRQ status */ |
| 80 | #if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE) | 148 | |
| 81 | unsigned int move_irq; /* Flag need to re-target intr dest*/ | 149 | unsigned int depth; /* nested irq disables */ |
| 150 | unsigned int irq_count; /* For detecting broken IRQs */ | ||
| 151 | unsigned int irqs_unhandled; | ||
| 152 | spinlock_t lock; | ||
| 153 | #ifdef CONFIG_SMP | ||
| 154 | cpumask_t affinity; | ||
| 155 | unsigned int cpu; | ||
| 156 | #endif | ||
| 157 | #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) | ||
| 158 | cpumask_t pending_mask; | ||
| 159 | unsigned int move_irq; /* need to re-target IRQ dest */ | ||
| 160 | #endif | ||
| 161 | #ifdef CONFIG_PROC_FS | ||
| 162 | struct proc_dir_entry *dir; | ||
| 82 | #endif | 163 | #endif |
| 83 | } ____cacheline_aligned irq_desc_t; | 164 | } ____cacheline_aligned; |
| 84 | 165 | ||
| 85 | extern irq_desc_t irq_desc [NR_IRQS]; | 166 | extern struct irq_desc irq_desc[NR_IRQS]; |
| 86 | 167 | ||
| 87 | /* Return a pointer to the irq descriptor for IRQ. */ | 168 | /* |
| 88 | static inline irq_desc_t * | 169 | * Migration helpers for obsolete names, they will go away: |
| 89 | irq_descp (int irq) | 170 | */ |
| 90 | { | 171 | #define hw_interrupt_type irq_chip |
| 91 | return irq_desc + irq; | 172 | typedef struct irq_chip hw_irq_controller; |
| 92 | } | 173 | #define no_irq_type no_irq_chip |
| 174 | typedef struct irq_desc irq_desc_t; | ||
| 93 | 175 | ||
| 94 | #include <asm/hw_irq.h> /* the arch dependent stuff */ | 176 | /* |
| 177 | * Pick up the arch-dependent methods: | ||
| 178 | */ | ||
| 179 | #include <asm/hw_irq.h> | ||
| 95 | 180 | ||
| 96 | extern int setup_irq(unsigned int irq, struct irqaction * new); | 181 | extern int setup_irq(unsigned int irq, struct irqaction *new); |
| 97 | 182 | ||
| 98 | #ifdef CONFIG_GENERIC_HARDIRQS | 183 | #ifdef CONFIG_GENERIC_HARDIRQS |
| 99 | extern cpumask_t irq_affinity[NR_IRQS]; | 184 | |
| 185 | #ifndef handle_dynamic_tick | ||
| 186 | # define handle_dynamic_tick(a) do { } while (0) | ||
| 187 | #endif | ||
| 100 | 188 | ||
| 101 | #ifdef CONFIG_SMP | 189 | #ifdef CONFIG_SMP |
| 102 | static inline void set_native_irq_info(int irq, cpumask_t mask) | 190 | static inline void set_native_irq_info(int irq, cpumask_t mask) |
| 103 | { | 191 | { |
| 104 | irq_affinity[irq] = mask; | 192 | irq_desc[irq].affinity = mask; |
| 105 | } | 193 | } |
| 106 | #else | 194 | #else |
| 107 | static inline void set_native_irq_info(int irq, cpumask_t mask) | 195 | static inline void set_native_irq_info(int irq, cpumask_t mask) |
| @@ -111,8 +199,7 @@ static inline void set_native_irq_info(int irq, cpumask_t mask) | |||
| 111 | 199 | ||
| 112 | #ifdef CONFIG_SMP | 200 | #ifdef CONFIG_SMP |
| 113 | 201 | ||
| 114 | #if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE) | 202 | #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) |
| 115 | extern cpumask_t pending_irq_cpumask[NR_IRQS]; | ||
| 116 | 203 | ||
| 117 | void set_pending_irq(unsigned int irq, cpumask_t mask); | 204 | void set_pending_irq(unsigned int irq, cpumask_t mask); |
| 118 | void move_native_irq(int irq); | 205 | void move_native_irq(int irq); |
| @@ -133,7 +220,7 @@ static inline void set_irq_info(int irq, cpumask_t mask) | |||
| 133 | { | 220 | { |
| 134 | } | 221 | } |
| 135 | 222 | ||
| 136 | #else // CONFIG_PCI_MSI | 223 | #else /* CONFIG_PCI_MSI */ |
| 137 | 224 | ||
| 138 | static inline void move_irq(int irq) | 225 | static inline void move_irq(int irq) |
| 139 | { | 226 | { |
| @@ -144,26 +231,36 @@ static inline void set_irq_info(int irq, cpumask_t mask) | |||
| 144 | { | 231 | { |
| 145 | set_native_irq_info(irq, mask); | 232 | set_native_irq_info(irq, mask); |
| 146 | } | 233 | } |
| 147 | #endif // CONFIG_PCI_MSI | ||
| 148 | 234 | ||
| 149 | #else // CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE | 235 | #endif /* CONFIG_PCI_MSI */ |
| 236 | |||
| 237 | #else /* CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE */ | ||
| 238 | |||
| 239 | static inline void move_irq(int irq) | ||
| 240 | { | ||
| 241 | } | ||
| 242 | |||
| 243 | static inline void move_native_irq(int irq) | ||
| 244 | { | ||
| 245 | } | ||
| 246 | |||
| 247 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) | ||
| 248 | { | ||
| 249 | } | ||
| 150 | 250 | ||
| 151 | #define move_irq(x) | ||
| 152 | #define move_native_irq(x) | ||
| 153 | #define set_pending_irq(x,y) | ||
| 154 | static inline void set_irq_info(int irq, cpumask_t mask) | 251 | static inline void set_irq_info(int irq, cpumask_t mask) |
| 155 | { | 252 | { |
| 156 | set_native_irq_info(irq, mask); | 253 | set_native_irq_info(irq, mask); |
| 157 | } | 254 | } |
| 158 | 255 | ||
| 159 | #endif // CONFIG_GENERIC_PENDING_IRQ | 256 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ |
| 160 | 257 | ||
| 161 | #else // CONFIG_SMP | 258 | #else /* CONFIG_SMP */ |
| 162 | 259 | ||
| 163 | #define move_irq(x) | 260 | #define move_irq(x) |
| 164 | #define move_native_irq(x) | 261 | #define move_native_irq(x) |
| 165 | 262 | ||
| 166 | #endif // CONFIG_SMP | 263 | #endif /* CONFIG_SMP */ |
| 167 | 264 | ||
| 168 | #ifdef CONFIG_IRQBALANCE | 265 | #ifdef CONFIG_IRQBALANCE |
| 169 | extern void set_balance_irq_affinity(unsigned int irq, cpumask_t mask); | 266 | extern void set_balance_irq_affinity(unsigned int irq, cpumask_t mask); |
| @@ -173,32 +270,139 @@ static inline void set_balance_irq_affinity(unsigned int irq, cpumask_t mask) | |||
| 173 | } | 270 | } |
| 174 | #endif | 271 | #endif |
| 175 | 272 | ||
| 273 | #ifdef CONFIG_AUTO_IRQ_AFFINITY | ||
| 274 | extern int select_smp_affinity(unsigned int irq); | ||
| 275 | #else | ||
| 276 | static inline int select_smp_affinity(unsigned int irq) | ||
| 277 | { | ||
| 278 | return 1; | ||
| 279 | } | ||
| 280 | #endif | ||
| 281 | |||
| 176 | extern int no_irq_affinity; | 282 | extern int no_irq_affinity; |
| 177 | extern int noirqdebug_setup(char *str); | ||
| 178 | 283 | ||
| 179 | extern fastcall irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, | 284 | /* Handle irq action chains: */ |
| 180 | struct irqaction *action); | 285 | extern int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, |
| 286 | struct irqaction *action); | ||
| 287 | |||
| 288 | /* | ||
| 289 | * Built-in IRQ handlers for various IRQ types, | ||
| 290 | * callable via desc->chip->handle_irq() | ||
| 291 | */ | ||
| 292 | extern void fastcall | ||
| 293 | handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
| 294 | extern void fastcall | ||
| 295 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc, | ||
| 296 | struct pt_regs *regs); | ||
| 297 | extern void fastcall | ||
| 298 | handle_edge_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
| 299 | extern void fastcall | ||
| 300 | handle_simple_irq(unsigned int irq, struct irq_desc *desc, | ||
| 301 | struct pt_regs *regs); | ||
| 302 | extern void fastcall | ||
| 303 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc, | ||
| 304 | struct pt_regs *regs); | ||
| 305 | extern void fastcall | ||
| 306 | handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs); | ||
| 307 | |||
| 308 | /* | ||
| 309 | * Get a descriptive string for the highlevel handler, for | ||
| 310 | * /proc/interrupts output: | ||
| 311 | */ | ||
| 312 | extern const char * | ||
| 313 | handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
| 314 | struct pt_regs *)); | ||
| 315 | |||
| 316 | /* | ||
| 317 | * Monolithic do_IRQ implementation. | ||
| 318 | * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly) | ||
| 319 | */ | ||
| 181 | extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); | 320 | extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); |
| 182 | extern void note_interrupt(unsigned int irq, irq_desc_t *desc, | ||
| 183 | int action_ret, struct pt_regs *regs); | ||
| 184 | extern int can_request_irq(unsigned int irq, unsigned long irqflags); | ||
| 185 | 321 | ||
| 322 | /* | ||
| 323 | * Architectures call this to let the generic IRQ layer | ||
| 324 | * handle an interrupt. If the descriptor is attached to an | ||
| 325 | * irqchip-style controller then we call the ->handle_irq() handler, | ||
| 326 | * and it calls __do_IRQ() if it's attached to an irqtype-style controller. | ||
| 327 | */ | ||
| 328 | static inline void generic_handle_irq(unsigned int irq, struct pt_regs *regs) | ||
| 329 | { | ||
| 330 | struct irq_desc *desc = irq_desc + irq; | ||
| 331 | |||
| 332 | if (likely(desc->handle_irq)) | ||
| 333 | desc->handle_irq(irq, desc, regs); | ||
| 334 | else | ||
| 335 | __do_IRQ(irq, regs); | ||
| 336 | } | ||
| 337 | |||
| 338 | /* Handling of unhandled and spurious interrupts: */ | ||
| 339 | extern void note_interrupt(unsigned int irq, struct irq_desc *desc, | ||
| 340 | int action_ret, struct pt_regs *regs); | ||
| 341 | |||
| 342 | /* Resending of interrupts :*/ | ||
| 343 | void check_irq_resend(struct irq_desc *desc, unsigned int irq); | ||
| 344 | |||
| 345 | /* Initialize /proc/irq/ */ | ||
| 186 | extern void init_irq_proc(void); | 346 | extern void init_irq_proc(void); |
| 187 | 347 | ||
| 188 | #ifdef CONFIG_AUTO_IRQ_AFFINITY | 348 | /* Enable/disable irq debugging output: */ |
| 189 | extern int select_smp_affinity(unsigned int irq); | 349 | extern int noirqdebug_setup(char *str); |
| 190 | #else | 350 | |
| 191 | static inline int | 351 | /* Checks whether the interrupt can be requested by request_irq(): */ |
| 192 | select_smp_affinity(unsigned int irq) | 352 | extern int can_request_irq(unsigned int irq, unsigned long irqflags); |
| 353 | |||
| 354 | /* Dummy irq-chip implementations: */ | ||
| 355 | extern struct irq_chip no_irq_chip; | ||
| 356 | extern struct irq_chip dummy_irq_chip; | ||
| 357 | |||
| 358 | extern void | ||
| 359 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | ||
| 360 | void fastcall (*handle)(unsigned int, | ||
| 361 | struct irq_desc *, | ||
| 362 | struct pt_regs *)); | ||
| 363 | extern void | ||
| 364 | __set_irq_handler(unsigned int irq, | ||
| 365 | void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
| 366 | struct pt_regs *), | ||
| 367 | int is_chained); | ||
| 368 | |||
| 369 | /* | ||
| 370 | * Set a highlevel flow handler for a given IRQ: | ||
| 371 | */ | ||
| 372 | static inline void | ||
| 373 | set_irq_handler(unsigned int irq, | ||
| 374 | void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
| 375 | struct pt_regs *)) | ||
| 193 | { | 376 | { |
| 194 | return 1; | 377 | __set_irq_handler(irq, handle, 0); |
| 195 | } | 378 | } |
| 196 | #endif | ||
| 197 | 379 | ||
| 198 | #endif | 380 | /* |
| 381 | * Set a highlevel chained flow handler for a given IRQ. | ||
| 382 | * (a chained handler is automatically enabled and set to | ||
| 383 | * IRQ_NOREQUEST and IRQ_NOPROBE) | ||
| 384 | */ | ||
| 385 | static inline void | ||
| 386 | set_irq_chained_handler(unsigned int irq, | ||
| 387 | void fastcall (*handle)(unsigned int, struct irq_desc *, | ||
| 388 | struct pt_regs *)) | ||
| 389 | { | ||
| 390 | __set_irq_handler(irq, handle, 1); | ||
| 391 | } | ||
| 199 | 392 | ||
| 200 | extern hw_irq_controller no_irq_type; /* needed in every arch ? */ | 393 | /* Set/get chip/data for an IRQ: */ |
| 201 | 394 | ||
| 202 | #endif | 395 | extern int set_irq_chip(unsigned int irq, struct irq_chip *chip); |
| 396 | extern int set_irq_data(unsigned int irq, void *data); | ||
| 397 | extern int set_irq_chip_data(unsigned int irq, void *data); | ||
| 398 | extern int set_irq_type(unsigned int irq, unsigned int type); | ||
| 399 | |||
| 400 | #define get_irq_chip(irq) (irq_desc[irq].chip) | ||
| 401 | #define get_irq_chip_data(irq) (irq_desc[irq].chip_data) | ||
| 402 | #define get_irq_data(irq) (irq_desc[irq].handler_data) | ||
| 403 | |||
| 404 | #endif /* CONFIG_GENERIC_HARDIRQS */ | ||
| 405 | |||
| 406 | #endif /* !CONFIG_S390 */ | ||
| 203 | 407 | ||
| 204 | #endif /* __irq_h */ | 408 | #endif /* _LINUX_IRQ_H */ |
diff --git a/include/linux/isdn/tpam.h b/include/linux/isdn/tpam.h deleted file mode 100644 index d18dd0dc570d..000000000000 --- a/include/linux/isdn/tpam.h +++ /dev/null | |||
| @@ -1,55 +0,0 @@ | |||
| 1 | /* $Id: tpam.h,v 1.1.2.1 2001/06/08 08:23:46 kai Exp $ | ||
| 2 | * | ||
| 3 | * Turbo PAM ISDN driver for Linux. (Kernel Driver) | ||
| 4 | * | ||
| 5 | * Copyright 2001 Stelian Pop <stelian.pop@fr.alcove.com>, Alcôve | ||
| 6 | * | ||
| 7 | * For all support questions please contact: <support@auvertech.fr> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2, or (at your option) | ||
| 12 | * any later version. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 22 | * | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef _TPAM_H_ | ||
| 26 | #define _TPAM_H_ | ||
| 27 | |||
| 28 | #include <linux/types.h> | ||
| 29 | |||
| 30 | /* IOCTL commands */ | ||
| 31 | #define TPAM_CMD_DSPLOAD 0x0001 | ||
| 32 | #define TPAM_CMD_DSPSAVE 0x0002 | ||
| 33 | #define TPAM_CMD_DSPRUN 0x0003 | ||
| 34 | #define TPAM_CMD_LOOPMODEON 0x0004 | ||
| 35 | #define TPAM_CMD_LOOPMODEOFF 0x0005 | ||
| 36 | |||
| 37 | /* addresses of debug information zones on board */ | ||
| 38 | #define TPAM_TRAPAUDIT_REGISTER 0x005493e4 | ||
| 39 | #define TPAM_NCOAUDIT_REGISTER 0x00500000 | ||
| 40 | #define TPAM_MSGAUDIT_REGISTER 0x008E30F0 | ||
| 41 | |||
| 42 | /* length of debug information zones on board */ | ||
| 43 | #define TPAM_TRAPAUDIT_LENGTH 10000 | ||
| 44 | #define TPAM_NCOAUDIT_LENGTH 300000 | ||
| 45 | #define TPAM_NCOAUDIT_COUNT 30 | ||
| 46 | #define TPAM_MSGAUDIT_LENGTH 60000 | ||
| 47 | |||
| 48 | /* IOCTL load/save parameter */ | ||
| 49 | typedef struct tpam_dsp_ioctl { | ||
| 50 | __u32 address; /* address to load/save data */ | ||
| 51 | __u32 data_len; /* size of data to be loaded/saved */ | ||
| 52 | __u8 data[0]; /* data */ | ||
| 53 | } tpam_dsp_ioctl; | ||
| 54 | |||
| 55 | #endif /* _TPAM_H_ */ | ||
diff --git a/include/linux/key.h b/include/linux/key.h index e693e729bc92..169f05e4863e 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
| @@ -177,7 +177,8 @@ struct key { | |||
| 177 | /* | 177 | /* |
| 178 | * kernel managed key type definition | 178 | * kernel managed key type definition |
| 179 | */ | 179 | */ |
| 180 | typedef int (*request_key_actor_t)(struct key *key, struct key *authkey, const char *op); | 180 | typedef int (*request_key_actor_t)(struct key *key, struct key *authkey, |
| 181 | const char *op, void *aux); | ||
| 181 | 182 | ||
| 182 | struct key_type { | 183 | struct key_type { |
| 183 | /* name of the type */ | 184 | /* name of the type */ |
| @@ -285,6 +286,11 @@ extern struct key *request_key(struct key_type *type, | |||
| 285 | const char *description, | 286 | const char *description, |
| 286 | const char *callout_info); | 287 | const char *callout_info); |
| 287 | 288 | ||
| 289 | extern struct key *request_key_with_auxdata(struct key_type *type, | ||
| 290 | const char *description, | ||
| 291 | const char *callout_info, | ||
| 292 | void *aux); | ||
| 293 | |||
| 288 | extern int key_validate(struct key *key); | 294 | extern int key_validate(struct key *key); |
| 289 | 295 | ||
| 290 | extern key_ref_t key_create_or_update(key_ref_t keyring, | 296 | extern key_ref_t key_create_or_update(key_ref_t keyring, |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 2d229327959e..0503b2ed8bae 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -46,6 +46,8 @@ enum kobject_action { | |||
| 46 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices (broken) */ | 46 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices (broken) */ |
| 47 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* device offline */ | 47 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* device offline */ |
| 48 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* device online */ | 48 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* device online */ |
| 49 | KOBJ_UNDOCK = (__force kobject_action_t) 0x08, /* undocking */ | ||
| 50 | KOBJ_DOCK = (__force kobject_action_t) 0x09, /* dock */ | ||
| 49 | }; | 51 | }; |
| 50 | 52 | ||
| 51 | struct kobject { | 53 | struct kobject { |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 5b584dafb5a6..b03cfb91e228 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -40,7 +40,6 @@ struct miscdevice { | |||
| 40 | struct list_head list; | 40 | struct list_head list; |
| 41 | struct device *dev; | 41 | struct device *dev; |
| 42 | struct class_device *class; | 42 | struct class_device *class; |
| 43 | char devfs_name[64]; | ||
| 44 | }; | 43 | }; |
| 45 | 44 | ||
| 46 | extern int misc_register(struct miscdevice * misc); | 45 | extern int misc_register(struct miscdevice * misc); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index c41a1299b8cf..75179529e399 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -36,7 +36,6 @@ extern int sysctl_legacy_va_layout; | |||
| 36 | #include <asm/page.h> | 36 | #include <asm/page.h> |
| 37 | #include <asm/pgtable.h> | 37 | #include <asm/pgtable.h> |
| 38 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
| 39 | #include <asm/atomic.h> | ||
| 40 | 39 | ||
| 41 | #define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) | 40 | #define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) |
| 42 | 41 | ||
| @@ -515,6 +514,11 @@ static inline void set_page_links(struct page *page, unsigned long zone, | |||
| 515 | set_page_section(page, pfn_to_section_nr(pfn)); | 514 | set_page_section(page, pfn_to_section_nr(pfn)); |
| 516 | } | 515 | } |
| 517 | 516 | ||
| 517 | /* | ||
| 518 | * Some inline functions in vmstat.h depend on page_zone() | ||
| 519 | */ | ||
| 520 | #include <linux/vmstat.h> | ||
| 521 | |||
| 518 | #ifndef CONFIG_DISCONTIGMEM | 522 | #ifndef CONFIG_DISCONTIGMEM |
| 519 | /* The array of struct pages - for discontigmem use pgdat->lmem_map */ | 523 | /* The array of struct pages - for discontigmem use pgdat->lmem_map */ |
| 520 | extern struct page *mem_map; | 524 | extern struct page *mem_map; |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index d6120fa69116..27e748eb72b0 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -46,6 +46,27 @@ struct zone_padding { | |||
| 46 | #define ZONE_PADDING(name) | 46 | #define ZONE_PADDING(name) |
| 47 | #endif | 47 | #endif |
| 48 | 48 | ||
| 49 | enum zone_stat_item { | ||
| 50 | NR_ANON_PAGES, /* Mapped anonymous pages */ | ||
| 51 | NR_FILE_MAPPED, /* pagecache pages mapped into pagetables. | ||
| 52 | only modified from process context */ | ||
| 53 | NR_FILE_PAGES, | ||
| 54 | NR_SLAB, /* Pages used by slab allocator */ | ||
| 55 | NR_PAGETABLE, /* used for pagetables */ | ||
| 56 | NR_FILE_DIRTY, | ||
| 57 | NR_WRITEBACK, | ||
| 58 | NR_UNSTABLE_NFS, /* NFS unstable pages */ | ||
| 59 | NR_BOUNCE, | ||
| 60 | #ifdef CONFIG_NUMA | ||
| 61 | NUMA_HIT, /* allocated in intended node */ | ||
| 62 | NUMA_MISS, /* allocated in non intended node */ | ||
| 63 | NUMA_FOREIGN, /* was intended here, hit elsewhere */ | ||
| 64 | NUMA_INTERLEAVE_HIT, /* interleaver preferred this zone */ | ||
| 65 | NUMA_LOCAL, /* allocation from local node */ | ||
| 66 | NUMA_OTHER, /* allocation from other node */ | ||
| 67 | #endif | ||
| 68 | NR_VM_ZONE_STAT_ITEMS }; | ||
| 69 | |||
| 49 | struct per_cpu_pages { | 70 | struct per_cpu_pages { |
| 50 | int count; /* number of pages in the list */ | 71 | int count; /* number of pages in the list */ |
| 51 | int high; /* high watermark, emptying needed */ | 72 | int high; /* high watermark, emptying needed */ |
| @@ -55,13 +76,8 @@ struct per_cpu_pages { | |||
| 55 | 76 | ||
| 56 | struct per_cpu_pageset { | 77 | struct per_cpu_pageset { |
| 57 | struct per_cpu_pages pcp[2]; /* 0: hot. 1: cold */ | 78 | struct per_cpu_pages pcp[2]; /* 0: hot. 1: cold */ |
| 58 | #ifdef CONFIG_NUMA | 79 | #ifdef CONFIG_SMP |
| 59 | unsigned long numa_hit; /* allocated in intended node */ | 80 | s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS]; |
| 60 | unsigned long numa_miss; /* allocated in non intended node */ | ||
| 61 | unsigned long numa_foreign; /* was intended here, hit elsewhere */ | ||
| 62 | unsigned long interleave_hit; /* interleaver prefered this zone */ | ||
| 63 | unsigned long local_node; /* allocation from local node */ | ||
| 64 | unsigned long other_node; /* allocation from other node */ | ||
| 65 | #endif | 81 | #endif |
| 66 | } ____cacheline_aligned_in_smp; | 82 | } ____cacheline_aligned_in_smp; |
| 67 | 83 | ||
| @@ -165,12 +181,8 @@ struct zone { | |||
| 165 | /* A count of how many reclaimers are scanning this zone */ | 181 | /* A count of how many reclaimers are scanning this zone */ |
| 166 | atomic_t reclaim_in_progress; | 182 | atomic_t reclaim_in_progress; |
| 167 | 183 | ||
| 168 | /* | 184 | /* Zone statistics */ |
| 169 | * timestamp (in jiffies) of the last zone reclaim that did not | 185 | atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; |
| 170 | * result in freeing of pages. This is used to avoid repeated scans | ||
| 171 | * if all memory in the zone is in use. | ||
| 172 | */ | ||
| 173 | unsigned long last_unsuccessful_zone_reclaim; | ||
| 174 | 186 | ||
| 175 | /* | 187 | /* |
| 176 | * prev_priority holds the scanning priority for this zone. It is | 188 | * prev_priority holds the scanning priority for this zone. It is |
diff --git a/include/linux/net.h b/include/linux/net.h index 385e68f5bd93..b20c53c74413 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
| @@ -61,6 +61,7 @@ typedef enum { | |||
| 61 | #define SOCK_ASYNC_WAITDATA 1 | 61 | #define SOCK_ASYNC_WAITDATA 1 |
| 62 | #define SOCK_NOSPACE 2 | 62 | #define SOCK_NOSPACE 2 |
| 63 | #define SOCK_PASSCRED 3 | 63 | #define SOCK_PASSCRED 3 |
| 64 | #define SOCK_PASSSEC 4 | ||
| 64 | 65 | ||
| 65 | #ifndef ARCH_HAS_SOCKET_TYPES | 66 | #ifndef ARCH_HAS_SOCKET_TYPES |
| 66 | /** | 67 | /** |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 03cd7551a7a1..85f99f60deea 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -313,8 +313,12 @@ struct net_device | |||
| 313 | 313 | ||
| 314 | /* Segmentation offload features */ | 314 | /* Segmentation offload features */ |
| 315 | #define NETIF_F_GSO_SHIFT 16 | 315 | #define NETIF_F_GSO_SHIFT 16 |
| 316 | #define NETIF_F_GSO_MASK 0xffff0000 | ||
| 316 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) | 317 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) |
| 317 | #define NETIF_F_UFO (SKB_GSO_UDPV4 << NETIF_F_GSO_SHIFT) | 318 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) |
| 319 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) | ||
| 320 | #define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT) | ||
| 321 | #define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT) | ||
| 318 | 322 | ||
| 319 | #define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) | 323 | #define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) |
| 320 | #define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM) | 324 | #define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM) |
| @@ -543,7 +547,8 @@ struct packet_type { | |||
| 543 | struct net_device *, | 547 | struct net_device *, |
| 544 | struct packet_type *, | 548 | struct packet_type *, |
| 545 | struct net_device *); | 549 | struct net_device *); |
| 546 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, int sg); | 550 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, |
| 551 | int features); | ||
| 547 | void *af_packet_priv; | 552 | void *af_packet_priv; |
| 548 | struct list_head list; | 553 | struct list_head list; |
| 549 | }; | 554 | }; |
| @@ -968,7 +973,7 @@ extern int netdev_max_backlog; | |||
| 968 | extern int weight_p; | 973 | extern int weight_p; |
| 969 | extern int netdev_set_master(struct net_device *dev, struct net_device *master); | 974 | extern int netdev_set_master(struct net_device *dev, struct net_device *master); |
| 970 | extern int skb_checksum_help(struct sk_buff *skb, int inward); | 975 | extern int skb_checksum_help(struct sk_buff *skb, int inward); |
| 971 | extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, int sg); | 976 | extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features); |
| 972 | #ifdef CONFIG_BUG | 977 | #ifdef CONFIG_BUG |
| 973 | extern void netdev_rx_csum_fault(struct net_device *dev); | 978 | extern void netdev_rx_csum_fault(struct net_device *dev); |
| 974 | #else | 979 | #else |
| @@ -988,11 +993,21 @@ extern void dev_seq_stop(struct seq_file *seq, void *v); | |||
| 988 | 993 | ||
| 989 | extern void linkwatch_run_queue(void); | 994 | extern void linkwatch_run_queue(void); |
| 990 | 995 | ||
| 996 | static inline int net_gso_ok(int features, int gso_type) | ||
| 997 | { | ||
| 998 | int feature = gso_type << NETIF_F_GSO_SHIFT; | ||
| 999 | return (features & feature) == feature; | ||
| 1000 | } | ||
| 1001 | |||
| 1002 | static inline int skb_gso_ok(struct sk_buff *skb, int features) | ||
| 1003 | { | ||
| 1004 | return net_gso_ok(features, skb_shinfo(skb)->gso_size ? | ||
| 1005 | skb_shinfo(skb)->gso_type : 0); | ||
| 1006 | } | ||
| 1007 | |||
| 991 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | 1008 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) |
| 992 | { | 1009 | { |
| 993 | int feature = skb_shinfo(skb)->gso_type << NETIF_F_GSO_SHIFT; | 1010 | return !skb_gso_ok(skb, dev->features); |
| 994 | return skb_shinfo(skb)->gso_size && | ||
| 995 | (dev->features & feature) != feature; | ||
| 996 | } | 1011 | } |
| 997 | 1012 | ||
| 998 | #endif /* __KERNEL__ */ | 1013 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index d90b1bb37563..55ea853d57bc 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | #ifndef _LINUX_NFS_FS_H | 9 | #ifndef _LINUX_NFS_FS_H |
| 10 | #define _LINUX_NFS_FS_H | 10 | #define _LINUX_NFS_FS_H |
| 11 | 11 | ||
| 12 | #include <linux/config.h> | ||
| 13 | #include <linux/in.h> | 12 | #include <linux/in.h> |
| 14 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
| 15 | #include <linux/pagemap.h> | 14 | #include <linux/pagemap.h> |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 0c076d58c676..5748642e9f36 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
| @@ -5,12 +5,8 @@ | |||
| 5 | #ifndef PAGE_FLAGS_H | 5 | #ifndef PAGE_FLAGS_H |
| 6 | #define PAGE_FLAGS_H | 6 | #define PAGE_FLAGS_H |
| 7 | 7 | ||
| 8 | #include <linux/percpu.h> | ||
| 9 | #include <linux/cache.h> | ||
| 10 | #include <linux/types.h> | 8 | #include <linux/types.h> |
| 11 | 9 | ||
| 12 | #include <asm/pgtable.h> | ||
| 13 | |||
| 14 | /* | 10 | /* |
| 15 | * Various page->flags bits: | 11 | * Various page->flags bits: |
| 16 | * | 12 | * |
| @@ -103,134 +99,6 @@ | |||
| 103 | #endif | 99 | #endif |
| 104 | 100 | ||
| 105 | /* | 101 | /* |
| 106 | * Global page accounting. One instance per CPU. Only unsigned longs are | ||
| 107 | * allowed. | ||
| 108 | * | ||
| 109 | * - Fields can be modified with xxx_page_state and xxx_page_state_zone at | ||
| 110 | * any time safely (which protects the instance from modification by | ||
| 111 | * interrupt. | ||
| 112 | * - The __xxx_page_state variants can be used safely when interrupts are | ||
| 113 | * disabled. | ||
| 114 | * - The __xxx_page_state variants can be used if the field is only | ||
| 115 | * modified from process context and protected from preemption, or only | ||
| 116 | * modified from interrupt context. In this case, the field should be | ||
| 117 | * commented here. | ||
| 118 | */ | ||
| 119 | struct page_state { | ||
| 120 | unsigned long nr_dirty; /* Dirty writeable pages */ | ||
| 121 | unsigned long nr_writeback; /* Pages under writeback */ | ||
| 122 | unsigned long nr_unstable; /* NFS unstable pages */ | ||
| 123 | unsigned long nr_page_table_pages;/* Pages used for pagetables */ | ||
| 124 | unsigned long nr_mapped; /* mapped into pagetables. | ||
| 125 | * only modified from process context */ | ||
| 126 | unsigned long nr_slab; /* In slab */ | ||
| 127 | #define GET_PAGE_STATE_LAST nr_slab | ||
| 128 | |||
| 129 | /* | ||
| 130 | * The below are zeroed by get_page_state(). Use get_full_page_state() | ||
| 131 | * to add up all these. | ||
| 132 | */ | ||
| 133 | unsigned long pgpgin; /* Disk reads */ | ||
| 134 | unsigned long pgpgout; /* Disk writes */ | ||
| 135 | unsigned long pswpin; /* swap reads */ | ||
| 136 | unsigned long pswpout; /* swap writes */ | ||
| 137 | |||
| 138 | unsigned long pgalloc_high; /* page allocations */ | ||
| 139 | unsigned long pgalloc_normal; | ||
| 140 | unsigned long pgalloc_dma32; | ||
| 141 | unsigned long pgalloc_dma; | ||
| 142 | |||
| 143 | unsigned long pgfree; /* page freeings */ | ||
| 144 | unsigned long pgactivate; /* pages moved inactive->active */ | ||
| 145 | unsigned long pgdeactivate; /* pages moved active->inactive */ | ||
| 146 | |||
| 147 | unsigned long pgfault; /* faults (major+minor) */ | ||
| 148 | unsigned long pgmajfault; /* faults (major only) */ | ||
| 149 | |||
| 150 | unsigned long pgrefill_high; /* inspected in refill_inactive_zone */ | ||
| 151 | unsigned long pgrefill_normal; | ||
| 152 | unsigned long pgrefill_dma32; | ||
| 153 | unsigned long pgrefill_dma; | ||
| 154 | |||
| 155 | unsigned long pgsteal_high; /* total highmem pages reclaimed */ | ||
| 156 | unsigned long pgsteal_normal; | ||
| 157 | unsigned long pgsteal_dma32; | ||
| 158 | unsigned long pgsteal_dma; | ||
| 159 | |||
| 160 | unsigned long pgscan_kswapd_high;/* total highmem pages scanned */ | ||
| 161 | unsigned long pgscan_kswapd_normal; | ||
| 162 | unsigned long pgscan_kswapd_dma32; | ||
| 163 | unsigned long pgscan_kswapd_dma; | ||
| 164 | |||
| 165 | unsigned long pgscan_direct_high;/* total highmem pages scanned */ | ||
| 166 | unsigned long pgscan_direct_normal; | ||
| 167 | unsigned long pgscan_direct_dma32; | ||
| 168 | unsigned long pgscan_direct_dma; | ||
| 169 | |||
| 170 | unsigned long pginodesteal; /* pages reclaimed via inode freeing */ | ||
| 171 | unsigned long slabs_scanned; /* slab objects scanned */ | ||
| 172 | unsigned long kswapd_steal; /* pages reclaimed by kswapd */ | ||
| 173 | unsigned long kswapd_inodesteal;/* reclaimed via kswapd inode freeing */ | ||
| 174 | unsigned long pageoutrun; /* kswapd's calls to page reclaim */ | ||
| 175 | unsigned long allocstall; /* direct reclaim calls */ | ||
| 176 | |||
| 177 | unsigned long pgrotated; /* pages rotated to tail of the LRU */ | ||
| 178 | unsigned long nr_bounce; /* pages for bounce buffers */ | ||
| 179 | }; | ||
| 180 | |||
| 181 | extern void get_page_state(struct page_state *ret); | ||
| 182 | extern void get_page_state_node(struct page_state *ret, int node); | ||
| 183 | extern void get_full_page_state(struct page_state *ret); | ||
| 184 | extern unsigned long read_page_state_offset(unsigned long offset); | ||
| 185 | extern void mod_page_state_offset(unsigned long offset, unsigned long delta); | ||
| 186 | extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | ||
| 187 | |||
| 188 | #define read_page_state(member) \ | ||
| 189 | read_page_state_offset(offsetof(struct page_state, member)) | ||
| 190 | |||
| 191 | #define mod_page_state(member, delta) \ | ||
| 192 | mod_page_state_offset(offsetof(struct page_state, member), (delta)) | ||
| 193 | |||
| 194 | #define __mod_page_state(member, delta) \ | ||
| 195 | __mod_page_state_offset(offsetof(struct page_state, member), (delta)) | ||
| 196 | |||
| 197 | #define inc_page_state(member) mod_page_state(member, 1UL) | ||
| 198 | #define dec_page_state(member) mod_page_state(member, 0UL - 1) | ||
| 199 | #define add_page_state(member,delta) mod_page_state(member, (delta)) | ||
| 200 | #define sub_page_state(member,delta) mod_page_state(member, 0UL - (delta)) | ||
| 201 | |||
| 202 | #define __inc_page_state(member) __mod_page_state(member, 1UL) | ||
| 203 | #define __dec_page_state(member) __mod_page_state(member, 0UL - 1) | ||
| 204 | #define __add_page_state(member,delta) __mod_page_state(member, (delta)) | ||
| 205 | #define __sub_page_state(member,delta) __mod_page_state(member, 0UL - (delta)) | ||
| 206 | |||
| 207 | #define page_state(member) (*__page_state(offsetof(struct page_state, member))) | ||
| 208 | |||
| 209 | #define state_zone_offset(zone, member) \ | ||
| 210 | ({ \ | ||
| 211 | unsigned offset; \ | ||
| 212 | if (is_highmem(zone)) \ | ||
| 213 | offset = offsetof(struct page_state, member##_high); \ | ||
| 214 | else if (is_normal(zone)) \ | ||
| 215 | offset = offsetof(struct page_state, member##_normal); \ | ||
| 216 | else if (is_dma32(zone)) \ | ||
| 217 | offset = offsetof(struct page_state, member##_dma32); \ | ||
| 218 | else \ | ||
| 219 | offset = offsetof(struct page_state, member##_dma); \ | ||
| 220 | offset; \ | ||
| 221 | }) | ||
| 222 | |||
| 223 | #define __mod_page_state_zone(zone, member, delta) \ | ||
| 224 | do { \ | ||
| 225 | __mod_page_state_offset(state_zone_offset(zone, member), (delta)); \ | ||
| 226 | } while (0) | ||
| 227 | |||
| 228 | #define mod_page_state_zone(zone, member, delta) \ | ||
| 229 | do { \ | ||
| 230 | mod_page_state_offset(state_zone_offset(zone, member), (delta)); \ | ||
| 231 | } while (0) | ||
| 232 | |||
| 233 | /* | ||
| 234 | * Manipulation of page state flags | 102 | * Manipulation of page state flags |
| 235 | */ | 103 | */ |
| 236 | #define PageLocked(page) \ | 104 | #define PageLocked(page) \ |
| @@ -254,7 +122,14 @@ extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | |||
| 254 | #define TestClearPageReferenced(page) test_and_clear_bit(PG_referenced, &(page)->flags) | 122 | #define TestClearPageReferenced(page) test_and_clear_bit(PG_referenced, &(page)->flags) |
| 255 | 123 | ||
| 256 | #define PageUptodate(page) test_bit(PG_uptodate, &(page)->flags) | 124 | #define PageUptodate(page) test_bit(PG_uptodate, &(page)->flags) |
| 257 | #ifndef SetPageUptodate | 125 | #ifdef CONFIG_S390 |
| 126 | #define SetPageUptodate(_page) \ | ||
| 127 | do { \ | ||
| 128 | struct page *__page = (_page); \ | ||
| 129 | if (!test_and_set_bit(PG_uptodate, &__page->flags)) \ | ||
| 130 | page_test_and_clear_dirty(_page); \ | ||
| 131 | } while (0) | ||
| 132 | #else | ||
| 258 | #define SetPageUptodate(page) set_bit(PG_uptodate, &(page)->flags) | 133 | #define SetPageUptodate(page) set_bit(PG_uptodate, &(page)->flags) |
| 259 | #endif | 134 | #endif |
| 260 | #define ClearPageUptodate(page) clear_bit(PG_uptodate, &(page)->flags) | 135 | #define ClearPageUptodate(page) clear_bit(PG_uptodate, &(page)->flags) |
| @@ -306,7 +181,7 @@ extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | |||
| 306 | do { \ | 181 | do { \ |
| 307 | if (!test_and_set_bit(PG_writeback, \ | 182 | if (!test_and_set_bit(PG_writeback, \ |
| 308 | &(page)->flags)) \ | 183 | &(page)->flags)) \ |
| 309 | inc_page_state(nr_writeback); \ | 184 | inc_zone_page_state(page, NR_WRITEBACK); \ |
| 310 | } while (0) | 185 | } while (0) |
| 311 | #define TestSetPageWriteback(page) \ | 186 | #define TestSetPageWriteback(page) \ |
| 312 | ({ \ | 187 | ({ \ |
| @@ -314,14 +189,14 @@ extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | |||
| 314 | ret = test_and_set_bit(PG_writeback, \ | 189 | ret = test_and_set_bit(PG_writeback, \ |
| 315 | &(page)->flags); \ | 190 | &(page)->flags); \ |
| 316 | if (!ret) \ | 191 | if (!ret) \ |
| 317 | inc_page_state(nr_writeback); \ | 192 | inc_zone_page_state(page, NR_WRITEBACK); \ |
| 318 | ret; \ | 193 | ret; \ |
| 319 | }) | 194 | }) |
| 320 | #define ClearPageWriteback(page) \ | 195 | #define ClearPageWriteback(page) \ |
| 321 | do { \ | 196 | do { \ |
| 322 | if (test_and_clear_bit(PG_writeback, \ | 197 | if (test_and_clear_bit(PG_writeback, \ |
| 323 | &(page)->flags)) \ | 198 | &(page)->flags)) \ |
| 324 | dec_page_state(nr_writeback); \ | 199 | dec_zone_page_state(page, NR_WRITEBACK); \ |
| 325 | } while (0) | 200 | } while (0) |
| 326 | #define TestClearPageWriteback(page) \ | 201 | #define TestClearPageWriteback(page) \ |
| 327 | ({ \ | 202 | ({ \ |
| @@ -329,7 +204,7 @@ extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | |||
| 329 | ret = test_and_clear_bit(PG_writeback, \ | 204 | ret = test_and_clear_bit(PG_writeback, \ |
| 330 | &(page)->flags); \ | 205 | &(page)->flags); \ |
| 331 | if (ret) \ | 206 | if (ret) \ |
| 332 | dec_page_state(nr_writeback); \ | 207 | dec_zone_page_state(page, NR_WRITEBACK); \ |
| 333 | ret; \ | 208 | ret; \ |
| 334 | }) | 209 | }) |
| 335 | 210 | ||
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 1245df7141aa..0a2f5d27f60e 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
| @@ -113,51 +113,6 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping, | |||
| 113 | extern void remove_from_page_cache(struct page *page); | 113 | extern void remove_from_page_cache(struct page *page); |
| 114 | extern void __remove_from_page_cache(struct page *page); | 114 | extern void __remove_from_page_cache(struct page *page); |
| 115 | 115 | ||
| 116 | extern atomic_t nr_pagecache; | ||
| 117 | |||
| 118 | #ifdef CONFIG_SMP | ||
| 119 | |||
| 120 | #define PAGECACHE_ACCT_THRESHOLD max(16, NR_CPUS * 2) | ||
| 121 | DECLARE_PER_CPU(long, nr_pagecache_local); | ||
| 122 | |||
| 123 | /* | ||
| 124 | * pagecache_acct implements approximate accounting for pagecache. | ||
| 125 | * vm_enough_memory() do not need high accuracy. Writers will keep | ||
| 126 | * an offset in their per-cpu arena and will spill that into the | ||
| 127 | * global count whenever the absolute value of the local count | ||
| 128 | * exceeds the counter's threshold. | ||
| 129 | * | ||
| 130 | * MUST be protected from preemption. | ||
| 131 | * current protection is mapping->page_lock. | ||
| 132 | */ | ||
| 133 | static inline void pagecache_acct(int count) | ||
| 134 | { | ||
| 135 | long *local; | ||
| 136 | |||
| 137 | local = &__get_cpu_var(nr_pagecache_local); | ||
| 138 | *local += count; | ||
| 139 | if (*local > PAGECACHE_ACCT_THRESHOLD || *local < -PAGECACHE_ACCT_THRESHOLD) { | ||
| 140 | atomic_add(*local, &nr_pagecache); | ||
| 141 | *local = 0; | ||
| 142 | } | ||
| 143 | } | ||
| 144 | |||
| 145 | #else | ||
| 146 | |||
| 147 | static inline void pagecache_acct(int count) | ||
| 148 | { | ||
| 149 | atomic_add(count, &nr_pagecache); | ||
| 150 | } | ||
| 151 | #endif | ||
| 152 | |||
| 153 | static inline unsigned long get_page_cache_size(void) | ||
| 154 | { | ||
| 155 | int ret = atomic_read(&nr_pagecache); | ||
| 156 | if (unlikely(ret < 0)) | ||
| 157 | ret = 0; | ||
| 158 | return ret; | ||
| 159 | } | ||
| 160 | |||
| 161 | /* | 116 | /* |
| 162 | * Return byte-offset into filesystem object for page. | 117 | * Return byte-offset into filesystem object for page. |
| 163 | */ | 118 | */ |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 62a8c22f5f60..983fca251b25 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -404,8 +404,8 @@ int pcibios_enable_device(struct pci_dev *, int mask); | |||
| 404 | char *pcibios_setup (char *str); | 404 | char *pcibios_setup (char *str); |
| 405 | 405 | ||
| 406 | /* Used only when drivers/pci/setup.c is used */ | 406 | /* Used only when drivers/pci/setup.c is used */ |
| 407 | void pcibios_align_resource(void *, struct resource *, | 407 | void pcibios_align_resource(void *, struct resource *, resource_size_t, |
| 408 | unsigned long, unsigned long); | 408 | resource_size_t); |
| 409 | void pcibios_update_irq(struct pci_dev *, int irq); | 409 | void pcibios_update_irq(struct pci_dev *, int irq); |
| 410 | 410 | ||
| 411 | /* Generic PCI functions used internally */ | 411 | /* Generic PCI functions used internally */ |
| @@ -532,10 +532,10 @@ void pci_release_region(struct pci_dev *, int); | |||
| 532 | 532 | ||
| 533 | /* drivers/pci/bus.c */ | 533 | /* drivers/pci/bus.c */ |
| 534 | int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, | 534 | int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, |
| 535 | unsigned long size, unsigned long align, | 535 | resource_size_t size, resource_size_t align, |
| 536 | unsigned long min, unsigned int type_mask, | 536 | resource_size_t min, unsigned int type_mask, |
| 537 | void (*alignf)(void *, struct resource *, | 537 | void (*alignf)(void *, struct resource *, |
| 538 | unsigned long, unsigned long), | 538 | resource_size_t, resource_size_t), |
| 539 | void *alignf_data); | 539 | void *alignf_data); |
| 540 | void pci_enable_bridges(struct pci_bus *bus); | 540 | void pci_enable_bridges(struct pci_bus *bus); |
| 541 | 541 | ||
| @@ -730,7 +730,8 @@ static inline char *pci_name(struct pci_dev *pdev) | |||
| 730 | */ | 730 | */ |
| 731 | #ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER | 731 | #ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER |
| 732 | static inline void pci_resource_to_user(const struct pci_dev *dev, int bar, | 732 | static inline void pci_resource_to_user(const struct pci_dev *dev, int bar, |
| 733 | const struct resource *rsrc, u64 *start, u64 *end) | 733 | const struct resource *rsrc, resource_size_t *start, |
| 734 | resource_size_t *end) | ||
| 734 | { | 735 | { |
| 735 | *start = rsrc->start; | 736 | *start = rsrc->start; |
| 736 | *end = rsrc->end; | 737 | *end = rsrc->end; |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 9ae6b1a75366..685081c01342 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -728,7 +728,9 @@ | |||
| 728 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 | 728 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 |
| 729 | #define PCI_DEVICE_ID_TI_4450 0x8011 | 729 | #define PCI_DEVICE_ID_TI_4450 0x8011 |
| 730 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 | 730 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 |
| 731 | #define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 | ||
| 731 | #define PCI_DEVICE_ID_TI_X515 0x8036 | 732 | #define PCI_DEVICE_ID_TI_X515 0x8036 |
| 733 | #define PCI_DEVICE_ID_TI_XX12 0x8039 | ||
| 732 | #define PCI_DEVICE_ID_TI_1130 0xac12 | 734 | #define PCI_DEVICE_ID_TI_1130 0xac12 |
| 733 | #define PCI_DEVICE_ID_TI_1031 0xac13 | 735 | #define PCI_DEVICE_ID_TI_1031 0xac13 |
| 734 | #define PCI_DEVICE_ID_TI_1131 0xac15 | 736 | #define PCI_DEVICE_ID_TI_1131 0xac15 |
| @@ -1441,6 +1443,7 @@ | |||
| 1441 | #define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 | 1443 | #define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 |
| 1442 | #define PCI_DEVICE_ID_RICOH_RL5C476 0x0476 | 1444 | #define PCI_DEVICE_ID_RICOH_RL5C476 0x0476 |
| 1443 | #define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 | 1445 | #define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 |
| 1446 | #define PCI_DEVICE_ID_RICOH_R5C822 0x0822 | ||
| 1444 | 1447 | ||
| 1445 | #define PCI_VENDOR_ID_DLINK 0x1186 | 1448 | #define PCI_VENDOR_ID_DLINK 0x1186 |
| 1446 | #define PCI_DEVICE_ID_DLINK_DGE510T 0x4c00 | 1449 | #define PCI_DEVICE_ID_DLINK_DGE510T 0x4c00 |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index 93b0959eb40f..ab8a8dd8d64c 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
| @@ -389,7 +389,8 @@ int pnp_start_dev(struct pnp_dev *dev); | |||
| 389 | int pnp_stop_dev(struct pnp_dev *dev); | 389 | int pnp_stop_dev(struct pnp_dev *dev); |
| 390 | int pnp_activate_dev(struct pnp_dev *dev); | 390 | int pnp_activate_dev(struct pnp_dev *dev); |
| 391 | int pnp_disable_dev(struct pnp_dev *dev); | 391 | int pnp_disable_dev(struct pnp_dev *dev); |
| 392 | void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size); | 392 | void pnp_resource_change(struct resource *resource, resource_size_t start, |
| 393 | resource_size_t size); | ||
| 393 | 394 | ||
| 394 | /* protocol helpers */ | 395 | /* protocol helpers */ |
| 395 | int pnp_is_active(struct pnp_dev * dev); | 396 | int pnp_is_active(struct pnp_dev * dev); |
| @@ -434,7 +435,9 @@ static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; } | |||
| 434 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } | 435 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 435 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } | 436 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 436 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } | 437 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } |
| 437 | static inline void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size) { } | 438 | static inline void pnp_resource_change(struct resource *resource, |
| 439 | resource_size_t start, | ||
| 440 | resource_size_t size) { } | ||
| 438 | 441 | ||
| 439 | /* protocol helpers */ | 442 | /* protocol helpers */ |
| 440 | static inline int pnp_is_active(struct pnp_dev * dev) { return 0; } | 443 | static inline int pnp_is_active(struct pnp_dev * dev) { return 0; } |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 48dfe00070c7..b4ca73d65891 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -163,14 +163,22 @@ extern int rcu_needs_cpu(int cpu); | |||
| 163 | * | 163 | * |
| 164 | * It is illegal to block while in an RCU read-side critical section. | 164 | * It is illegal to block while in an RCU read-side critical section. |
| 165 | */ | 165 | */ |
| 166 | #define rcu_read_lock() preempt_disable() | 166 | #define rcu_read_lock() \ |
| 167 | do { \ | ||
| 168 | preempt_disable(); \ | ||
| 169 | __acquire(RCU); \ | ||
| 170 | } while(0) | ||
| 167 | 171 | ||
| 168 | /** | 172 | /** |
| 169 | * rcu_read_unlock - marks the end of an RCU read-side critical section. | 173 | * rcu_read_unlock - marks the end of an RCU read-side critical section. |
| 170 | * | 174 | * |
| 171 | * See rcu_read_lock() for more information. | 175 | * See rcu_read_lock() for more information. |
| 172 | */ | 176 | */ |
| 173 | #define rcu_read_unlock() preempt_enable() | 177 | #define rcu_read_unlock() \ |
| 178 | do { \ | ||
| 179 | __release(RCU); \ | ||
| 180 | preempt_enable(); \ | ||
| 181 | } while(0) | ||
| 174 | 182 | ||
| 175 | /* | 183 | /* |
| 176 | * So where is rcu_write_lock()? It does not exist, as there is no | 184 | * So where is rcu_write_lock()? It does not exist, as there is no |
| @@ -193,14 +201,22 @@ extern int rcu_needs_cpu(int cpu); | |||
| 193 | * can use just rcu_read_lock(). | 201 | * can use just rcu_read_lock(). |
| 194 | * | 202 | * |
| 195 | */ | 203 | */ |
| 196 | #define rcu_read_lock_bh() local_bh_disable() | 204 | #define rcu_read_lock_bh() \ |
| 205 | do { \ | ||
| 206 | local_bh_disable(); \ | ||
| 207 | __acquire(RCU_BH); \ | ||
| 208 | } while(0) | ||
| 197 | 209 | ||
| 198 | /* | 210 | /* |
| 199 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section | 211 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section |
| 200 | * | 212 | * |
| 201 | * See rcu_read_lock_bh() for more information. | 213 | * See rcu_read_lock_bh() for more information. |
| 202 | */ | 214 | */ |
| 203 | #define rcu_read_unlock_bh() local_bh_enable() | 215 | #define rcu_read_unlock_bh() \ |
| 216 | do { \ | ||
| 217 | __release(RCU_BH); \ | ||
| 218 | local_bh_enable(); \ | ||
| 219 | } while(0) | ||
| 204 | 220 | ||
| 205 | /** | 221 | /** |
| 206 | * rcu_dereference - fetch an RCU-protected pointer in an | 222 | * rcu_dereference - fetch an RCU-protected pointer in an |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index 36e2bf4b4315..5371e4e74595 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
| @@ -34,8 +34,8 @@ struct rtc_time { | |||
| 34 | * alarm API. | 34 | * alarm API. |
| 35 | */ | 35 | */ |
| 36 | struct rtc_wkalrm { | 36 | struct rtc_wkalrm { |
| 37 | unsigned char enabled; /* 0 = alarm disable, 1 = alarm disabled */ | 37 | unsigned char enabled; /* 0 = alarm disabled, 1 = alarm enabled */ |
| 38 | unsigned char pending; /* 0 = alarm pending, 1 = alarm not pending */ | 38 | unsigned char pending; /* 0 = alarm not pending, 1 = alarm pending */ |
| 39 | struct rtc_time time; /* time the alarm is set to */ | 39 | struct rtc_time time; /* time the alarm is set to */ |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 821f0481ebe1..aaf723308ed4 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -1153,7 +1153,7 @@ extern int force_sig_info(int, struct siginfo *, struct task_struct *); | |||
| 1153 | extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); | 1153 | extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); |
| 1154 | extern int kill_pg_info(int, struct siginfo *, pid_t); | 1154 | extern int kill_pg_info(int, struct siginfo *, pid_t); |
| 1155 | extern int kill_proc_info(int, struct siginfo *, pid_t); | 1155 | extern int kill_proc_info(int, struct siginfo *, pid_t); |
| 1156 | extern int kill_proc_info_as_uid(int, struct siginfo *, pid_t, uid_t, uid_t); | 1156 | extern int kill_proc_info_as_uid(int, struct siginfo *, pid_t, uid_t, uid_t, u32); |
| 1157 | extern void do_notify_parent(struct task_struct *, int); | 1157 | extern void do_notify_parent(struct task_struct *, int); |
| 1158 | extern void force_sig(int, struct task_struct *); | 1158 | extern void force_sig(int, struct task_struct *); |
| 1159 | extern void force_sig_specific(int, struct task_struct *); | 1159 | extern void force_sig_specific(int, struct task_struct *); |
diff --git a/include/linux/security.h b/include/linux/security.h index 51805806f974..f75303831d09 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -67,7 +67,7 @@ struct xfrm_state; | |||
| 67 | struct xfrm_user_sec_ctx; | 67 | struct xfrm_user_sec_ctx; |
| 68 | 68 | ||
| 69 | extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); | 69 | extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); |
| 70 | extern int cap_netlink_recv(struct sk_buff *skb); | 70 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); |
| 71 | 71 | ||
| 72 | /* | 72 | /* |
| 73 | * Values used in the task_security_ops calls | 73 | * Values used in the task_security_ops calls |
| @@ -567,6 +567,9 @@ struct swap_info_struct; | |||
| 567 | * @p. | 567 | * @p. |
| 568 | * @p contains the task_struct for the process. | 568 | * @p contains the task_struct for the process. |
| 569 | * Return 0 if permission is granted. | 569 | * Return 0 if permission is granted. |
| 570 | * @task_getsecid: | ||
| 571 | * Retrieve the security identifier of the process @p. | ||
| 572 | * @p contains the task_struct for the process and place is into @secid. | ||
| 570 | * @task_setgroups: | 573 | * @task_setgroups: |
| 571 | * Check permission before setting the supplementary group set of the | 574 | * Check permission before setting the supplementary group set of the |
| 572 | * current process. | 575 | * current process. |
| @@ -582,6 +585,10 @@ struct swap_info_struct; | |||
| 582 | * @p contains the task_struct of process. | 585 | * @p contains the task_struct of process. |
| 583 | * @ioprio contains the new ioprio value | 586 | * @ioprio contains the new ioprio value |
| 584 | * Return 0 if permission is granted. | 587 | * Return 0 if permission is granted. |
| 588 | * @task_getioprio | ||
| 589 | * Check permission before getting the ioprio value of @p. | ||
| 590 | * @p contains the task_struct of process. | ||
| 591 | * Return 0 if permission is granted. | ||
| 585 | * @task_setrlimit: | 592 | * @task_setrlimit: |
| 586 | * Check permission before setting the resource limits of the current | 593 | * Check permission before setting the resource limits of the current |
| 587 | * process for @resource to @new_rlim. The old resource limit values can | 594 | * process for @resource to @new_rlim. The old resource limit values can |
| @@ -615,6 +622,7 @@ struct swap_info_struct; | |||
| 615 | * @p contains the task_struct for process. | 622 | * @p contains the task_struct for process. |
| 616 | * @info contains the signal information. | 623 | * @info contains the signal information. |
| 617 | * @sig contains the signal value. | 624 | * @sig contains the signal value. |
| 625 | * @secid contains the sid of the process where the signal originated | ||
| 618 | * Return 0 if permission is granted. | 626 | * Return 0 if permission is granted. |
| 619 | * @task_wait: | 627 | * @task_wait: |
| 620 | * Check permission before allowing a process to reap a child process @p | 628 | * Check permission before allowing a process to reap a child process @p |
| @@ -656,6 +664,7 @@ struct swap_info_struct; | |||
| 656 | * Check permission before processing the received netlink message in | 664 | * Check permission before processing the received netlink message in |
| 657 | * @skb. | 665 | * @skb. |
| 658 | * @skb contains the sk_buff structure for the netlink message. | 666 | * @skb contains the sk_buff structure for the netlink message. |
| 667 | * @cap indicates the capability required | ||
| 659 | * Return 0 if permission is granted. | 668 | * Return 0 if permission is granted. |
| 660 | * | 669 | * |
| 661 | * Security hooks for Unix domain networking. | 670 | * Security hooks for Unix domain networking. |
| @@ -1218,16 +1227,18 @@ struct security_operations { | |||
| 1218 | int (*task_setpgid) (struct task_struct * p, pid_t pgid); | 1227 | int (*task_setpgid) (struct task_struct * p, pid_t pgid); |
| 1219 | int (*task_getpgid) (struct task_struct * p); | 1228 | int (*task_getpgid) (struct task_struct * p); |
| 1220 | int (*task_getsid) (struct task_struct * p); | 1229 | int (*task_getsid) (struct task_struct * p); |
| 1230 | void (*task_getsecid) (struct task_struct * p, u32 * secid); | ||
| 1221 | int (*task_setgroups) (struct group_info *group_info); | 1231 | int (*task_setgroups) (struct group_info *group_info); |
| 1222 | int (*task_setnice) (struct task_struct * p, int nice); | 1232 | int (*task_setnice) (struct task_struct * p, int nice); |
| 1223 | int (*task_setioprio) (struct task_struct * p, int ioprio); | 1233 | int (*task_setioprio) (struct task_struct * p, int ioprio); |
| 1234 | int (*task_getioprio) (struct task_struct * p); | ||
| 1224 | int (*task_setrlimit) (unsigned int resource, struct rlimit * new_rlim); | 1235 | int (*task_setrlimit) (unsigned int resource, struct rlimit * new_rlim); |
| 1225 | int (*task_setscheduler) (struct task_struct * p, int policy, | 1236 | int (*task_setscheduler) (struct task_struct * p, int policy, |
| 1226 | struct sched_param * lp); | 1237 | struct sched_param * lp); |
| 1227 | int (*task_getscheduler) (struct task_struct * p); | 1238 | int (*task_getscheduler) (struct task_struct * p); |
| 1228 | int (*task_movememory) (struct task_struct * p); | 1239 | int (*task_movememory) (struct task_struct * p); |
| 1229 | int (*task_kill) (struct task_struct * p, | 1240 | int (*task_kill) (struct task_struct * p, |
| 1230 | struct siginfo * info, int sig); | 1241 | struct siginfo * info, int sig, u32 secid); |
| 1231 | int (*task_wait) (struct task_struct * p); | 1242 | int (*task_wait) (struct task_struct * p); |
| 1232 | int (*task_prctl) (int option, unsigned long arg2, | 1243 | int (*task_prctl) (int option, unsigned long arg2, |
| 1233 | unsigned long arg3, unsigned long arg4, | 1244 | unsigned long arg3, unsigned long arg4, |
| @@ -1266,7 +1277,7 @@ struct security_operations { | |||
| 1266 | struct sembuf * sops, unsigned nsops, int alter); | 1277 | struct sembuf * sops, unsigned nsops, int alter); |
| 1267 | 1278 | ||
| 1268 | int (*netlink_send) (struct sock * sk, struct sk_buff * skb); | 1279 | int (*netlink_send) (struct sock * sk, struct sk_buff * skb); |
| 1269 | int (*netlink_recv) (struct sk_buff * skb); | 1280 | int (*netlink_recv) (struct sk_buff * skb, int cap); |
| 1270 | 1281 | ||
| 1271 | /* allow module stacking */ | 1282 | /* allow module stacking */ |
| 1272 | int (*register_security) (const char *name, | 1283 | int (*register_security) (const char *name, |
| @@ -1838,6 +1849,11 @@ static inline int security_task_getsid (struct task_struct *p) | |||
| 1838 | return security_ops->task_getsid (p); | 1849 | return security_ops->task_getsid (p); |
| 1839 | } | 1850 | } |
| 1840 | 1851 | ||
| 1852 | static inline void security_task_getsecid (struct task_struct *p, u32 *secid) | ||
| 1853 | { | ||
| 1854 | security_ops->task_getsecid (p, secid); | ||
| 1855 | } | ||
| 1856 | |||
| 1841 | static inline int security_task_setgroups (struct group_info *group_info) | 1857 | static inline int security_task_setgroups (struct group_info *group_info) |
| 1842 | { | 1858 | { |
| 1843 | return security_ops->task_setgroups (group_info); | 1859 | return security_ops->task_setgroups (group_info); |
| @@ -1853,6 +1869,11 @@ static inline int security_task_setioprio (struct task_struct *p, int ioprio) | |||
| 1853 | return security_ops->task_setioprio (p, ioprio); | 1869 | return security_ops->task_setioprio (p, ioprio); |
| 1854 | } | 1870 | } |
| 1855 | 1871 | ||
| 1872 | static inline int security_task_getioprio (struct task_struct *p) | ||
| 1873 | { | ||
| 1874 | return security_ops->task_getioprio (p); | ||
| 1875 | } | ||
| 1876 | |||
| 1856 | static inline int security_task_setrlimit (unsigned int resource, | 1877 | static inline int security_task_setrlimit (unsigned int resource, |
| 1857 | struct rlimit *new_rlim) | 1878 | struct rlimit *new_rlim) |
| 1858 | { | 1879 | { |
| @@ -1877,9 +1898,10 @@ static inline int security_task_movememory (struct task_struct *p) | |||
| 1877 | } | 1898 | } |
| 1878 | 1899 | ||
| 1879 | static inline int security_task_kill (struct task_struct *p, | 1900 | static inline int security_task_kill (struct task_struct *p, |
| 1880 | struct siginfo *info, int sig) | 1901 | struct siginfo *info, int sig, |
| 1902 | u32 secid) | ||
| 1881 | { | 1903 | { |
| 1882 | return security_ops->task_kill (p, info, sig); | 1904 | return security_ops->task_kill (p, info, sig, secid); |
| 1883 | } | 1905 | } |
| 1884 | 1906 | ||
| 1885 | static inline int security_task_wait (struct task_struct *p) | 1907 | static inline int security_task_wait (struct task_struct *p) |
| @@ -2032,9 +2054,9 @@ static inline int security_netlink_send(struct sock *sk, struct sk_buff * skb) | |||
| 2032 | return security_ops->netlink_send(sk, skb); | 2054 | return security_ops->netlink_send(sk, skb); |
| 2033 | } | 2055 | } |
| 2034 | 2056 | ||
| 2035 | static inline int security_netlink_recv(struct sk_buff * skb) | 2057 | static inline int security_netlink_recv(struct sk_buff * skb, int cap) |
| 2036 | { | 2058 | { |
| 2037 | return security_ops->netlink_recv(skb); | 2059 | return security_ops->netlink_recv(skb, cap); |
| 2038 | } | 2060 | } |
| 2039 | 2061 | ||
| 2040 | /* prototypes */ | 2062 | /* prototypes */ |
| @@ -2490,6 +2512,9 @@ static inline int security_task_getsid (struct task_struct *p) | |||
| 2490 | return 0; | 2512 | return 0; |
| 2491 | } | 2513 | } |
| 2492 | 2514 | ||
| 2515 | static inline void security_task_getsecid (struct task_struct *p, u32 *secid) | ||
| 2516 | { } | ||
| 2517 | |||
| 2493 | static inline int security_task_setgroups (struct group_info *group_info) | 2518 | static inline int security_task_setgroups (struct group_info *group_info) |
| 2494 | { | 2519 | { |
| 2495 | return 0; | 2520 | return 0; |
| @@ -2505,6 +2530,11 @@ static inline int security_task_setioprio (struct task_struct *p, int ioprio) | |||
| 2505 | return 0; | 2530 | return 0; |
| 2506 | } | 2531 | } |
| 2507 | 2532 | ||
| 2533 | static inline int security_task_getioprio (struct task_struct *p) | ||
| 2534 | { | ||
| 2535 | return 0; | ||
| 2536 | } | ||
| 2537 | |||
| 2508 | static inline int security_task_setrlimit (unsigned int resource, | 2538 | static inline int security_task_setrlimit (unsigned int resource, |
| 2509 | struct rlimit *new_rlim) | 2539 | struct rlimit *new_rlim) |
| 2510 | { | 2540 | { |
| @@ -2529,7 +2559,8 @@ static inline int security_task_movememory (struct task_struct *p) | |||
| 2529 | } | 2559 | } |
| 2530 | 2560 | ||
| 2531 | static inline int security_task_kill (struct task_struct *p, | 2561 | static inline int security_task_kill (struct task_struct *p, |
| 2532 | struct siginfo *info, int sig) | 2562 | struct siginfo *info, int sig, |
| 2563 | u32 secid) | ||
| 2533 | { | 2564 | { |
| 2534 | return 0; | 2565 | return 0; |
| 2535 | } | 2566 | } |
| @@ -2670,9 +2701,9 @@ static inline int security_netlink_send (struct sock *sk, struct sk_buff *skb) | |||
| 2670 | return cap_netlink_send (sk, skb); | 2701 | return cap_netlink_send (sk, skb); |
| 2671 | } | 2702 | } |
| 2672 | 2703 | ||
| 2673 | static inline int security_netlink_recv (struct sk_buff *skb) | 2704 | static inline int security_netlink_recv (struct sk_buff *skb, int cap) |
| 2674 | { | 2705 | { |
| 2675 | return cap_netlink_recv (skb); | 2706 | return cap_netlink_recv (skb, cap); |
| 2676 | } | 2707 | } |
| 2677 | 2708 | ||
| 2678 | static inline struct dentry *securityfs_create_dir(const char *name, | 2709 | static inline struct dentry *securityfs_create_dir(const char *name, |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 951c4e858274..fc1104a2cfa9 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -336,7 +336,6 @@ struct uart_driver { | |||
| 336 | struct module *owner; | 336 | struct module *owner; |
| 337 | const char *driver_name; | 337 | const char *driver_name; |
| 338 | const char *dev_name; | 338 | const char *dev_name; |
| 339 | const char *devfs_name; | ||
| 340 | int major; | 339 | int major; |
| 341 | int minor; | 340 | int minor; |
| 342 | int nr; | 341 | int nr; |
diff --git a/include/linux/signal.h b/include/linux/signal.h index 1e4ce7225eee..117135e33d67 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
| @@ -9,32 +9,6 @@ | |||
| 9 | #include <linux/spinlock.h> | 9 | #include <linux/spinlock.h> |
| 10 | 10 | ||
| 11 | /* | 11 | /* |
| 12 | * These values of sa_flags are used only by the kernel as part of the | ||
| 13 | * irq handling routines. | ||
| 14 | * | ||
| 15 | * SA_INTERRUPT is also used by the irq handling routines. | ||
| 16 | * SA_SHIRQ is for shared interrupt support on PCI and EISA. | ||
| 17 | * SA_PROBEIRQ is set by callers when they expect sharing mismatches to occur | ||
| 18 | */ | ||
| 19 | #define SA_SAMPLE_RANDOM SA_RESTART | ||
| 20 | #define SA_SHIRQ 0x04000000 | ||
| 21 | #define SA_PROBEIRQ 0x08000000 | ||
| 22 | |||
| 23 | /* | ||
| 24 | * As above, these correspond to the IORESOURCE_IRQ_* defines in | ||
| 25 | * linux/ioport.h to select the interrupt line behaviour. When | ||
| 26 | * requesting an interrupt without specifying a SA_TRIGGER, the | ||
| 27 | * setting should be assumed to be "as already configured", which | ||
| 28 | * may be as per machine or firmware initialisation. | ||
| 29 | */ | ||
| 30 | #define SA_TRIGGER_LOW 0x00000008 | ||
| 31 | #define SA_TRIGGER_HIGH 0x00000004 | ||
| 32 | #define SA_TRIGGER_FALLING 0x00000002 | ||
| 33 | #define SA_TRIGGER_RISING 0x00000001 | ||
| 34 | #define SA_TRIGGER_MASK (SA_TRIGGER_HIGH|SA_TRIGGER_LOW|\ | ||
| 35 | SA_TRIGGER_RISING|SA_TRIGGER_FALLING) | ||
| 36 | |||
| 37 | /* | ||
| 38 | * Real Time signals may be queued. | 12 | * Real Time signals may be queued. |
| 39 | */ | 13 | */ |
| 40 | 14 | ||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 16eef03ce0eb..57d7d4965f9a 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -171,7 +171,15 @@ enum { | |||
| 171 | 171 | ||
| 172 | enum { | 172 | enum { |
| 173 | SKB_GSO_TCPV4 = 1 << 0, | 173 | SKB_GSO_TCPV4 = 1 << 0, |
| 174 | SKB_GSO_UDPV4 = 1 << 1, | 174 | SKB_GSO_UDP = 1 << 1, |
| 175 | |||
| 176 | /* This indicates the skb is from an untrusted source. */ | ||
| 177 | SKB_GSO_DODGY = 1 << 2, | ||
| 178 | |||
| 179 | /* This indicates the tcp segment has CWR set. */ | ||
| 180 | SKB_GSO_TCP_ECN = 1 << 3, | ||
| 181 | |||
| 182 | SKB_GSO_TCPV6 = 1 << 4, | ||
| 175 | }; | 183 | }; |
| 176 | 184 | ||
| 177 | /** | 185 | /** |
| @@ -1298,8 +1306,7 @@ extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to); | |||
| 1298 | extern void skb_split(struct sk_buff *skb, | 1306 | extern void skb_split(struct sk_buff *skb, |
| 1299 | struct sk_buff *skb1, const u32 len); | 1307 | struct sk_buff *skb1, const u32 len); |
| 1300 | 1308 | ||
| 1301 | extern void skb_release_data(struct sk_buff *skb); | 1309 | extern struct sk_buff *skb_segment(struct sk_buff *skb, int features); |
| 1302 | extern struct sk_buff *skb_segment(struct sk_buff *skb, int sg); | ||
| 1303 | 1310 | ||
| 1304 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, | 1311 | static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, |
| 1305 | int len, void *buffer) | 1312 | int len, void *buffer) |
diff --git a/include/linux/smp.h b/include/linux/smp.h index c93c3fe4308c..837e8bce1349 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
| @@ -125,4 +125,6 @@ static inline void smp_send_reschedule(int cpu) { } | |||
| 125 | #define put_cpu() preempt_enable() | 125 | #define put_cpu() preempt_enable() |
| 126 | #define put_cpu_no_resched() preempt_enable_no_resched() | 126 | #define put_cpu_no_resched() preempt_enable_no_resched() |
| 127 | 127 | ||
| 128 | void smp_setup_processor_id(void); | ||
| 129 | |||
| 128 | #endif /* __LINUX_SMP_H */ | 130 | #endif /* __LINUX_SMP_H */ |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 503564384545..7b27c09b5604 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
| @@ -159,7 +159,9 @@ struct svc_rqst { | |||
| 159 | * determine what device number | 159 | * determine what device number |
| 160 | * to report (real or virtual) | 160 | * to report (real or virtual) |
| 161 | */ | 161 | */ |
| 162 | 162 | int rq_sendfile_ok; /* turned off in gss privacy | |
| 163 | * to prevent encrypting page | ||
| 164 | * cache pages */ | ||
| 163 | wait_queue_head_t rq_wait; /* synchronization */ | 165 | wait_queue_head_t rq_wait; /* synchronization */ |
| 164 | }; | 166 | }; |
| 165 | 167 | ||
diff --git a/include/linux/swap.h b/include/linux/swap.h index c41e2d6d1acc..cf6ca6e377bd 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -189,7 +189,6 @@ extern long vm_total_pages; | |||
| 189 | 189 | ||
| 190 | #ifdef CONFIG_NUMA | 190 | #ifdef CONFIG_NUMA |
| 191 | extern int zone_reclaim_mode; | 191 | extern int zone_reclaim_mode; |
| 192 | extern int zone_reclaim_interval; | ||
| 193 | extern int zone_reclaim(struct zone *, gfp_t, unsigned int); | 192 | extern int zone_reclaim(struct zone *, gfp_t, unsigned int); |
| 194 | #else | 193 | #else |
| 195 | #define zone_reclaim_mode 0 | 194 | #define zone_reclaim_mode 0 |
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h index b368b296d035..58c961c9e170 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h | |||
| @@ -157,7 +157,6 @@ struct tty_driver { | |||
| 157 | struct cdev cdev; | 157 | struct cdev cdev; |
| 158 | struct module *owner; | 158 | struct module *owner; |
| 159 | const char *driver_name; | 159 | const char *driver_name; |
| 160 | const char *devfs_name; | ||
| 161 | const char *name; | 160 | const char *name; |
| 162 | int name_base; /* offset of printed name */ | 161 | int name_base; /* offset of printed name */ |
| 163 | int major; /* major device number */ | 162 | int major; /* major device number */ |
| @@ -242,8 +241,15 @@ void tty_set_operations(struct tty_driver *driver, struct tty_operations *op); | |||
| 242 | * is also a promise, if the above case is true, not to signal | 241 | * is also a promise, if the above case is true, not to signal |
| 243 | * overruns, either.) | 242 | * overruns, either.) |
| 244 | * | 243 | * |
| 245 | * TTY_DRIVER_NO_DEVFS --- if set, do not create devfs entries. This | 244 | * TTY_DRIVER_DYNAMIC_DEV --- if set, the individual tty devices need |
| 246 | * is only used by tty_register_driver(). | 245 | * to be registered with a call to tty_register_driver() when the |
| 246 | * device is found in the system and unregistered with a call to | ||
| 247 | * tty_unregister_device() so the devices will be show up | ||
| 248 | * properly in sysfs. If not set, driver->num entries will be | ||
| 249 | * created by the tty core in sysfs when tty_register_driver() is | ||
| 250 | * called. This is to be used by drivers that have tty devices | ||
| 251 | * that can appear and disappear while the main tty driver is | ||
| 252 | * registered with the tty core. | ||
| 247 | * | 253 | * |
| 248 | * TTY_DRIVER_DEVPTS_MEM -- don't use the standard arrays, instead | 254 | * TTY_DRIVER_DEVPTS_MEM -- don't use the standard arrays, instead |
| 249 | * use dynamic memory keyed through the devpts filesystem. This | 255 | * 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); | |||
| 252 | #define TTY_DRIVER_INSTALLED 0x0001 | 258 | #define TTY_DRIVER_INSTALLED 0x0001 |
| 253 | #define TTY_DRIVER_RESET_TERMIOS 0x0002 | 259 | #define TTY_DRIVER_RESET_TERMIOS 0x0002 |
| 254 | #define TTY_DRIVER_REAL_RAW 0x0004 | 260 | #define TTY_DRIVER_REAL_RAW 0x0004 |
| 255 | #define TTY_DRIVER_NO_DEVFS 0x0008 | 261 | #define TTY_DRIVER_DYNAMIC_DEV 0x0008 |
| 256 | #define TTY_DRIVER_DEVPTS_MEM 0x0010 | 262 | #define TTY_DRIVER_DEVPTS_MEM 0x0010 |
| 257 | 263 | ||
| 258 | /* tty driver types */ | 264 | /* tty driver types */ |
diff --git a/include/linux/types.h b/include/linux/types.h index a5e46e783ffa..3f235660a3cd 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -177,8 +177,15 @@ typedef __u64 __bitwise __be64; | |||
| 177 | 177 | ||
| 178 | #ifdef __KERNEL__ | 178 | #ifdef __KERNEL__ |
| 179 | typedef unsigned __bitwise__ gfp_t; | 179 | typedef unsigned __bitwise__ gfp_t; |
| 180 | |||
| 181 | #ifdef CONFIG_RESOURCES_64BIT | ||
| 182 | typedef u64 resource_size_t; | ||
| 183 | #else | ||
| 184 | typedef u32 resource_size_t; | ||
| 180 | #endif | 185 | #endif |
| 181 | 186 | ||
| 187 | #endif /* __KERNEL__ */ | ||
| 188 | |||
| 182 | struct ustat { | 189 | struct ustat { |
| 183 | __kernel_daddr_t f_tfree; | 190 | __kernel_daddr_t f_tfree; |
| 184 | __kernel_ino_t f_tinode; | 191 | __kernel_ino_t f_tinode; |
diff --git a/include/linux/udp.h b/include/linux/udp.h index bdd39be09406..90223f057d50 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
| @@ -46,7 +46,7 @@ struct udp_sock { | |||
| 46 | unsigned int corkflag; /* Cork is required */ | 46 | unsigned int corkflag; /* Cork is required */ |
| 47 | __u16 encap_type; /* Is this an Encapsulation socket? */ | 47 | __u16 encap_type; /* Is this an Encapsulation socket? */ |
| 48 | /* | 48 | /* |
| 49 | * Following member retains the infomation to create a UDP header | 49 | * Following member retains the information to create a UDP header |
| 50 | * when the socket is uncorked. | 50 | * when the socket is uncorked. |
| 51 | */ | 51 | */ |
| 52 | __u16 len; /* total length of pending frames */ | 52 | __u16 len; /* total length of pending frames */ |
diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index e39b7cc43390..fc62887c5206 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h | |||
| @@ -993,7 +993,7 @@ extern void ufs_panic (struct super_block *, const char *, const char *, ...) __ | |||
| 993 | extern struct inode_operations ufs_fast_symlink_inode_operations; | 993 | extern struct inode_operations ufs_fast_symlink_inode_operations; |
| 994 | 994 | ||
| 995 | /* truncate.c */ | 995 | /* truncate.c */ |
| 996 | extern void ufs_truncate (struct inode *); | 996 | extern int ufs_truncate (struct inode *, loff_t); |
| 997 | 997 | ||
| 998 | static inline struct ufs_sb_info *UFS_SB(struct super_block *sb) | 998 | static inline struct ufs_sb_info *UFS_SB(struct super_block *sb) |
| 999 | { | 999 | { |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h new file mode 100644 index 000000000000..3e0daf54133e --- /dev/null +++ b/include/linux/vmstat.h | |||
| @@ -0,0 +1,215 @@ | |||
| 1 | #ifndef _LINUX_VMSTAT_H | ||
| 2 | #define _LINUX_VMSTAT_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | #include <linux/percpu.h> | ||
| 6 | #include <linux/config.h> | ||
| 7 | #include <linux/mmzone.h> | ||
| 8 | #include <asm/atomic.h> | ||
| 9 | |||
| 10 | #ifdef CONFIG_VM_EVENT_COUNTERS | ||
| 11 | /* | ||
| 12 | * Light weight per cpu counter implementation. | ||
| 13 | * | ||
| 14 | * Counters should only be incremented and no critical kernel component | ||
| 15 | * should rely on the counter values. | ||
| 16 | * | ||
| 17 | * Counters are handled completely inline. On many platforms the code | ||
| 18 | * generated will simply be the increment of a global address. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #define FOR_ALL_ZONES(x) x##_DMA, x##_DMA32, x##_NORMAL, x##_HIGH | ||
| 22 | |||
| 23 | enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, | ||
| 24 | FOR_ALL_ZONES(PGALLOC), | ||
| 25 | PGFREE, PGACTIVATE, PGDEACTIVATE, | ||
| 26 | PGFAULT, PGMAJFAULT, | ||
| 27 | FOR_ALL_ZONES(PGREFILL), | ||
| 28 | FOR_ALL_ZONES(PGSTEAL), | ||
| 29 | FOR_ALL_ZONES(PGSCAN_KSWAPD), | ||
| 30 | FOR_ALL_ZONES(PGSCAN_DIRECT), | ||
| 31 | PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL, | ||
| 32 | PAGEOUTRUN, ALLOCSTALL, PGROTATED, | ||
| 33 | NR_VM_EVENT_ITEMS | ||
| 34 | }; | ||
| 35 | |||
| 36 | struct vm_event_state { | ||
| 37 | unsigned long event[NR_VM_EVENT_ITEMS]; | ||
| 38 | }; | ||
| 39 | |||
| 40 | DECLARE_PER_CPU(struct vm_event_state, vm_event_states); | ||
| 41 | |||
| 42 | static inline void __count_vm_event(enum vm_event_item item) | ||
| 43 | { | ||
| 44 | __get_cpu_var(vm_event_states.event[item])++; | ||
| 45 | } | ||
| 46 | |||
| 47 | static inline void count_vm_event(enum vm_event_item item) | ||
| 48 | { | ||
| 49 | get_cpu_var(vm_event_states.event[item])++; | ||
| 50 | put_cpu(); | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline void __count_vm_events(enum vm_event_item item, long delta) | ||
| 54 | { | ||
| 55 | __get_cpu_var(vm_event_states.event[item]) += delta; | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline void count_vm_events(enum vm_event_item item, long delta) | ||
| 59 | { | ||
| 60 | get_cpu_var(vm_event_states.event[item])++; | ||
| 61 | put_cpu(); | ||
| 62 | } | ||
| 63 | |||
| 64 | extern void all_vm_events(unsigned long *); | ||
| 65 | extern void vm_events_fold_cpu(int cpu); | ||
| 66 | |||
| 67 | #else | ||
| 68 | |||
| 69 | /* Disable counters */ | ||
| 70 | #define get_cpu_vm_events(e) 0L | ||
| 71 | #define count_vm_event(e) do { } while (0) | ||
| 72 | #define count_vm_events(e,d) do { } while (0) | ||
| 73 | #define __count_vm_event(e) do { } while (0) | ||
| 74 | #define __count_vm_events(e,d) do { } while (0) | ||
| 75 | #define vm_events_fold_cpu(x) do { } while (0) | ||
| 76 | |||
| 77 | #endif /* CONFIG_VM_EVENT_COUNTERS */ | ||
| 78 | |||
| 79 | #define __count_zone_vm_events(item, zone, delta) \ | ||
| 80 | __count_vm_events(item##_DMA + zone_idx(zone), delta) | ||
| 81 | |||
| 82 | /* | ||
| 83 | * Zone based page accounting with per cpu differentials. | ||
| 84 | */ | ||
| 85 | extern atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; | ||
| 86 | |||
| 87 | static inline void zone_page_state_add(long x, struct zone *zone, | ||
| 88 | enum zone_stat_item item) | ||
| 89 | { | ||
| 90 | atomic_long_add(x, &zone->vm_stat[item]); | ||
| 91 | atomic_long_add(x, &vm_stat[item]); | ||
| 92 | } | ||
| 93 | |||
| 94 | static inline unsigned long global_page_state(enum zone_stat_item item) | ||
| 95 | { | ||
| 96 | long x = atomic_long_read(&vm_stat[item]); | ||
| 97 | #ifdef CONFIG_SMP | ||
| 98 | if (x < 0) | ||
| 99 | x = 0; | ||
| 100 | #endif | ||
| 101 | return x; | ||
| 102 | } | ||
| 103 | |||
| 104 | static inline unsigned long zone_page_state(struct zone *zone, | ||
| 105 | enum zone_stat_item item) | ||
| 106 | { | ||
| 107 | long x = atomic_long_read(&zone->vm_stat[item]); | ||
| 108 | #ifdef CONFIG_SMP | ||
| 109 | if (x < 0) | ||
| 110 | x = 0; | ||
| 111 | #endif | ||
| 112 | return x; | ||
| 113 | } | ||
| 114 | |||
| 115 | #ifdef CONFIG_NUMA | ||
| 116 | /* | ||
| 117 | * Determine the per node value of a stat item. This function | ||
| 118 | * is called frequently in a NUMA machine, so try to be as | ||
| 119 | * frugal as possible. | ||
| 120 | */ | ||
| 121 | static inline unsigned long node_page_state(int node, | ||
| 122 | enum zone_stat_item item) | ||
| 123 | { | ||
| 124 | struct zone *zones = NODE_DATA(node)->node_zones; | ||
| 125 | |||
| 126 | return | ||
| 127 | #ifndef CONFIG_DMA_IS_NORMAL | ||
| 128 | #if !defined(CONFIG_DMA_IS_DMA32) && BITS_PER_LONG >= 64 | ||
| 129 | zone_page_state(&zones[ZONE_DMA32], item) + | ||
| 130 | #endif | ||
| 131 | zone_page_state(&zones[ZONE_NORMAL], item) + | ||
| 132 | #endif | ||
| 133 | #ifdef CONFIG_HIGHMEM | ||
| 134 | zone_page_state(&zones[ZONE_HIGHMEM], item) + | ||
| 135 | #endif | ||
| 136 | zone_page_state(&zones[ZONE_DMA], item); | ||
| 137 | } | ||
| 138 | |||
| 139 | extern void zone_statistics(struct zonelist *, struct zone *); | ||
| 140 | |||
| 141 | #else | ||
| 142 | |||
| 143 | #define node_page_state(node, item) global_page_state(item) | ||
| 144 | #define zone_statistics(_zl,_z) do { } while (0) | ||
| 145 | |||
| 146 | #endif /* CONFIG_NUMA */ | ||
| 147 | |||
| 148 | #define __add_zone_page_state(__z, __i, __d) \ | ||
| 149 | __mod_zone_page_state(__z, __i, __d) | ||
| 150 | #define __sub_zone_page_state(__z, __i, __d) \ | ||
| 151 | __mod_zone_page_state(__z, __i,-(__d)) | ||
| 152 | |||
| 153 | #define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d) | ||
| 154 | #define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d)) | ||
| 155 | |||
| 156 | static inline void zap_zone_vm_stats(struct zone *zone) | ||
| 157 | { | ||
| 158 | memset(zone->vm_stat, 0, sizeof(zone->vm_stat)); | ||
| 159 | } | ||
| 160 | |||
| 161 | extern void inc_zone_state(struct zone *, enum zone_stat_item); | ||
| 162 | |||
| 163 | #ifdef CONFIG_SMP | ||
| 164 | void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int); | ||
| 165 | void __inc_zone_page_state(struct page *, enum zone_stat_item); | ||
| 166 | void __dec_zone_page_state(struct page *, enum zone_stat_item); | ||
| 167 | |||
| 168 | void mod_zone_page_state(struct zone *, enum zone_stat_item, int); | ||
| 169 | void inc_zone_page_state(struct page *, enum zone_stat_item); | ||
| 170 | void dec_zone_page_state(struct page *, enum zone_stat_item); | ||
| 171 | |||
| 172 | extern void inc_zone_state(struct zone *, enum zone_stat_item); | ||
| 173 | |||
| 174 | void refresh_cpu_vm_stats(int); | ||
| 175 | void refresh_vm_stats(void); | ||
| 176 | |||
| 177 | #else /* CONFIG_SMP */ | ||
| 178 | |||
| 179 | /* | ||
| 180 | * We do not maintain differentials in a single processor configuration. | ||
| 181 | * The functions directly modify the zone and global counters. | ||
| 182 | */ | ||
| 183 | static inline void __mod_zone_page_state(struct zone *zone, | ||
| 184 | enum zone_stat_item item, int delta) | ||
| 185 | { | ||
| 186 | zone_page_state_add(delta, zone, item); | ||
| 187 | } | ||
| 188 | |||
| 189 | static inline void __inc_zone_page_state(struct page *page, | ||
| 190 | enum zone_stat_item item) | ||
| 191 | { | ||
| 192 | atomic_long_inc(&page_zone(page)->vm_stat[item]); | ||
| 193 | atomic_long_inc(&vm_stat[item]); | ||
| 194 | } | ||
| 195 | |||
| 196 | static inline void __dec_zone_page_state(struct page *page, | ||
| 197 | enum zone_stat_item item) | ||
| 198 | { | ||
| 199 | atomic_long_dec(&page_zone(page)->vm_stat[item]); | ||
| 200 | atomic_long_dec(&vm_stat[item]); | ||
| 201 | } | ||
| 202 | |||
| 203 | /* | ||
| 204 | * We only use atomic operations to update counters. So there is no need to | ||
| 205 | * disable interrupts. | ||
| 206 | */ | ||
| 207 | #define inc_zone_page_state __inc_zone_page_state | ||
| 208 | #define dec_zone_page_state __dec_zone_page_state | ||
| 209 | #define mod_zone_page_state __mod_zone_page_state | ||
| 210 | |||
| 211 | static inline void refresh_cpu_vm_stats(int cpu) { } | ||
| 212 | static inline void refresh_vm_stats(void) { } | ||
| 213 | #endif | ||
| 214 | |||
| 215 | #endif /* _LINUX_VMSTAT_H */ | ||
