diff options
Diffstat (limited to 'include/linux')
34 files changed, 615 insertions, 86 deletions
diff --git a/include/linux/altera_jtaguart.h b/include/linux/altera_jtaguart.h new file mode 100644 index 000000000000..953b178a1650 --- /dev/null +++ b/include/linux/altera_jtaguart.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | /* | ||
| 2 | * altera_jtaguart.h -- Altera JTAG UART driver defines. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef __ALTJUART_H | ||
| 6 | #define __ALTJUART_H | ||
| 7 | |||
| 8 | #define ALTERA_JTAGUART_MAJOR 204 | ||
| 9 | #define ALTERA_JTAGUART_MINOR 186 | ||
| 10 | |||
| 11 | struct altera_jtaguart_platform_uart { | ||
| 12 | unsigned long mapbase; /* Physical address base */ | ||
| 13 | unsigned int irq; /* Interrupt vector */ | ||
| 14 | }; | ||
| 15 | |||
| 16 | #endif /* __ALTJUART_H */ | ||
diff --git a/include/linux/altera_uart.h b/include/linux/altera_uart.h new file mode 100644 index 000000000000..8d441064a30d --- /dev/null +++ b/include/linux/altera_uart.h | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | /* | ||
| 2 | * altera_uart.h -- Altera UART driver defines. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef __ALTUART_H | ||
| 6 | #define __ALTUART_H | ||
| 7 | |||
| 8 | struct altera_uart_platform_uart { | ||
| 9 | unsigned long mapbase; /* Physical address base */ | ||
| 10 | unsigned int irq; /* Interrupt vector */ | ||
| 11 | unsigned int uartclk; /* UART clock rate */ | ||
| 12 | }; | ||
| 13 | |||
| 14 | #endif /* __ALTUART_H */ | ||
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index bd0e3c6f323f..e6e0cb5437e6 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
| 16 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
| 17 | #include <linux/timer.h> | ||
| 17 | #include <linux/writeback.h> | 18 | #include <linux/writeback.h> |
| 18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| 19 | 20 | ||
| @@ -88,6 +89,8 @@ struct backing_dev_info { | |||
| 88 | 89 | ||
| 89 | struct device *dev; | 90 | struct device *dev; |
| 90 | 91 | ||
| 92 | struct timer_list laptop_mode_wb_timer; | ||
| 93 | |||
| 91 | #ifdef CONFIG_DEBUG_FS | 94 | #ifdef CONFIG_DEBUG_FS |
| 92 | struct dentry *debug_dir; | 95 | struct dentry *debug_dir; |
| 93 | struct dentry *debug_stats; | 96 | struct dentry *debug_stats; |
| @@ -103,9 +106,10 @@ int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); | |||
| 103 | void bdi_unregister(struct backing_dev_info *bdi); | 106 | void bdi_unregister(struct backing_dev_info *bdi); |
| 104 | int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int); | 107 | int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int); |
| 105 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, | 108 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, |
| 106 | long nr_pages); | 109 | long nr_pages, int sb_locked); |
| 107 | int bdi_writeback_task(struct bdi_writeback *wb); | 110 | int bdi_writeback_task(struct bdi_writeback *wb); |
| 108 | int bdi_has_dirty_io(struct backing_dev_info *bdi); | 111 | int bdi_has_dirty_io(struct backing_dev_info *bdi); |
| 112 | void bdi_arm_supers_timer(void); | ||
| 109 | 113 | ||
| 110 | extern spinlock_t bdi_lock; | 114 | extern spinlock_t bdi_lock; |
| 111 | extern struct list_head bdi_list; | 115 | extern struct list_head bdi_list; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 6690e8bae7bb..8b7f5e0914ad 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -186,15 +186,19 @@ struct request { | |||
| 186 | }; | 186 | }; |
| 187 | 187 | ||
| 188 | /* | 188 | /* |
| 189 | * two pointers are available for the IO schedulers, if they need | 189 | * Three pointers are available for the IO schedulers, if they need |
| 190 | * more they have to dynamically allocate it. | 190 | * more they have to dynamically allocate it. |
| 191 | */ | 191 | */ |
| 192 | void *elevator_private; | 192 | void *elevator_private; |
| 193 | void *elevator_private2; | 193 | void *elevator_private2; |
| 194 | void *elevator_private3; | ||
| 194 | 195 | ||
| 195 | struct gendisk *rq_disk; | 196 | struct gendisk *rq_disk; |
| 196 | unsigned long start_time; | 197 | unsigned long start_time; |
| 197 | 198 | #ifdef CONFIG_BLK_CGROUP | |
| 199 | unsigned long long start_time_ns; | ||
| 200 | unsigned long long io_start_time_ns; /* when passed to hardware */ | ||
| 201 | #endif | ||
| 198 | /* Number of scatter-gather DMA addr+len pairs after | 202 | /* Number of scatter-gather DMA addr+len pairs after |
| 199 | * physical address coalescing is performed. | 203 | * physical address coalescing is performed. |
| 200 | */ | 204 | */ |
| @@ -917,7 +921,12 @@ extern void blk_abort_queue(struct request_queue *); | |||
| 917 | */ | 921 | */ |
| 918 | extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn, | 922 | extern struct request_queue *blk_init_queue_node(request_fn_proc *rfn, |
| 919 | spinlock_t *lock, int node_id); | 923 | spinlock_t *lock, int node_id); |
| 924 | extern struct request_queue *blk_init_allocated_queue_node(struct request_queue *, | ||
| 925 | request_fn_proc *, | ||
| 926 | spinlock_t *, int node_id); | ||
| 920 | extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *); | 927 | extern struct request_queue *blk_init_queue(request_fn_proc *, spinlock_t *); |
| 928 | extern struct request_queue *blk_init_allocated_queue(struct request_queue *, | ||
| 929 | request_fn_proc *, spinlock_t *); | ||
| 921 | extern void blk_cleanup_queue(struct request_queue *); | 930 | extern void blk_cleanup_queue(struct request_queue *); |
| 922 | extern void blk_queue_make_request(struct request_queue *, make_request_fn *); | 931 | extern void blk_queue_make_request(struct request_queue *, make_request_fn *); |
| 923 | extern void blk_queue_bounce_limit(struct request_queue *, u64); | 932 | extern void blk_queue_bounce_limit(struct request_queue *, u64); |
| @@ -994,20 +1003,25 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
| 994 | return NULL; | 1003 | return NULL; |
| 995 | return bqt->tag_index[tag]; | 1004 | return bqt->tag_index[tag]; |
| 996 | } | 1005 | } |
| 997 | 1006 | enum{ | |
| 998 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 1007 | BLKDEV_WAIT, /* wait for completion */ |
| 999 | #define DISCARD_FL_WAIT 0x01 /* wait for completion */ | 1008 | BLKDEV_BARRIER, /*issue request with barrier */ |
| 1000 | #define DISCARD_FL_BARRIER 0x02 /* issue DISCARD_BARRIER request */ | 1009 | }; |
| 1001 | extern int blkdev_issue_discard(struct block_device *, sector_t sector, | 1010 | #define BLKDEV_IFL_WAIT (1 << BLKDEV_WAIT) |
| 1002 | sector_t nr_sects, gfp_t, int flags); | 1011 | #define BLKDEV_IFL_BARRIER (1 << BLKDEV_BARRIER) |
| 1003 | 1012 | extern int blkdev_issue_flush(struct block_device *, gfp_t, sector_t *, | |
| 1013 | unsigned long); | ||
| 1014 | extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector, | ||
| 1015 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); | ||
| 1016 | extern int blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, | ||
| 1017 | sector_t nr_sects, gfp_t gfp_mask, unsigned long flags); | ||
| 1004 | static inline int sb_issue_discard(struct super_block *sb, | 1018 | static inline int sb_issue_discard(struct super_block *sb, |
| 1005 | sector_t block, sector_t nr_blocks) | 1019 | sector_t block, sector_t nr_blocks) |
| 1006 | { | 1020 | { |
| 1007 | block <<= (sb->s_blocksize_bits - 9); | 1021 | block <<= (sb->s_blocksize_bits - 9); |
| 1008 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 1022 | nr_blocks <<= (sb->s_blocksize_bits - 9); |
| 1009 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, | 1023 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, |
| 1010 | DISCARD_FL_BARRIER); | 1024 | BLKDEV_IFL_WAIT | BLKDEV_IFL_BARRIER); |
| 1011 | } | 1025 | } |
| 1012 | 1026 | ||
| 1013 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | 1027 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
| @@ -1196,6 +1210,39 @@ static inline void put_dev_sector(Sector p) | |||
| 1196 | struct work_struct; | 1210 | struct work_struct; |
| 1197 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1211 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); |
| 1198 | 1212 | ||
| 1213 | #ifdef CONFIG_BLK_CGROUP | ||
| 1214 | static inline void set_start_time_ns(struct request *req) | ||
| 1215 | { | ||
| 1216 | req->start_time_ns = sched_clock(); | ||
| 1217 | } | ||
| 1218 | |||
| 1219 | static inline void set_io_start_time_ns(struct request *req) | ||
| 1220 | { | ||
| 1221 | req->io_start_time_ns = sched_clock(); | ||
| 1222 | } | ||
| 1223 | |||
| 1224 | static inline uint64_t rq_start_time_ns(struct request *req) | ||
| 1225 | { | ||
| 1226 | return req->start_time_ns; | ||
| 1227 | } | ||
| 1228 | |||
| 1229 | static inline uint64_t rq_io_start_time_ns(struct request *req) | ||
| 1230 | { | ||
| 1231 | return req->io_start_time_ns; | ||
| 1232 | } | ||
| 1233 | #else | ||
| 1234 | static inline void set_start_time_ns(struct request *req) {} | ||
| 1235 | static inline void set_io_start_time_ns(struct request *req) {} | ||
| 1236 | static inline uint64_t rq_start_time_ns(struct request *req) | ||
| 1237 | { | ||
| 1238 | return 0; | ||
| 1239 | } | ||
| 1240 | static inline uint64_t rq_io_start_time_ns(struct request *req) | ||
| 1241 | { | ||
| 1242 | return 0; | ||
| 1243 | } | ||
| 1244 | #endif | ||
| 1245 | |||
| 1199 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ | 1246 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ |
| 1200 | MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) | 1247 | MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) |
| 1201 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ | 1248 | #define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ |
| @@ -1283,10 +1330,11 @@ struct block_device_operations { | |||
| 1283 | int (*direct_access) (struct block_device *, sector_t, | 1330 | int (*direct_access) (struct block_device *, sector_t, |
| 1284 | void **, unsigned long *); | 1331 | void **, unsigned long *); |
| 1285 | int (*media_changed) (struct gendisk *); | 1332 | int (*media_changed) (struct gendisk *); |
| 1286 | unsigned long long (*set_capacity) (struct gendisk *, | 1333 | void (*unlock_native_capacity) (struct gendisk *); |
| 1287 | unsigned long long); | ||
| 1288 | int (*revalidate_disk) (struct gendisk *); | 1334 | int (*revalidate_disk) (struct gendisk *); |
| 1289 | int (*getgeo)(struct block_device *, struct hd_geometry *); | 1335 | int (*getgeo)(struct block_device *, struct hd_geometry *); |
| 1336 | /* this callback is with swap_lock and sometimes page table lock held */ | ||
| 1337 | void (*swap_slot_free_notify) (struct block_device *, unsigned long); | ||
| 1290 | struct module *owner; | 1338 | struct module *owner; |
| 1291 | }; | 1339 | }; |
| 1292 | 1340 | ||
diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index 527504c11c5e..4389ae72024e 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h | |||
| @@ -110,6 +110,15 @@ typedef struct fs_disk_quota { | |||
| 110 | #define FS_DQ_WARNS_MASK (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) | 110 | #define FS_DQ_WARNS_MASK (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) |
| 111 | 111 | ||
| 112 | /* | 112 | /* |
| 113 | * Accounting values. These can only be set for filesystem with | ||
| 114 | * non-transactional quotas that require quotacheck(8) in userspace. | ||
| 115 | */ | ||
| 116 | #define FS_DQ_BCOUNT (1<<12) | ||
| 117 | #define FS_DQ_ICOUNT (1<<13) | ||
| 118 | #define FS_DQ_RTBCOUNT (1<<14) | ||
| 119 | #define FS_DQ_ACCT_MASK (FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT) | ||
| 120 | |||
| 121 | /* | ||
| 113 | * Various flags related to quotactl(2). Only relevant to XFS filesystems. | 122 | * Various flags related to quotactl(2). Only relevant to XFS filesystems. |
| 114 | */ | 123 | */ |
| 115 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ | 124 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ |
diff --git a/include/linux/drbd.h b/include/linux/drbd.h index 4341b1a97a34..68530521ad00 100644 --- a/include/linux/drbd.h +++ b/include/linux/drbd.h | |||
| @@ -53,10 +53,10 @@ | |||
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | extern const char *drbd_buildtag(void); | 55 | extern const char *drbd_buildtag(void); |
| 56 | #define REL_VERSION "8.3.7" | 56 | #define REL_VERSION "8.3.8rc1" |
| 57 | #define API_VERSION 88 | 57 | #define API_VERSION 88 |
| 58 | #define PRO_VERSION_MIN 86 | 58 | #define PRO_VERSION_MIN 86 |
| 59 | #define PRO_VERSION_MAX 92 | 59 | #define PRO_VERSION_MAX 94 |
| 60 | 60 | ||
| 61 | 61 | ||
| 62 | enum drbd_io_error_p { | 62 | enum drbd_io_error_p { |
| @@ -139,6 +139,7 @@ enum drbd_ret_codes { | |||
| 139 | ERR_DATA_NOT_CURRENT = 150, | 139 | ERR_DATA_NOT_CURRENT = 150, |
| 140 | ERR_CONNECTED = 151, /* DRBD 8.3 only */ | 140 | ERR_CONNECTED = 151, /* DRBD 8.3 only */ |
| 141 | ERR_PERM = 152, | 141 | ERR_PERM = 152, |
| 142 | ERR_NEED_APV_93 = 153, | ||
| 142 | 143 | ||
| 143 | /* insert new ones above this line */ | 144 | /* insert new ones above this line */ |
| 144 | AFTER_LAST_ERR_CODE | 145 | AFTER_LAST_ERR_CODE |
diff --git a/include/linux/drbd_limits.h b/include/linux/drbd_limits.h index 51f47a586ad8..440b42e38e89 100644 --- a/include/linux/drbd_limits.h +++ b/include/linux/drbd_limits.h | |||
| @@ -133,5 +133,21 @@ | |||
| 133 | #define DRBD_MAX_BIO_BVECS_MAX 128 | 133 | #define DRBD_MAX_BIO_BVECS_MAX 128 |
| 134 | #define DRBD_MAX_BIO_BVECS_DEF 0 | 134 | #define DRBD_MAX_BIO_BVECS_DEF 0 |
| 135 | 135 | ||
| 136 | #define DRBD_DP_VOLUME_MIN 4 | ||
| 137 | #define DRBD_DP_VOLUME_MAX 1048576 | ||
| 138 | #define DRBD_DP_VOLUME_DEF 16384 | ||
| 139 | |||
| 140 | #define DRBD_DP_INTERVAL_MIN 1 | ||
| 141 | #define DRBD_DP_INTERVAL_MAX 600 | ||
| 142 | #define DRBD_DP_INTERVAL_DEF 5 | ||
| 143 | |||
| 144 | #define DRBD_RS_THROTTLE_TH_MIN 1 | ||
| 145 | #define DRBD_RS_THROTTLE_TH_MAX 600 | ||
| 146 | #define DRBD_RS_THROTTLE_TH_DEF 20 | ||
| 147 | |||
| 148 | #define DRBD_RS_HOLD_OFF_TH_MIN 1 | ||
| 149 | #define DRBD_RS_HOLD_OFF_TH_MAX 6000 | ||
| 150 | #define DRBD_RS_HOLD_OFF_TH_DEF 100 | ||
| 151 | |||
| 136 | #undef RANGE | 152 | #undef RANGE |
| 137 | #endif | 153 | #endif |
diff --git a/include/linux/drbd_nl.h b/include/linux/drbd_nl.h index f7431a4ca608..ce77a746fc9d 100644 --- a/include/linux/drbd_nl.h +++ b/include/linux/drbd_nl.h | |||
| @@ -71,12 +71,17 @@ NL_PACKET(disconnect, 6, ) | |||
| 71 | NL_PACKET(resize, 7, | 71 | NL_PACKET(resize, 7, |
| 72 | NL_INT64( 29, T_MAY_IGNORE, resize_size) | 72 | NL_INT64( 29, T_MAY_IGNORE, resize_size) |
| 73 | NL_BIT( 68, T_MAY_IGNORE, resize_force) | 73 | NL_BIT( 68, T_MAY_IGNORE, resize_force) |
| 74 | NL_BIT( 69, T_MANDATORY, no_resync) | ||
| 74 | ) | 75 | ) |
| 75 | 76 | ||
| 76 | NL_PACKET(syncer_conf, 8, | 77 | NL_PACKET(syncer_conf, 8, |
| 77 | NL_INTEGER( 30, T_MAY_IGNORE, rate) | 78 | NL_INTEGER( 30, T_MAY_IGNORE, rate) |
| 78 | NL_INTEGER( 31, T_MAY_IGNORE, after) | 79 | NL_INTEGER( 31, T_MAY_IGNORE, after) |
| 79 | NL_INTEGER( 32, T_MAY_IGNORE, al_extents) | 80 | NL_INTEGER( 32, T_MAY_IGNORE, al_extents) |
| 81 | NL_INTEGER( 71, T_MAY_IGNORE, dp_volume) | ||
| 82 | NL_INTEGER( 72, T_MAY_IGNORE, dp_interval) | ||
| 83 | NL_INTEGER( 73, T_MAY_IGNORE, throttle_th) | ||
| 84 | NL_INTEGER( 74, T_MAY_IGNORE, hold_off_th) | ||
| 80 | NL_STRING( 52, T_MAY_IGNORE, verify_alg, SHARED_SECRET_MAX) | 85 | NL_STRING( 52, T_MAY_IGNORE, verify_alg, SHARED_SECRET_MAX) |
| 81 | NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32) | 86 | NL_STRING( 51, T_MAY_IGNORE, cpu_mask, 32) |
| 82 | NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX) | 87 | NL_STRING( 64, T_MAY_IGNORE, csums_alg, SHARED_SECRET_MAX) |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 1cb3372e65d8..2c958f4fce1e 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -14,6 +14,9 @@ typedef void (elevator_merged_fn) (struct request_queue *, struct request *, int | |||
| 14 | 14 | ||
| 15 | typedef int (elevator_allow_merge_fn) (struct request_queue *, struct request *, struct bio *); | 15 | typedef int (elevator_allow_merge_fn) (struct request_queue *, struct request *, struct bio *); |
| 16 | 16 | ||
| 17 | typedef void (elevator_bio_merged_fn) (struct request_queue *, | ||
| 18 | struct request *, struct bio *); | ||
| 19 | |||
| 17 | typedef int (elevator_dispatch_fn) (struct request_queue *, int); | 20 | typedef int (elevator_dispatch_fn) (struct request_queue *, int); |
| 18 | 21 | ||
| 19 | typedef void (elevator_add_req_fn) (struct request_queue *, struct request *); | 22 | typedef void (elevator_add_req_fn) (struct request_queue *, struct request *); |
| @@ -36,6 +39,7 @@ struct elevator_ops | |||
| 36 | elevator_merged_fn *elevator_merged_fn; | 39 | elevator_merged_fn *elevator_merged_fn; |
| 37 | elevator_merge_req_fn *elevator_merge_req_fn; | 40 | elevator_merge_req_fn *elevator_merge_req_fn; |
| 38 | elevator_allow_merge_fn *elevator_allow_merge_fn; | 41 | elevator_allow_merge_fn *elevator_allow_merge_fn; |
| 42 | elevator_bio_merged_fn *elevator_bio_merged_fn; | ||
| 39 | 43 | ||
| 40 | elevator_dispatch_fn *elevator_dispatch_fn; | 44 | elevator_dispatch_fn *elevator_dispatch_fn; |
| 41 | elevator_add_req_fn *elevator_add_req_fn; | 45 | elevator_add_req_fn *elevator_add_req_fn; |
| @@ -103,6 +107,8 @@ extern int elv_merge(struct request_queue *, struct request **, struct bio *); | |||
| 103 | extern void elv_merge_requests(struct request_queue *, struct request *, | 107 | extern void elv_merge_requests(struct request_queue *, struct request *, |
| 104 | struct request *); | 108 | struct request *); |
| 105 | extern void elv_merged_request(struct request_queue *, struct request *, int); | 109 | extern void elv_merged_request(struct request_queue *, struct request *, int); |
| 110 | extern void elv_bio_merged(struct request_queue *q, struct request *, | ||
| 111 | struct bio *); | ||
| 106 | extern void elv_requeue_request(struct request_queue *, struct request *); | 112 | extern void elv_requeue_request(struct request_queue *, struct request *); |
| 107 | extern int elv_queue_empty(struct request_queue *); | 113 | extern int elv_queue_empty(struct request_queue *); |
| 108 | extern struct request *elv_former_request(struct request_queue *, struct request *); | 114 | extern struct request *elv_former_request(struct request_queue *, struct request *); |
diff --git a/include/linux/ext2_fs_sb.h b/include/linux/ext2_fs_sb.h index 1cdb66367c98..db4d9f586bb6 100644 --- a/include/linux/ext2_fs_sb.h +++ b/include/linux/ext2_fs_sb.h | |||
| @@ -106,6 +106,15 @@ struct ext2_sb_info { | |||
| 106 | spinlock_t s_rsv_window_lock; | 106 | spinlock_t s_rsv_window_lock; |
| 107 | struct rb_root s_rsv_window_root; | 107 | struct rb_root s_rsv_window_root; |
| 108 | struct ext2_reserve_window_node s_rsv_window_head; | 108 | struct ext2_reserve_window_node s_rsv_window_head; |
| 109 | /* | ||
| 110 | * s_lock protects against concurrent modifications of s_mount_state, | ||
| 111 | * s_blocks_last, s_overhead_last and the content of superblock's | ||
| 112 | * buffer pointed to by sbi->s_es. | ||
| 113 | * | ||
| 114 | * Note: It is used in ext2_show_options() to provide a consistent view | ||
| 115 | * of the mount options. | ||
| 116 | */ | ||
| 117 | spinlock_t s_lock; | ||
| 109 | }; | 118 | }; |
| 110 | 119 | ||
| 111 | static inline spinlock_t * | 120 | static inline spinlock_t * |
diff --git a/include/linux/fb.h b/include/linux/fb.h index c10163b4c40e..1296af45169d 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -403,6 +403,7 @@ struct fb_cursor { | |||
| 403 | #include <linux/notifier.h> | 403 | #include <linux/notifier.h> |
| 404 | #include <linux/list.h> | 404 | #include <linux/list.h> |
| 405 | #include <linux/backlight.h> | 405 | #include <linux/backlight.h> |
| 406 | #include <linux/slab.h> | ||
| 406 | #include <asm/io.h> | 407 | #include <asm/io.h> |
| 407 | 408 | ||
| 408 | struct vm_area_struct; | 409 | struct vm_area_struct; |
| @@ -862,10 +863,22 @@ struct fb_info { | |||
| 862 | /* we need the PCI or similiar aperture base/size not | 863 | /* we need the PCI or similiar aperture base/size not |
| 863 | smem_start/size as smem_start may just be an object | 864 | smem_start/size as smem_start may just be an object |
| 864 | allocated inside the aperture so may not actually overlap */ | 865 | allocated inside the aperture so may not actually overlap */ |
| 865 | resource_size_t aperture_base; | 866 | struct apertures_struct { |
| 866 | resource_size_t aperture_size; | 867 | unsigned int count; |
| 868 | struct aperture { | ||
| 869 | resource_size_t base; | ||
| 870 | resource_size_t size; | ||
| 871 | } ranges[0]; | ||
| 872 | } *apertures; | ||
| 867 | }; | 873 | }; |
| 868 | 874 | ||
| 875 | static inline struct apertures_struct *alloc_apertures(unsigned int max_num) { | ||
| 876 | struct apertures_struct *a = kzalloc(sizeof(struct apertures_struct) | ||
| 877 | + max_num * sizeof(struct aperture), GFP_KERNEL); | ||
| 878 | a->count = max_num; | ||
| 879 | return a; | ||
| 880 | } | ||
| 881 | |||
| 869 | #ifdef MODULE | 882 | #ifdef MODULE |
| 870 | #define FBINFO_DEFAULT FBINFO_MODULE | 883 | #define FBINFO_DEFAULT FBINFO_MODULE |
| 871 | #else | 884 | #else |
| @@ -958,6 +971,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf, | |||
| 958 | /* drivers/video/fbmem.c */ | 971 | /* drivers/video/fbmem.c */ |
| 959 | extern int register_framebuffer(struct fb_info *fb_info); | 972 | extern int register_framebuffer(struct fb_info *fb_info); |
| 960 | extern int unregister_framebuffer(struct fb_info *fb_info); | 973 | extern int unregister_framebuffer(struct fb_info *fb_info); |
| 974 | extern void remove_conflicting_framebuffers(struct apertures_struct *a, | ||
| 975 | const char *name, bool primary); | ||
| 961 | extern int fb_prepare_logo(struct fb_info *fb_info, int rotate); | 976 | extern int fb_prepare_logo(struct fb_info *fb_info, int rotate); |
| 962 | extern int fb_show_logo(struct fb_info *fb_info, int rotate); | 977 | extern int fb_show_logo(struct fb_info *fb_info, int rotate); |
| 963 | extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size); | 978 | extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size); |
diff --git a/include/linux/fcntl.h b/include/linux/fcntl.h index 86037400a6e3..afc00af3229b 100644 --- a/include/linux/fcntl.h +++ b/include/linux/fcntl.h | |||
| @@ -22,6 +22,12 @@ | |||
| 22 | #define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2) | 22 | #define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2) |
| 23 | 23 | ||
| 24 | /* | 24 | /* |
| 25 | * Set and get of pipe page size array | ||
| 26 | */ | ||
| 27 | #define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7) | ||
| 28 | #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8) | ||
| 29 | |||
| 30 | /* | ||
| 25 | * Types of directory notifications that may be requested. | 31 | * Types of directory notifications that may be requested. |
| 26 | */ | 32 | */ |
| 27 | #define DN_ACCESS 0x00000001 /* File accessed */ | 33 | #define DN_ACCESS 0x00000001 /* File accessed */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 4079ef99900f..1775d362732d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -651,6 +651,7 @@ struct block_device { | |||
| 651 | int bd_openers; | 651 | int bd_openers; |
| 652 | struct mutex bd_mutex; /* open/close mutex */ | 652 | struct mutex bd_mutex; /* open/close mutex */ |
| 653 | struct list_head bd_inodes; | 653 | struct list_head bd_inodes; |
| 654 | void * bd_claiming; | ||
| 654 | void * bd_holder; | 655 | void * bd_holder; |
| 655 | int bd_holders; | 656 | int bd_holders; |
| 656 | #ifdef CONFIG_SYSFS | 657 | #ifdef CONFIG_SYSFS |
diff --git a/include/linux/gsmmux.h b/include/linux/gsmmux.h new file mode 100644 index 000000000000..378de4195caf --- /dev/null +++ b/include/linux/gsmmux.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef _LINUX_GSMMUX_H | ||
| 2 | #define _LINUX_GSMMUX_H | ||
| 3 | |||
| 4 | struct gsm_config | ||
| 5 | { | ||
| 6 | unsigned int adaption; | ||
| 7 | unsigned int encapsulation; | ||
| 8 | unsigned int initiator; | ||
| 9 | unsigned int t1; | ||
| 10 | unsigned int t2; | ||
| 11 | unsigned int t3; | ||
| 12 | unsigned int n2; | ||
| 13 | unsigned int mru; | ||
| 14 | unsigned int mtu; | ||
| 15 | unsigned int k; | ||
| 16 | unsigned int i; | ||
| 17 | unsigned int unused[8]; /* Padding for expansion without | ||
| 18 | breaking stuff */ | ||
| 19 | }; | ||
| 20 | |||
| 21 | #define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config) | ||
| 22 | #define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config) | ||
| 23 | |||
| 24 | |||
| 25 | #endif | ||
diff --git a/include/linux/hdpu_features.h b/include/linux/hdpu_features.h deleted file mode 100644 index 6a8715431ae4..000000000000 --- a/include/linux/hdpu_features.h +++ /dev/null | |||
| @@ -1,26 +0,0 @@ | |||
| 1 | #include <linux/spinlock.h> | ||
| 2 | |||
| 3 | struct cpustate_t { | ||
| 4 | spinlock_t lock; | ||
| 5 | int excl; | ||
| 6 | int open_count; | ||
| 7 | unsigned char cached_val; | ||
| 8 | int inited; | ||
| 9 | unsigned long *set_addr; | ||
| 10 | unsigned long *clr_addr; | ||
| 11 | }; | ||
| 12 | |||
| 13 | |||
| 14 | #define HDPU_CPUSTATE_NAME "hdpu cpustate" | ||
| 15 | #define HDPU_NEXUS_NAME "hdpu nexus" | ||
| 16 | |||
| 17 | #define CPUSTATE_KERNEL_MAJOR 0x10 | ||
| 18 | |||
| 19 | #define CPUSTATE_KERNEL_INIT_DRV 0 /* CPU State Driver Initialized */ | ||
| 20 | #define CPUSTATE_KERNEL_INIT_PCI 1 /* 64360 PCI Busses Init */ | ||
| 21 | #define CPUSTATE_KERNEL_INIT_REG 2 /* 64360 Bridge Init */ | ||
| 22 | #define CPUSTATE_KERNEL_CPU1_KICK 3 /* Boot cpu 1 */ | ||
| 23 | #define CPUSTATE_KERNEL_CPU1_OK 4 /* Cpu 1 has checked in */ | ||
| 24 | #define CPUSTATE_KERNEL_OK 5 /* Terminal state */ | ||
| 25 | #define CPUSTATE_KERNEL_RESET 14 /* Board reset via SW*/ | ||
| 26 | #define CPUSTATE_KERNEL_HALT 15 /* Board halted via SW*/ | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index b1344ec4b7fc..895001f7f4b2 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -308,11 +308,13 @@ struct hid_item { | |||
| 308 | #define HID_QUIRK_NOTOUCH 0x00000002 | 308 | #define HID_QUIRK_NOTOUCH 0x00000002 |
| 309 | #define HID_QUIRK_IGNORE 0x00000004 | 309 | #define HID_QUIRK_IGNORE 0x00000004 |
| 310 | #define HID_QUIRK_NOGET 0x00000008 | 310 | #define HID_QUIRK_NOGET 0x00000008 |
| 311 | #define HID_QUIRK_HIDDEV_FORCE 0x00000010 | ||
| 311 | #define HID_QUIRK_BADPAD 0x00000020 | 312 | #define HID_QUIRK_BADPAD 0x00000020 |
| 312 | #define HID_QUIRK_MULTI_INPUT 0x00000040 | 313 | #define HID_QUIRK_MULTI_INPUT 0x00000040 |
| 313 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 | 314 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 |
| 314 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 | 315 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 |
| 315 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 | 316 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 |
| 317 | #define HID_QUIRK_NO_IGNORE 0x40000000 | ||
| 316 | 318 | ||
| 317 | /* | 319 | /* |
| 318 | * This is the global environment of the parser. This information is | 320 | * This is the global environment of the parser. This information is |
| @@ -589,6 +591,9 @@ struct hid_usage_id { | |||
| 589 | * @report_fixup: called before report descriptor parsing (NULL means nop) | 591 | * @report_fixup: called before report descriptor parsing (NULL means nop) |
| 590 | * @input_mapping: invoked on input registering before mapping an usage | 592 | * @input_mapping: invoked on input registering before mapping an usage |
| 591 | * @input_mapped: invoked on input registering after mapping an usage | 593 | * @input_mapped: invoked on input registering after mapping an usage |
| 594 | * @suspend: invoked on suspend (NULL means nop) | ||
| 595 | * @resume: invoked on resume if device was not reset (NULL means nop) | ||
| 596 | * @reset_resume: invoked on resume if device was reset (NULL means nop) | ||
| 592 | * | 597 | * |
| 593 | * raw_event and event should return 0 on no action performed, 1 when no | 598 | * raw_event and event should return 0 on no action performed, 1 when no |
| 594 | * further processing should be done and negative on error | 599 | * further processing should be done and negative on error |
| @@ -629,6 +634,11 @@ struct hid_driver { | |||
| 629 | int (*input_mapped)(struct hid_device *hdev, | 634 | int (*input_mapped)(struct hid_device *hdev, |
| 630 | struct hid_input *hidinput, struct hid_field *field, | 635 | struct hid_input *hidinput, struct hid_field *field, |
| 631 | struct hid_usage *usage, unsigned long **bit, int *max); | 636 | struct hid_usage *usage, unsigned long **bit, int *max); |
| 637 | #ifdef CONFIG_PM | ||
| 638 | int (*suspend)(struct hid_device *hdev, pm_message_t message); | ||
| 639 | int (*resume)(struct hid_device *hdev); | ||
| 640 | int (*reset_resume)(struct hid_device *hdev); | ||
| 641 | #endif | ||
| 632 | /* private: */ | 642 | /* private: */ |
| 633 | struct device_driver driver; | 643 | struct device_driver driver; |
| 634 | }; | 644 | }; |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 3239d1c10acb..b6d448048ae2 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -362,7 +362,7 @@ struct ide_drive_s; | |||
| 362 | struct ide_disk_ops { | 362 | struct ide_disk_ops { |
| 363 | int (*check)(struct ide_drive_s *, const char *); | 363 | int (*check)(struct ide_drive_s *, const char *); |
| 364 | int (*get_capacity)(struct ide_drive_s *); | 364 | int (*get_capacity)(struct ide_drive_s *); |
| 365 | u64 (*set_capacity)(struct ide_drive_s *, u64); | 365 | void (*unlock_native_capacity)(struct ide_drive_s *); |
| 366 | void (*setup)(struct ide_drive_s *); | 366 | void (*setup)(struct ide_drive_s *); |
| 367 | void (*flush)(struct ide_drive_s *); | 367 | void (*flush)(struct ide_drive_s *); |
| 368 | int (*init_media)(struct ide_drive_s *, struct gendisk *); | 368 | int (*init_media)(struct ide_drive_s *, struct gendisk *); |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5137db3317f9..c2331138ca1b 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -78,7 +78,7 @@ enum { | |||
| 78 | IRQTF_AFFINITY, | 78 | IRQTF_AFFINITY, |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | /** | 81 | /* |
| 82 | * These values can be returned by request_any_context_irq() and | 82 | * These values can be returned by request_any_context_irq() and |
| 83 | * describe the context the interrupt will be run in. | 83 | * describe the context the interrupt will be run in. |
| 84 | * | 84 | * |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 516a2a27e87a..e06965081ba5 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
| @@ -427,9 +427,9 @@ struct transaction_s | |||
| 427 | enum { | 427 | enum { |
| 428 | T_RUNNING, | 428 | T_RUNNING, |
| 429 | T_LOCKED, | 429 | T_LOCKED, |
| 430 | T_RUNDOWN, | ||
| 431 | T_FLUSH, | 430 | T_FLUSH, |
| 432 | T_COMMIT, | 431 | T_COMMIT, |
| 432 | T_COMMIT_RECORD, | ||
| 433 | T_FINISHED | 433 | T_FINISHED |
| 434 | } t_state; | 434 | } t_state; |
| 435 | 435 | ||
| @@ -991,6 +991,7 @@ int journal_start_commit(journal_t *journal, tid_t *tid); | |||
| 991 | int journal_force_commit_nested(journal_t *journal); | 991 | int journal_force_commit_nested(journal_t *journal); |
| 992 | int log_wait_commit(journal_t *journal, tid_t tid); | 992 | int log_wait_commit(journal_t *journal, tid_t tid); |
| 993 | int log_do_checkpoint(journal_t *journal); | 993 | int log_do_checkpoint(journal_t *journal); |
| 994 | int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid); | ||
| 994 | 995 | ||
| 995 | void __log_wait_for_space(journal_t *journal); | 996 | void __log_wait_for_space(journal_t *journal); |
| 996 | extern void __journal_drop_transaction(journal_t *, transaction_t *); | 997 | extern void __journal_drop_transaction(journal_t *, transaction_t *); |
diff --git a/include/linux/kdb.h b/include/linux/kdb.h new file mode 100644 index 000000000000..ccb2b3ec0fe8 --- /dev/null +++ b/include/linux/kdb.h | |||
| @@ -0,0 +1,117 @@ | |||
| 1 | #ifndef _KDB_H | ||
| 2 | #define _KDB_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Kernel Debugger Architecture Independent Global Headers | ||
| 6 | * | ||
| 7 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 8 | * License. See the file "COPYING" in the main directory of this archive | ||
| 9 | * for more details. | ||
| 10 | * | ||
| 11 | * Copyright (c) 2000-2007 Silicon Graphics, Inc. All Rights Reserved. | ||
| 12 | * Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com> | ||
| 13 | * Copyright (C) 2009 Jason Wessel <jason.wessel@windriver.com> | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifdef CONFIG_KGDB_KDB | ||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/sched.h> | ||
| 19 | #include <asm/atomic.h> | ||
| 20 | |||
| 21 | #define KDB_POLL_FUNC_MAX 5 | ||
| 22 | extern int kdb_poll_idx; | ||
| 23 | |||
| 24 | /* | ||
| 25 | * kdb_initial_cpu is initialized to -1, and is set to the cpu | ||
| 26 | * number whenever the kernel debugger is entered. | ||
| 27 | */ | ||
| 28 | extern int kdb_initial_cpu; | ||
| 29 | extern atomic_t kdb_event; | ||
| 30 | |||
| 31 | /* | ||
| 32 | * kdb_diemsg | ||
| 33 | * | ||
| 34 | * Contains a pointer to the last string supplied to the | ||
| 35 | * kernel 'die' panic function. | ||
| 36 | */ | ||
| 37 | extern const char *kdb_diemsg; | ||
| 38 | |||
| 39 | #define KDB_FLAG_EARLYKDB (1 << 0) /* set from boot parameter kdb=early */ | ||
| 40 | #define KDB_FLAG_CATASTROPHIC (1 << 1) /* A catastrophic event has occurred */ | ||
| 41 | #define KDB_FLAG_CMD_INTERRUPT (1 << 2) /* Previous command was interrupted */ | ||
| 42 | #define KDB_FLAG_NOIPI (1 << 3) /* Do not send IPIs */ | ||
| 43 | #define KDB_FLAG_ONLY_DO_DUMP (1 << 4) /* Only do a dump, used when | ||
| 44 | * kdb is off */ | ||
| 45 | #define KDB_FLAG_NO_CONSOLE (1 << 5) /* No console is available, | ||
| 46 | * kdb is disabled */ | ||
| 47 | #define KDB_FLAG_NO_VT_CONSOLE (1 << 6) /* No VT console is available, do | ||
| 48 | * not use keyboard */ | ||
| 49 | #define KDB_FLAG_NO_I8042 (1 << 7) /* No i8042 chip is available, do | ||
| 50 | * not use keyboard */ | ||
| 51 | |||
| 52 | extern int kdb_flags; /* Global flags, see kdb_state for per cpu state */ | ||
| 53 | |||
| 54 | extern void kdb_save_flags(void); | ||
| 55 | extern void kdb_restore_flags(void); | ||
| 56 | |||
| 57 | #define KDB_FLAG(flag) (kdb_flags & KDB_FLAG_##flag) | ||
| 58 | #define KDB_FLAG_SET(flag) ((void)(kdb_flags |= KDB_FLAG_##flag)) | ||
| 59 | #define KDB_FLAG_CLEAR(flag) ((void)(kdb_flags &= ~KDB_FLAG_##flag)) | ||
| 60 | |||
| 61 | /* | ||
| 62 | * External entry point for the kernel debugger. The pt_regs | ||
| 63 | * at the time of entry are supplied along with the reason for | ||
| 64 | * entry to the kernel debugger. | ||
| 65 | */ | ||
| 66 | |||
| 67 | typedef enum { | ||
| 68 | KDB_REASON_ENTER = 1, /* KDB_ENTER() trap/fault - regs valid */ | ||
| 69 | KDB_REASON_ENTER_SLAVE, /* KDB_ENTER_SLAVE() trap/fault - regs valid */ | ||
| 70 | KDB_REASON_BREAK, /* Breakpoint inst. - regs valid */ | ||
| 71 | KDB_REASON_DEBUG, /* Debug Fault - regs valid */ | ||
| 72 | KDB_REASON_OOPS, /* Kernel Oops - regs valid */ | ||
| 73 | KDB_REASON_SWITCH, /* CPU switch - regs valid*/ | ||
| 74 | KDB_REASON_KEYBOARD, /* Keyboard entry - regs valid */ | ||
| 75 | KDB_REASON_NMI, /* Non-maskable interrupt; regs valid */ | ||
| 76 | KDB_REASON_RECURSE, /* Recursive entry to kdb; | ||
| 77 | * regs probably valid */ | ||
| 78 | KDB_REASON_SSTEP, /* Single Step trap. - regs valid */ | ||
| 79 | } kdb_reason_t; | ||
| 80 | |||
| 81 | extern int kdb_trap_printk; | ||
| 82 | extern int vkdb_printf(const char *fmt, va_list args) | ||
| 83 | __attribute__ ((format (printf, 1, 0))); | ||
| 84 | extern int kdb_printf(const char *, ...) | ||
| 85 | __attribute__ ((format (printf, 1, 2))); | ||
| 86 | typedef int (*kdb_printf_t)(const char *, ...) | ||
| 87 | __attribute__ ((format (printf, 1, 2))); | ||
| 88 | |||
| 89 | extern void kdb_init(int level); | ||
| 90 | |||
| 91 | /* Access to kdb specific polling devices */ | ||
| 92 | typedef int (*get_char_func)(void); | ||
| 93 | extern get_char_func kdb_poll_funcs[]; | ||
| 94 | extern int kdb_get_kbd_char(void); | ||
| 95 | |||
| 96 | static inline | ||
| 97 | int kdb_process_cpu(const struct task_struct *p) | ||
| 98 | { | ||
| 99 | unsigned int cpu = task_thread_info(p)->cpu; | ||
| 100 | if (cpu > num_possible_cpus()) | ||
| 101 | cpu = 0; | ||
| 102 | return cpu; | ||
| 103 | } | ||
| 104 | |||
| 105 | /* kdb access to register set for stack dumping */ | ||
| 106 | extern struct pt_regs *kdb_current_regs; | ||
| 107 | |||
| 108 | #else /* ! CONFIG_KGDB_KDB */ | ||
| 109 | #define kdb_printf(...) | ||
| 110 | #define kdb_init(x) | ||
| 111 | #endif /* CONFIG_KGDB_KDB */ | ||
| 112 | enum { | ||
| 113 | KDB_NOT_INITIALIZED, | ||
| 114 | KDB_INIT_EARLY, | ||
| 115 | KDB_INIT_FULL, | ||
| 116 | }; | ||
| 117 | #endif /* !_KDB_H */ | ||
diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h index 19ec41a183f5..9340f34d1bb5 100644 --- a/include/linux/kgdb.h +++ b/include/linux/kgdb.h | |||
| @@ -16,10 +16,12 @@ | |||
| 16 | #include <linux/serial_8250.h> | 16 | #include <linux/serial_8250.h> |
| 17 | #include <linux/linkage.h> | 17 | #include <linux/linkage.h> |
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | |||
| 20 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| 20 | #ifdef CONFIG_HAVE_ARCH_KGDB | ||
| 21 | #include <asm/kgdb.h> | 21 | #include <asm/kgdb.h> |
| 22 | #endif | ||
| 22 | 23 | ||
| 24 | #ifdef CONFIG_KGDB | ||
| 23 | struct pt_regs; | 25 | struct pt_regs; |
| 24 | 26 | ||
| 25 | /** | 27 | /** |
| @@ -34,20 +36,6 @@ struct pt_regs; | |||
| 34 | extern int kgdb_skipexception(int exception, struct pt_regs *regs); | 36 | extern int kgdb_skipexception(int exception, struct pt_regs *regs); |
| 35 | 37 | ||
| 36 | /** | 38 | /** |
| 37 | * kgdb_post_primary_code - (optional) Save error vector/code numbers. | ||
| 38 | * @regs: Original pt_regs. | ||
| 39 | * @e_vector: Original error vector. | ||
| 40 | * @err_code: Original error code. | ||
| 41 | * | ||
| 42 | * This is usually needed on architectures which support SMP and | ||
| 43 | * KGDB. This function is called after all the secondary cpus have | ||
| 44 | * been put to a know spin state and the primary CPU has control over | ||
| 45 | * KGDB. | ||
| 46 | */ | ||
| 47 | extern void kgdb_post_primary_code(struct pt_regs *regs, int e_vector, | ||
| 48 | int err_code); | ||
| 49 | |||
| 50 | /** | ||
| 51 | * kgdb_disable_hw_debug - (optional) Disable hardware debugging hook | 39 | * kgdb_disable_hw_debug - (optional) Disable hardware debugging hook |
| 52 | * @regs: Current &struct pt_regs. | 40 | * @regs: Current &struct pt_regs. |
| 53 | * | 41 | * |
| @@ -72,6 +60,7 @@ struct uart_port; | |||
| 72 | void kgdb_breakpoint(void); | 60 | void kgdb_breakpoint(void); |
| 73 | 61 | ||
| 74 | extern int kgdb_connected; | 62 | extern int kgdb_connected; |
| 63 | extern int kgdb_io_module_registered; | ||
| 75 | 64 | ||
| 76 | extern atomic_t kgdb_setting_breakpoint; | 65 | extern atomic_t kgdb_setting_breakpoint; |
| 77 | extern atomic_t kgdb_cpu_doing_single_step; | 66 | extern atomic_t kgdb_cpu_doing_single_step; |
| @@ -202,12 +191,34 @@ kgdb_arch_handle_exception(int vector, int signo, int err_code, | |||
| 202 | */ | 191 | */ |
| 203 | extern void kgdb_roundup_cpus(unsigned long flags); | 192 | extern void kgdb_roundup_cpus(unsigned long flags); |
| 204 | 193 | ||
| 194 | /** | ||
| 195 | * kgdb_arch_set_pc - Generic call back to the program counter | ||
| 196 | * @regs: Current &struct pt_regs. | ||
| 197 | * @pc: The new value for the program counter | ||
| 198 | * | ||
| 199 | * This function handles updating the program counter and requires an | ||
| 200 | * architecture specific implementation. | ||
| 201 | */ | ||
| 202 | extern void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc); | ||
| 203 | |||
| 204 | |||
| 205 | /* Optional functions. */ | 205 | /* Optional functions. */ |
| 206 | extern int kgdb_validate_break_address(unsigned long addr); | 206 | extern int kgdb_validate_break_address(unsigned long addr); |
| 207 | extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr); | 207 | extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr); |
| 208 | extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); | 208 | extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); |
| 209 | 209 | ||
| 210 | /** | 210 | /** |
| 211 | * kgdb_arch_late - Perform any architecture specific initalization. | ||
| 212 | * | ||
| 213 | * This function will handle the late initalization of any | ||
| 214 | * architecture specific callbacks. This is an optional function for | ||
| 215 | * handling things like late initialization of hw breakpoints. The | ||
| 216 | * default implementation does nothing. | ||
| 217 | */ | ||
| 218 | extern void kgdb_arch_late(void); | ||
| 219 | |||
| 220 | |||
| 221 | /** | ||
| 211 | * struct kgdb_arch - Describe architecture specific values. | 222 | * struct kgdb_arch - Describe architecture specific values. |
| 212 | * @gdb_bpt_instr: The instruction to trigger a breakpoint. | 223 | * @gdb_bpt_instr: The instruction to trigger a breakpoint. |
| 213 | * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT. | 224 | * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT. |
| @@ -247,6 +258,8 @@ struct kgdb_arch { | |||
| 247 | * the I/O driver. | 258 | * the I/O driver. |
| 248 | * @post_exception: Pointer to a function that will do any cleanup work | 259 | * @post_exception: Pointer to a function that will do any cleanup work |
| 249 | * for the I/O driver. | 260 | * for the I/O driver. |
| 261 | * @is_console: 1 if the end device is a console 0 if the I/O device is | ||
| 262 | * not a console | ||
| 250 | */ | 263 | */ |
| 251 | struct kgdb_io { | 264 | struct kgdb_io { |
| 252 | const char *name; | 265 | const char *name; |
| @@ -256,6 +269,7 @@ struct kgdb_io { | |||
| 256 | int (*init) (void); | 269 | int (*init) (void); |
| 257 | void (*pre_exception) (void); | 270 | void (*pre_exception) (void); |
| 258 | void (*post_exception) (void); | 271 | void (*post_exception) (void); |
| 272 | int is_console; | ||
| 259 | }; | 273 | }; |
| 260 | 274 | ||
| 261 | extern struct kgdb_arch arch_kgdb_ops; | 275 | extern struct kgdb_arch arch_kgdb_ops; |
| @@ -264,12 +278,14 @@ extern unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs); | |||
| 264 | 278 | ||
| 265 | extern int kgdb_register_io_module(struct kgdb_io *local_kgdb_io_ops); | 279 | extern int kgdb_register_io_module(struct kgdb_io *local_kgdb_io_ops); |
| 266 | extern void kgdb_unregister_io_module(struct kgdb_io *local_kgdb_io_ops); | 280 | extern void kgdb_unregister_io_module(struct kgdb_io *local_kgdb_io_ops); |
| 281 | extern struct kgdb_io *dbg_io_ops; | ||
| 267 | 282 | ||
| 268 | extern int kgdb_hex2long(char **ptr, unsigned long *long_val); | 283 | extern int kgdb_hex2long(char **ptr, unsigned long *long_val); |
| 269 | extern int kgdb_mem2hex(char *mem, char *buf, int count); | 284 | extern int kgdb_mem2hex(char *mem, char *buf, int count); |
| 270 | extern int kgdb_hex2mem(char *buf, char *mem, int count); | 285 | extern int kgdb_hex2mem(char *buf, char *mem, int count); |
| 271 | 286 | ||
| 272 | extern int kgdb_isremovedbreak(unsigned long addr); | 287 | extern int kgdb_isremovedbreak(unsigned long addr); |
| 288 | extern void kgdb_schedule_breakpoint(void); | ||
| 273 | 289 | ||
| 274 | extern int | 290 | extern int |
| 275 | kgdb_handle_exception(int ex_vector, int signo, int err_code, | 291 | kgdb_handle_exception(int ex_vector, int signo, int err_code, |
| @@ -278,5 +294,12 @@ extern int kgdb_nmicallback(int cpu, void *regs); | |||
| 278 | 294 | ||
| 279 | extern int kgdb_single_step; | 295 | extern int kgdb_single_step; |
| 280 | extern atomic_t kgdb_active; | 296 | extern atomic_t kgdb_active; |
| 281 | 297 | #define in_dbg_master() \ | |
| 298 | (raw_smp_processor_id() == atomic_read(&kgdb_active)) | ||
| 299 | extern bool dbg_is_early; | ||
| 300 | extern void __init dbg_late_init(void); | ||
| 301 | #else /* ! CONFIG_KGDB */ | ||
| 302 | #define in_dbg_master() (0) | ||
| 303 | #define dbg_late_init() | ||
| 304 | #endif /* ! CONFIG_KGDB */ | ||
| 282 | #endif /* _KGDB_H_ */ | 305 | #endif /* _KGDB_H_ */ |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index d9456f69904f..cf343a852534 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -136,12 +136,24 @@ struct kobj_attribute { | |||
| 136 | 136 | ||
| 137 | extern const struct sysfs_ops kobj_sysfs_ops; | 137 | extern const struct sysfs_ops kobj_sysfs_ops; |
| 138 | 138 | ||
| 139 | /* | ||
| 140 | * Namespace types which are used to tag kobjects and sysfs entries. | ||
| 141 | * Network namespace will likely be the first. | ||
| 142 | */ | ||
| 139 | enum kobj_ns_type { | 143 | enum kobj_ns_type { |
| 140 | KOBJ_NS_TYPE_NONE = 0, | 144 | KOBJ_NS_TYPE_NONE = 0, |
| 145 | KOBJ_NS_TYPE_NET, | ||
| 141 | KOBJ_NS_TYPES | 146 | KOBJ_NS_TYPES |
| 142 | }; | 147 | }; |
| 143 | 148 | ||
| 144 | struct sock; | 149 | struct sock; |
| 150 | |||
| 151 | /* | ||
| 152 | * Callbacks so sysfs can determine namespaces | ||
| 153 | * @current_ns: return calling task's namespace | ||
| 154 | * @netlink_ns: return namespace to which a sock belongs (right?) | ||
| 155 | * @initial_ns: return the initial namespace (i.e. init_net_ns) | ||
| 156 | */ | ||
| 145 | struct kobj_ns_type_operations { | 157 | struct kobj_ns_type_operations { |
| 146 | enum kobj_ns_type type; | 158 | enum kobj_ns_type type; |
| 147 | const void *(*current_ns)(void); | 159 | const void *(*current_ns)(void); |
diff --git a/include/linux/msm_mdp.h b/include/linux/msm_mdp.h new file mode 100644 index 000000000000..d11fe0f2f956 --- /dev/null +++ b/include/linux/msm_mdp.h | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | /* include/linux/msm_mdp.h | ||
| 2 | * | ||
| 3 | * Copyright (C) 2007 Google Incorporated | ||
| 4 | * | ||
| 5 | * This software is licensed under the terms of the GNU General Public | ||
| 6 | * License version 2, as published by the Free Software Foundation, and | ||
| 7 | * may be copied, distributed, and modified under those terms. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | #ifndef _MSM_MDP_H_ | ||
| 15 | #define _MSM_MDP_H_ | ||
| 16 | |||
| 17 | #include <linux/types.h> | ||
| 18 | |||
| 19 | #define MSMFB_IOCTL_MAGIC 'm' | ||
| 20 | #define MSMFB_GRP_DISP _IOW(MSMFB_IOCTL_MAGIC, 1, unsigned int) | ||
| 21 | #define MSMFB_BLIT _IOW(MSMFB_IOCTL_MAGIC, 2, unsigned int) | ||
| 22 | |||
| 23 | enum { | ||
| 24 | MDP_RGB_565, /* RGB 565 planar */ | ||
| 25 | MDP_XRGB_8888, /* RGB 888 padded */ | ||
| 26 | MDP_Y_CBCR_H2V2, /* Y and CbCr, pseudo planar w/ Cb is in MSB */ | ||
| 27 | MDP_ARGB_8888, /* ARGB 888 */ | ||
| 28 | MDP_RGB_888, /* RGB 888 planar */ | ||
| 29 | MDP_Y_CRCB_H2V2, /* Y and CrCb, pseudo planar w/ Cr is in MSB */ | ||
| 30 | MDP_YCRYCB_H2V1, /* YCrYCb interleave */ | ||
| 31 | MDP_Y_CRCB_H2V1, /* Y and CrCb, pseduo planar w/ Cr is in MSB */ | ||
| 32 | MDP_Y_CBCR_H2V1, /* Y and CrCb, pseduo planar w/ Cr is in MSB */ | ||
| 33 | MDP_RGBA_8888, /* ARGB 888 */ | ||
| 34 | MDP_BGRA_8888, /* ABGR 888 */ | ||
| 35 | MDP_IMGTYPE_LIMIT /* Non valid image type after this enum */ | ||
| 36 | }; | ||
| 37 | |||
| 38 | enum { | ||
| 39 | PMEM_IMG, | ||
| 40 | FB_IMG, | ||
| 41 | }; | ||
| 42 | |||
| 43 | /* flag values */ | ||
| 44 | #define MDP_ROT_NOP 0 | ||
| 45 | #define MDP_FLIP_LR 0x1 | ||
| 46 | #define MDP_FLIP_UD 0x2 | ||
| 47 | #define MDP_ROT_90 0x4 | ||
| 48 | #define MDP_ROT_180 (MDP_FLIP_UD|MDP_FLIP_LR) | ||
| 49 | #define MDP_ROT_270 (MDP_ROT_90|MDP_FLIP_UD|MDP_FLIP_LR) | ||
| 50 | #define MDP_DITHER 0x8 | ||
| 51 | #define MDP_BLUR 0x10 | ||
| 52 | |||
| 53 | #define MDP_TRANSP_NOP 0xffffffff | ||
| 54 | #define MDP_ALPHA_NOP 0xff | ||
| 55 | |||
| 56 | struct mdp_rect { | ||
| 57 | u32 x, y, w, h; | ||
| 58 | }; | ||
| 59 | |||
| 60 | struct mdp_img { | ||
| 61 | u32 width, height, format, offset; | ||
| 62 | int memory_id; /* the file descriptor */ | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct mdp_blit_req { | ||
| 66 | struct mdp_img src; | ||
| 67 | struct mdp_img dst; | ||
| 68 | struct mdp_rect src_rect; | ||
| 69 | struct mdp_rect dst_rect; | ||
| 70 | u32 alpha, transp_mask, flags; | ||
| 71 | }; | ||
| 72 | |||
| 73 | struct mdp_blit_req_list { | ||
| 74 | u32 count; | ||
| 75 | struct mdp_blit_req req[]; | ||
| 76 | }; | ||
| 77 | |||
| 78 | #endif /* _MSM_MDP_H_ */ | ||
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 6eaca5e1e8ca..59d066936ab9 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
| @@ -188,6 +188,10 @@ extern int netlink_has_listeners(struct sock *sk, unsigned int group); | |||
| 188 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); | 188 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); |
| 189 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, | 189 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, |
| 190 | __u32 group, gfp_t allocation); | 190 | __u32 group, gfp_t allocation); |
| 191 | extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, | ||
| 192 | __u32 pid, __u32 group, gfp_t allocation, | ||
| 193 | int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data), | ||
| 194 | void *filter_data); | ||
| 191 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); | 195 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); |
| 192 | extern int netlink_register_notifier(struct notifier_block *nb); | 196 | extern int netlink_register_notifier(struct notifier_block *nb); |
| 193 | extern int netlink_unregister_notifier(struct notifier_block *nb); | 197 | extern int netlink_unregister_notifier(struct notifier_block *nb); |
diff --git a/include/linux/padata.h b/include/linux/padata.h index 51611da9c498..8d8406246eef 100644 --- a/include/linux/padata.h +++ b/include/linux/padata.h | |||
| @@ -24,7 +24,19 @@ | |||
| 24 | #include <linux/workqueue.h> | 24 | #include <linux/workqueue.h> |
| 25 | #include <linux/spinlock.h> | 25 | #include <linux/spinlock.h> |
| 26 | #include <linux/list.h> | 26 | #include <linux/list.h> |
| 27 | #include <linux/timer.h> | ||
| 27 | 28 | ||
| 29 | /** | ||
| 30 | * struct padata_priv - Embedded to the users data structure. | ||
| 31 | * | ||
| 32 | * @list: List entry, to attach to the padata lists. | ||
| 33 | * @pd: Pointer to the internal control structure. | ||
| 34 | * @cb_cpu: Callback cpu for serializatioon. | ||
| 35 | * @seq_nr: Sequence number of the parallelized data object. | ||
| 36 | * @info: Used to pass information from the parallel to the serial function. | ||
| 37 | * @parallel: Parallel execution function. | ||
| 38 | * @serial: Serial complete function. | ||
| 39 | */ | ||
| 28 | struct padata_priv { | 40 | struct padata_priv { |
| 29 | struct list_head list; | 41 | struct list_head list; |
| 30 | struct parallel_data *pd; | 42 | struct parallel_data *pd; |
| @@ -35,11 +47,29 @@ struct padata_priv { | |||
| 35 | void (*serial)(struct padata_priv *padata); | 47 | void (*serial)(struct padata_priv *padata); |
| 36 | }; | 48 | }; |
| 37 | 49 | ||
| 50 | /** | ||
| 51 | * struct padata_list | ||
| 52 | * | ||
| 53 | * @list: List head. | ||
| 54 | * @lock: List lock. | ||
| 55 | */ | ||
| 38 | struct padata_list { | 56 | struct padata_list { |
| 39 | struct list_head list; | 57 | struct list_head list; |
| 40 | spinlock_t lock; | 58 | spinlock_t lock; |
| 41 | }; | 59 | }; |
| 42 | 60 | ||
| 61 | /** | ||
| 62 | * struct padata_queue - The percpu padata queues. | ||
| 63 | * | ||
| 64 | * @parallel: List to wait for parallelization. | ||
| 65 | * @reorder: List to wait for reordering after parallel processing. | ||
| 66 | * @serial: List to wait for serialization after reordering. | ||
| 67 | * @pwork: work struct for parallelization. | ||
| 68 | * @swork: work struct for serialization. | ||
| 69 | * @pd: Backpointer to the internal control structure. | ||
| 70 | * @num_obj: Number of objects that are processed by this cpu. | ||
| 71 | * @cpu_index: Index of the cpu. | ||
| 72 | */ | ||
| 43 | struct padata_queue { | 73 | struct padata_queue { |
| 44 | struct padata_list parallel; | 74 | struct padata_list parallel; |
| 45 | struct padata_list reorder; | 75 | struct padata_list reorder; |
| @@ -51,6 +81,20 @@ struct padata_queue { | |||
| 51 | int cpu_index; | 81 | int cpu_index; |
| 52 | }; | 82 | }; |
| 53 | 83 | ||
| 84 | /** | ||
| 85 | * struct parallel_data - Internal control structure, covers everything | ||
| 86 | * that depends on the cpumask in use. | ||
| 87 | * | ||
| 88 | * @pinst: padata instance. | ||
| 89 | * @queue: percpu padata queues. | ||
| 90 | * @seq_nr: The sequence number that will be attached to the next object. | ||
| 91 | * @reorder_objects: Number of objects waiting in the reorder queues. | ||
| 92 | * @refcnt: Number of objects holding a reference on this parallel_data. | ||
| 93 | * @max_seq_nr: Maximal used sequence number. | ||
| 94 | * @cpumask: cpumask in use. | ||
| 95 | * @lock: Reorder lock. | ||
| 96 | * @timer: Reorder timer. | ||
| 97 | */ | ||
| 54 | struct parallel_data { | 98 | struct parallel_data { |
| 55 | struct padata_instance *pinst; | 99 | struct padata_instance *pinst; |
| 56 | struct padata_queue *queue; | 100 | struct padata_queue *queue; |
| @@ -60,8 +104,19 @@ struct parallel_data { | |||
| 60 | unsigned int max_seq_nr; | 104 | unsigned int max_seq_nr; |
| 61 | cpumask_var_t cpumask; | 105 | cpumask_var_t cpumask; |
| 62 | spinlock_t lock; | 106 | spinlock_t lock; |
| 107 | struct timer_list timer; | ||
| 63 | }; | 108 | }; |
| 64 | 109 | ||
| 110 | /** | ||
| 111 | * struct padata_instance - The overall control structure. | ||
| 112 | * | ||
| 113 | * @cpu_notifier: cpu hotplug notifier. | ||
| 114 | * @wq: The workqueue in use. | ||
| 115 | * @pd: The internal control structure. | ||
| 116 | * @cpumask: User supplied cpumask. | ||
| 117 | * @lock: padata instance lock. | ||
| 118 | * @flags: padata flags. | ||
| 119 | */ | ||
| 65 | struct padata_instance { | 120 | struct padata_instance { |
| 66 | struct notifier_block cpu_notifier; | 121 | struct notifier_block cpu_notifier; |
| 67 | struct workqueue_struct *wq; | 122 | struct workqueue_struct *wq; |
diff --git a/include/linux/pipe_fs_i.h b/include/linux/pipe_fs_i.h index b43a9e039059..16de3933c45e 100644 --- a/include/linux/pipe_fs_i.h +++ b/include/linux/pipe_fs_i.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #define PIPEFS_MAGIC 0x50495045 | 4 | #define PIPEFS_MAGIC 0x50495045 |
| 5 | 5 | ||
| 6 | #define PIPE_BUFFERS (16) | 6 | #define PIPE_DEF_BUFFERS 16 |
| 7 | 7 | ||
| 8 | #define PIPE_BUF_FLAG_LRU 0x01 /* page is on the LRU */ | 8 | #define PIPE_BUF_FLAG_LRU 0x01 /* page is on the LRU */ |
| 9 | #define PIPE_BUF_FLAG_ATOMIC 0x02 /* was atomically mapped */ | 9 | #define PIPE_BUF_FLAG_ATOMIC 0x02 /* was atomically mapped */ |
| @@ -44,17 +44,17 @@ struct pipe_buffer { | |||
| 44 | **/ | 44 | **/ |
| 45 | struct pipe_inode_info { | 45 | struct pipe_inode_info { |
| 46 | wait_queue_head_t wait; | 46 | wait_queue_head_t wait; |
| 47 | unsigned int nrbufs, curbuf; | 47 | unsigned int nrbufs, curbuf, buffers; |
| 48 | struct page *tmp_page; | ||
| 49 | unsigned int readers; | 48 | unsigned int readers; |
| 50 | unsigned int writers; | 49 | unsigned int writers; |
| 51 | unsigned int waiting_writers; | 50 | unsigned int waiting_writers; |
| 52 | unsigned int r_counter; | 51 | unsigned int r_counter; |
| 53 | unsigned int w_counter; | 52 | unsigned int w_counter; |
| 53 | struct page *tmp_page; | ||
| 54 | struct fasync_struct *fasync_readers; | 54 | struct fasync_struct *fasync_readers; |
| 55 | struct fasync_struct *fasync_writers; | 55 | struct fasync_struct *fasync_writers; |
| 56 | struct inode *inode; | 56 | struct inode *inode; |
| 57 | struct pipe_buffer bufs[PIPE_BUFFERS]; | 57 | struct pipe_buffer *bufs; |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | /* | 60 | /* |
| @@ -139,6 +139,8 @@ void pipe_lock(struct pipe_inode_info *); | |||
| 139 | void pipe_unlock(struct pipe_inode_info *); | 139 | void pipe_unlock(struct pipe_inode_info *); |
| 140 | void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *); | 140 | void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *); |
| 141 | 141 | ||
| 142 | extern unsigned int pipe_max_pages; | ||
| 143 | |||
| 142 | /* Drop the inode semaphore and wait for a pipe event, atomically */ | 144 | /* Drop the inode semaphore and wait for a pipe event, atomically */ |
| 143 | void pipe_wait(struct pipe_inode_info *pipe); | 145 | void pipe_wait(struct pipe_inode_info *pipe); |
| 144 | 146 | ||
| @@ -154,4 +156,7 @@ int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *); | |||
| 154 | int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *); | 156 | int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *); |
| 155 | void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); | 157 | void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); |
| 156 | 158 | ||
| 159 | /* for F_SETPIPE_SZ and F_GETPIPE_SZ */ | ||
| 160 | long pipe_fcntl(struct file *, unsigned int, unsigned long arg); | ||
| 161 | |||
| 157 | #endif | 162 | #endif |
diff --git a/include/linux/quota.h b/include/linux/quota.h index b462916b2a0a..7126a15467f1 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
| @@ -174,6 +174,8 @@ enum { | |||
| 174 | #include <linux/rwsem.h> | 174 | #include <linux/rwsem.h> |
| 175 | #include <linux/spinlock.h> | 175 | #include <linux/spinlock.h> |
| 176 | #include <linux/wait.h> | 176 | #include <linux/wait.h> |
| 177 | #include <linux/percpu.h> | ||
| 178 | #include <linux/smp.h> | ||
| 177 | 179 | ||
| 178 | #include <linux/dqblk_xfs.h> | 180 | #include <linux/dqblk_xfs.h> |
| 179 | #include <linux/dqblk_v1.h> | 181 | #include <linux/dqblk_v1.h> |
| @@ -238,19 +240,43 @@ static inline int info_dirty(struct mem_dqinfo *info) | |||
| 238 | return test_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); | 240 | return test_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); |
| 239 | } | 241 | } |
| 240 | 242 | ||
| 243 | enum { | ||
| 244 | DQST_LOOKUPS, | ||
| 245 | DQST_DROPS, | ||
| 246 | DQST_READS, | ||
| 247 | DQST_WRITES, | ||
| 248 | DQST_CACHE_HITS, | ||
| 249 | DQST_ALLOC_DQUOTS, | ||
| 250 | DQST_FREE_DQUOTS, | ||
| 251 | DQST_SYNCS, | ||
| 252 | _DQST_DQSTAT_LAST | ||
| 253 | }; | ||
| 254 | |||
| 241 | struct dqstats { | 255 | struct dqstats { |
| 242 | int lookups; | 256 | int stat[_DQST_DQSTAT_LAST]; |
| 243 | int drops; | ||
| 244 | int reads; | ||
| 245 | int writes; | ||
| 246 | int cache_hits; | ||
| 247 | int allocated_dquots; | ||
| 248 | int free_dquots; | ||
| 249 | int syncs; | ||
| 250 | }; | 257 | }; |
| 251 | 258 | ||
| 259 | extern struct dqstats *dqstats_pcpu; | ||
| 252 | extern struct dqstats dqstats; | 260 | extern struct dqstats dqstats; |
| 253 | 261 | ||
| 262 | static inline void dqstats_inc(unsigned int type) | ||
| 263 | { | ||
| 264 | #ifdef CONFIG_SMP | ||
| 265 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]++; | ||
| 266 | #else | ||
| 267 | dqstats.stat[type]++; | ||
| 268 | #endif | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline void dqstats_dec(unsigned int type) | ||
| 272 | { | ||
| 273 | #ifdef CONFIG_SMP | ||
| 274 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]--; | ||
| 275 | #else | ||
| 276 | dqstats.stat[type]--; | ||
| 277 | #endif | ||
| 278 | } | ||
| 279 | |||
| 254 | #define DQ_MOD_B 0 /* dquot modified since read */ | 280 | #define DQ_MOD_B 0 /* dquot modified since read */ |
| 255 | #define DQ_BLKS_B 1 /* uid/gid has been warned about blk limit */ | 281 | #define DQ_BLKS_B 1 /* uid/gid has been warned about blk limit */ |
| 256 | #define DQ_INODES_B 2 /* uid/gid has been warned about inode limit */ | 282 | #define DQ_INODES_B 2 /* uid/gid has been warned about inode limit */ |
| @@ -311,12 +337,10 @@ struct quotactl_ops { | |||
| 311 | int (*quota_sync)(struct super_block *, int, int); | 337 | int (*quota_sync)(struct super_block *, int, int); |
| 312 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); | 338 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); |
| 313 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); | 339 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); |
| 314 | int (*get_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); | 340 | int (*get_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
| 315 | int (*set_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); | 341 | int (*set_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
| 316 | int (*get_xstate)(struct super_block *, struct fs_quota_stat *); | 342 | int (*get_xstate)(struct super_block *, struct fs_quota_stat *); |
| 317 | int (*set_xstate)(struct super_block *, unsigned int, int); | 343 | int (*set_xstate)(struct super_block *, unsigned int, int); |
| 318 | int (*get_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); | ||
| 319 | int (*set_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); | ||
| 320 | }; | 344 | }; |
| 321 | 345 | ||
| 322 | struct quota_format_type { | 346 | struct quota_format_type { |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index e6fa7acce290..370abb1e99cb 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -14,6 +14,14 @@ static inline struct quota_info *sb_dqopt(struct super_block *sb) | |||
| 14 | return &sb->s_dquot; | 14 | return &sb->s_dquot; |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | /* i_mutex must being held */ | ||
| 18 | static inline bool is_quota_modification(struct inode *inode, struct iattr *ia) | ||
| 19 | { | ||
| 20 | return (ia->ia_valid & ATTR_SIZE && ia->ia_size != inode->i_size) || | ||
| 21 | (ia->ia_valid & ATTR_UID && ia->ia_uid != inode->i_uid) || | ||
| 22 | (ia->ia_valid & ATTR_GID && ia->ia_gid != inode->i_gid); | ||
| 23 | } | ||
| 24 | |||
| 17 | #if defined(CONFIG_QUOTA) | 25 | #if defined(CONFIG_QUOTA) |
| 18 | 26 | ||
| 19 | /* | 27 | /* |
| @@ -63,9 +71,12 @@ int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags); | |||
| 63 | int vfs_quota_sync(struct super_block *sb, int type, int wait); | 71 | int vfs_quota_sync(struct super_block *sb, int type, int wait); |
| 64 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 72 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
| 65 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 73 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
| 66 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); | 74 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, |
| 67 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); | 75 | struct fs_disk_quota *di); |
| 76 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, | ||
| 77 | struct fs_disk_quota *di); | ||
| 68 | 78 | ||
| 79 | int __dquot_transfer(struct inode *inode, struct dquot **transfer_to); | ||
| 69 | int dquot_transfer(struct inode *inode, struct iattr *iattr); | 80 | int dquot_transfer(struct inode *inode, struct iattr *iattr); |
| 70 | int vfs_dq_quota_on_remount(struct super_block *sb); | 81 | int vfs_dq_quota_on_remount(struct super_block *sb); |
| 71 | 82 | ||
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 78dd1e7120a9..f10db6e5f3b5 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -182,6 +182,10 @@ | |||
| 182 | /* Aeroflex Gaisler GRLIB APBUART */ | 182 | /* Aeroflex Gaisler GRLIB APBUART */ |
| 183 | #define PORT_APBUART 90 | 183 | #define PORT_APBUART 90 |
| 184 | 184 | ||
| 185 | /* Altera UARTs */ | ||
| 186 | #define PORT_ALTERA_JTAGUART 91 | ||
| 187 | #define PORT_ALTERA_UART 92 | ||
| 188 | |||
| 185 | #ifdef __KERNEL__ | 189 | #ifdef __KERNEL__ |
| 186 | 190 | ||
| 187 | #include <linux/compiler.h> | 191 | #include <linux/compiler.h> |
| @@ -246,6 +250,7 @@ struct uart_ops { | |||
| 246 | #endif | 250 | #endif |
| 247 | }; | 251 | }; |
| 248 | 252 | ||
| 253 | #define NO_POLL_CHAR 0x00ff0000 | ||
| 249 | #define UART_CONFIG_TYPE (1 << 0) | 254 | #define UART_CONFIG_TYPE (1 << 0) |
| 250 | #define UART_CONFIG_IRQ (1 << 1) | 255 | #define UART_CONFIG_IRQ (1 << 1) |
| 251 | 256 | ||
diff --git a/include/linux/splice.h b/include/linux/splice.h index 18e7c7c0cae6..997c3b4c212b 100644 --- a/include/linux/splice.h +++ b/include/linux/splice.h | |||
| @@ -82,4 +82,11 @@ extern ssize_t splice_to_pipe(struct pipe_inode_info *, | |||
| 82 | extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *, | 82 | extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *, |
| 83 | splice_direct_actor *); | 83 | splice_direct_actor *); |
| 84 | 84 | ||
| 85 | /* | ||
| 86 | * for dynamic pipe sizing | ||
| 87 | */ | ||
| 88 | extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *); | ||
| 89 | extern void splice_shrink_spd(struct pipe_inode_info *, | ||
| 90 | struct splice_pipe_desc *); | ||
| 91 | |||
| 85 | #endif | 92 | #endif |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 1f59d9340c4d..ec2b7a42b45f 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -146,6 +146,7 @@ enum { | |||
| 146 | SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ | 146 | SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ |
| 147 | SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ | 147 | SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ |
| 148 | SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */ | 148 | SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */ |
| 149 | SWP_BLKDEV = (1 << 6), /* its a block device */ | ||
| 149 | /* add others here before... */ | 150 | /* add others here before... */ |
| 150 | SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ | 151 | SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ |
| 151 | }; | 152 | }; |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 1885d21b0c80..f2694eb4dd3d 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -87,17 +87,18 @@ struct attribute_group { | |||
| 87 | 87 | ||
| 88 | #define attr_name(_attr) (_attr).attr.name | 88 | #define attr_name(_attr) (_attr).attr.name |
| 89 | 89 | ||
| 90 | struct file; | ||
| 90 | struct vm_area_struct; | 91 | struct vm_area_struct; |
| 91 | 92 | ||
| 92 | struct bin_attribute { | 93 | struct bin_attribute { |
| 93 | struct attribute attr; | 94 | struct attribute attr; |
| 94 | size_t size; | 95 | size_t size; |
| 95 | void *private; | 96 | void *private; |
| 96 | ssize_t (*read)(struct kobject *, struct bin_attribute *, | 97 | ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, |
| 97 | char *, loff_t, size_t); | 98 | char *, loff_t, size_t); |
| 98 | ssize_t (*write)(struct kobject *, struct bin_attribute *, | 99 | ssize_t (*write)(struct file *,struct kobject *, struct bin_attribute *, |
| 99 | char *, loff_t, size_t); | 100 | char *, loff_t, size_t); |
| 100 | int (*mmap)(struct kobject *, struct bin_attribute *attr, | 101 | int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr, |
| 101 | struct vm_area_struct *vma); | 102 | struct vm_area_struct *vma); |
| 102 | }; | 103 | }; |
| 103 | 104 | ||
| @@ -155,6 +156,9 @@ void sysfs_remove_link(struct kobject *kobj, const char *name); | |||
| 155 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, | 156 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, |
| 156 | const char *old_name, const char *new_name); | 157 | const char *old_name, const char *new_name); |
| 157 | 158 | ||
| 159 | void sysfs_delete_link(struct kobject *dir, struct kobject *targ, | ||
| 160 | const char *name); | ||
| 161 | |||
| 158 | int __must_check sysfs_create_group(struct kobject *kobj, | 162 | int __must_check sysfs_create_group(struct kobject *kobj, |
| 159 | const struct attribute_group *grp); | 163 | const struct attribute_group *grp); |
| 160 | int sysfs_update_group(struct kobject *kobj, | 164 | int sysfs_update_group(struct kobject *kobj, |
| @@ -175,6 +179,7 @@ struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd); | |||
| 175 | void sysfs_put(struct sysfs_dirent *sd); | 179 | void sysfs_put(struct sysfs_dirent *sd); |
| 176 | void sysfs_printk_last_file(void); | 180 | void sysfs_printk_last_file(void); |
| 177 | 181 | ||
| 182 | /* Called to clear a ns tag when it is no longer valid */ | ||
| 178 | void sysfs_exit_ns(enum kobj_ns_type type, const void *tag); | 183 | void sysfs_exit_ns(enum kobj_ns_type type, const void *tag); |
| 179 | 184 | ||
| 180 | int __must_check sysfs_init(void); | 185 | int __must_check sysfs_init(void); |
| @@ -269,6 +274,11 @@ static inline int sysfs_rename_link(struct kobject *k, struct kobject *t, | |||
| 269 | return 0; | 274 | return 0; |
| 270 | } | 275 | } |
| 271 | 276 | ||
| 277 | static inline void sysfs_delete_link(struct kobject *k, struct kobject *t, | ||
| 278 | const char *name) | ||
| 279 | { | ||
| 280 | } | ||
| 281 | |||
| 272 | static inline int sysfs_create_group(struct kobject *kobj, | 282 | static inline int sysfs_create_group(struct kobject *kobj, |
| 273 | const struct attribute_group *grp) | 283 | const struct attribute_group *grp) |
| 274 | { | 284 | { |
| @@ -319,7 +329,7 @@ static inline void sysfs_put(struct sysfs_dirent *sd) | |||
| 319 | { | 329 | { |
| 320 | } | 330 | } |
| 321 | 331 | ||
| 322 | static inline void sysfs_exit_ns(enum kobj_ns_type type, const void *tag) | 332 | static inline void sysfs_exit_ns(int type, const void *tag) |
| 323 | { | 333 | { |
| 324 | } | 334 | } |
| 325 | 335 | ||
diff --git a/include/linux/tty.h b/include/linux/tty.h index bb44fa9ae135..931078b73226 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ | 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ |
| 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ | 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ |
| 26 | #define NR_LDISCS 21 | 26 | #define NR_LDISCS 30 |
| 27 | 27 | ||
| 28 | /* line disciplines */ | 28 | /* line disciplines */ |
| 29 | #define N_TTY 0 | 29 | #define N_TTY 0 |
| @@ -48,6 +48,7 @@ | |||
| 48 | #define N_PPS 18 /* Pulse per Second */ | 48 | #define N_PPS 18 /* Pulse per Second */ |
| 49 | #define N_V253 19 /* Codec control over voice modem */ | 49 | #define N_V253 19 /* Codec control over voice modem */ |
| 50 | #define N_CAIF 20 /* CAIF protocol for talking to modems */ | 50 | #define N_CAIF 20 /* CAIF protocol for talking to modems */ |
| 51 | #define N_GSM0710 21 /* GSM 0710 Mux */ | ||
| 51 | 52 | ||
| 52 | /* | 53 | /* |
| 53 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 54 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 36520ded3e06..cc97d6caf2b3 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -65,6 +65,15 @@ struct writeback_control { | |||
| 65 | * so we use a single control to update them | 65 | * so we use a single control to update them |
| 66 | */ | 66 | */ |
| 67 | unsigned no_nrwrite_index_update:1; | 67 | unsigned no_nrwrite_index_update:1; |
| 68 | |||
| 69 | /* | ||
| 70 | * For WB_SYNC_ALL, the sb must always be pinned. For WB_SYNC_NONE, | ||
| 71 | * the writeback code will pin the sb for the caller. However, | ||
| 72 | * for eg umount, the caller does WB_SYNC_NONE but already has | ||
| 73 | * the sb pinned. If the below is set, caller already has the | ||
| 74 | * sb pinned. | ||
| 75 | */ | ||
| 76 | unsigned sb_pinned:1; | ||
| 68 | }; | 77 | }; |
| 69 | 78 | ||
| 70 | /* | 79 | /* |
| @@ -73,6 +82,7 @@ struct writeback_control { | |||
| 73 | struct bdi_writeback; | 82 | struct bdi_writeback; |
| 74 | int inode_wait(void *); | 83 | int inode_wait(void *); |
| 75 | void writeback_inodes_sb(struct super_block *); | 84 | void writeback_inodes_sb(struct super_block *); |
| 85 | void writeback_inodes_sb_locked(struct super_block *); | ||
| 76 | int writeback_inodes_sb_if_idle(struct super_block *); | 86 | int writeback_inodes_sb_if_idle(struct super_block *); |
| 77 | void sync_inodes_sb(struct super_block *); | 87 | void sync_inodes_sb(struct super_block *); |
| 78 | void writeback_inodes_wbc(struct writeback_control *wbc); | 88 | void writeback_inodes_wbc(struct writeback_control *wbc); |
| @@ -96,8 +106,14 @@ static inline void inode_sync_wait(struct inode *inode) | |||
| 96 | /* | 106 | /* |
| 97 | * mm/page-writeback.c | 107 | * mm/page-writeback.c |
| 98 | */ | 108 | */ |
| 99 | void laptop_io_completion(void); | 109 | #ifdef CONFIG_BLOCK |
| 110 | void laptop_io_completion(struct backing_dev_info *info); | ||
| 100 | void laptop_sync_completion(void); | 111 | void laptop_sync_completion(void); |
| 112 | void laptop_mode_sync(struct work_struct *work); | ||
| 113 | void laptop_mode_timer_fn(unsigned long data); | ||
| 114 | #else | ||
| 115 | static inline void laptop_sync_completion(void) { } | ||
| 116 | #endif | ||
| 101 | void throttle_vm_writeout(gfp_t gfp_mask); | 117 | void throttle_vm_writeout(gfp_t gfp_mask); |
| 102 | 118 | ||
| 103 | /* These are exported to sysctl. */ | 119 | /* These are exported to sysctl. */ |
