diff options
Diffstat (limited to 'include/linux')
206 files changed, 3739 insertions, 2277 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 334a3593cdfd..cff4a101f266 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -268,6 +268,10 @@ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm.h \ | |||
268 | $(srctree)/include/asm-$(SRCARCH)/kvm.h),) | 268 | $(srctree)/include/asm-$(SRCARCH)/kvm.h),) |
269 | unifdef-y += kvm.h | 269 | unifdef-y += kvm.h |
270 | endif | 270 | endif |
271 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \ | ||
272 | $(srctree)/include/asm-$(SRCARCH)/kvm_para.h),) | ||
273 | unifdef-y += kvm_para.h | ||
274 | endif | ||
271 | unifdef-y += llc.h | 275 | unifdef-y += llc.h |
272 | unifdef-y += loop.h | 276 | unifdef-y += loop.h |
273 | unifdef-y += lp.h | 277 | unifdef-y += lp.h |
diff --git a/include/linux/agp_backend.h b/include/linux/agp_backend.h index 76fa794fdac0..880130f7311f 100644 --- a/include/linux/agp_backend.h +++ b/include/linux/agp_backend.h | |||
@@ -79,9 +79,12 @@ struct agp_memory { | |||
79 | u32 physical; | 79 | u32 physical; |
80 | bool is_bound; | 80 | bool is_bound; |
81 | bool is_flushed; | 81 | bool is_flushed; |
82 | bool vmalloc_flag; | 82 | bool vmalloc_flag; |
83 | /* list of agp_memory mapped to the aperture */ | 83 | /* list of agp_memory mapped to the aperture */ |
84 | struct list_head mapped_list; | 84 | struct list_head mapped_list; |
85 | /* DMA-mapped addresses */ | ||
86 | struct scatterlist *sg_list; | ||
87 | int num_sg; | ||
85 | }; | 88 | }; |
86 | 89 | ||
87 | #define AGP_NORMAL_MEMORY 0 | 90 | #define AGP_NORMAL_MEMORY 0 |
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index 9b93cafa82a0..ab94335b4bb9 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
@@ -36,6 +36,11 @@ struct amba_driver { | |||
36 | struct amba_id *id_table; | 36 | struct amba_id *id_table; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | enum amba_vendor { | ||
40 | AMBA_VENDOR_ARM = 0x41, | ||
41 | AMBA_VENDOR_ST = 0x80, | ||
42 | }; | ||
43 | |||
39 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) | 44 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) |
40 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) | 45 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) |
41 | 46 | ||
diff --git a/include/linux/amba/pl093.h b/include/linux/amba/pl093.h new file mode 100644 index 000000000000..2983e3671adb --- /dev/null +++ b/include/linux/amba/pl093.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* linux/amba/pl093.h | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * AMBA PL093 SSMC (synchronous static memory controller) | ||
8 | * See DDI0236.pdf (r0p4) for more details | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #define SMB_BANK(x) ((x) * 0x20) /* each bank control set is 0x20 apart */ | ||
16 | |||
17 | /* Offsets for SMBxxxxRy registers */ | ||
18 | |||
19 | #define SMBIDCYR (0x00) | ||
20 | #define SMBWSTRDR (0x04) | ||
21 | #define SMBWSTWRR (0x08) | ||
22 | #define SMBWSTOENR (0x0C) | ||
23 | #define SMBWSTWENR (0x10) | ||
24 | #define SMBCR (0x14) | ||
25 | #define SMBSR (0x18) | ||
26 | #define SMBWSTBRDR (0x1C) | ||
27 | |||
28 | /* Masks for SMB registers */ | ||
29 | #define IDCY_MASK (0xf) | ||
30 | #define WSTRD_MASK (0xf) | ||
31 | #define WSTWR_MASK (0xf) | ||
32 | #define WSTOEN_MASK (0xf) | ||
33 | #define WSTWEN_MASK (0xf) | ||
34 | |||
35 | /* Notes from datasheet: | ||
36 | * WSTOEN <= WSTRD | ||
37 | * WSTWEN <= WSTWR | ||
38 | * | ||
39 | * WSTOEN is not used with nWAIT | ||
40 | */ | ||
41 | |||
42 | /* SMBCR bit definitions */ | ||
43 | #define SMBCR_BIWRITEEN (1 << 21) | ||
44 | #define SMBCR_ADDRVALIDWRITEEN (1 << 20) | ||
45 | #define SMBCR_SYNCWRITE (1 << 17) | ||
46 | #define SMBCR_BMWRITE (1 << 16) | ||
47 | #define SMBCR_WRAPREAD (1 << 14) | ||
48 | #define SMBCR_BIREADEN (1 << 13) | ||
49 | #define SMBCR_ADDRVALIDREADEN (1 << 12) | ||
50 | #define SMBCR_SYNCREAD (1 << 9) | ||
51 | #define SMBCR_BMREAD (1 << 8) | ||
52 | #define SMBCR_SMBLSPOL (1 << 6) | ||
53 | #define SMBCR_WP (1 << 3) | ||
54 | #define SMBCR_WAITEN (1 << 2) | ||
55 | #define SMBCR_WAITPOL (1 << 1) | ||
56 | #define SMBCR_RBLE (1 << 0) | ||
57 | |||
58 | #define SMBCR_BURSTLENWRITE_MASK (3 << 18) | ||
59 | #define SMBCR_BURSTLENWRITE_4 (0 << 18) | ||
60 | #define SMBCR_BURSTLENWRITE_8 (1 << 18) | ||
61 | #define SMBCR_BURSTLENWRITE_RESERVED (2 << 18) | ||
62 | #define SMBCR_BURSTLENWRITE_CONTINUOUS (3 << 18) | ||
63 | |||
64 | #define SMBCR_BURSTLENREAD_MASK (3 << 10) | ||
65 | #define SMBCR_BURSTLENREAD_4 (0 << 10) | ||
66 | #define SMBCR_BURSTLENREAD_8 (1 << 10) | ||
67 | #define SMBCR_BURSTLENREAD_16 (2 << 10) | ||
68 | #define SMBCR_BURSTLENREAD_CONTINUOUS (3 << 10) | ||
69 | |||
70 | #define SMBCR_MW_MASK (3 << 4) | ||
71 | #define SMBCR_MW_8BIT (0 << 4) | ||
72 | #define SMBCR_MW_16BIT (1 << 4) | ||
73 | #define SMBCR_MW_M32BIT (2 << 4) | ||
74 | |||
75 | /* SSMC status registers */ | ||
76 | #define SSMCCSR (0x200) | ||
77 | #define SSMCCR (0x204) | ||
78 | #define SSMCITCR (0x208) | ||
79 | #define SSMCITIP (0x20C) | ||
80 | #define SSMCITIOP (0x210) | ||
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h index cd4bcb6989ce..7d650a0e3d8f 100644 --- a/include/linux/arcdevice.h +++ b/include/linux/arcdevice.h | |||
@@ -337,7 +337,8 @@ struct net_device *alloc_arcdev(const char *name); | |||
337 | 337 | ||
338 | int arcnet_open(struct net_device *dev); | 338 | int arcnet_open(struct net_device *dev); |
339 | int arcnet_close(struct net_device *dev); | 339 | int arcnet_close(struct net_device *dev); |
340 | int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev); | 340 | netdev_tx_t arcnet_send_packet(struct sk_buff *skb, |
341 | struct net_device *dev); | ||
341 | void arcnet_timeout(struct net_device *dev); | 342 | void arcnet_timeout(struct net_device *dev); |
342 | 343 | ||
343 | #endif /* __KERNEL__ */ | 344 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 9c75921f0c16..6299a259ed19 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -210,15 +210,25 @@ enum { | |||
210 | ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ | 210 | ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ |
211 | ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ | 211 | ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ |
212 | ATA_CMD_EDD = 0x90, /* execute device diagnostic */ | 212 | ATA_CMD_EDD = 0x90, /* execute device diagnostic */ |
213 | ATA_CMD_DOWNLOAD_MICRO = 0x92, | ||
214 | ATA_CMD_NOP = 0x00, | ||
213 | ATA_CMD_FLUSH = 0xE7, | 215 | ATA_CMD_FLUSH = 0xE7, |
214 | ATA_CMD_FLUSH_EXT = 0xEA, | 216 | ATA_CMD_FLUSH_EXT = 0xEA, |
215 | ATA_CMD_ID_ATA = 0xEC, | 217 | ATA_CMD_ID_ATA = 0xEC, |
216 | ATA_CMD_ID_ATAPI = 0xA1, | 218 | ATA_CMD_ID_ATAPI = 0xA1, |
219 | ATA_CMD_SERVICE = 0xA2, | ||
217 | ATA_CMD_READ = 0xC8, | 220 | ATA_CMD_READ = 0xC8, |
218 | ATA_CMD_READ_EXT = 0x25, | 221 | ATA_CMD_READ_EXT = 0x25, |
222 | ATA_CMD_READ_QUEUED = 0x26, | ||
223 | ATA_CMD_READ_STREAM_EXT = 0x2B, | ||
224 | ATA_CMD_READ_STREAM_DMA_EXT = 0x2A, | ||
219 | ATA_CMD_WRITE = 0xCA, | 225 | ATA_CMD_WRITE = 0xCA, |
220 | ATA_CMD_WRITE_EXT = 0x35, | 226 | ATA_CMD_WRITE_EXT = 0x35, |
227 | ATA_CMD_WRITE_QUEUED = 0x36, | ||
228 | ATA_CMD_WRITE_STREAM_EXT = 0x3B, | ||
229 | ATA_CMD_WRITE_STREAM_DMA_EXT = 0x3A, | ||
221 | ATA_CMD_WRITE_FUA_EXT = 0x3D, | 230 | ATA_CMD_WRITE_FUA_EXT = 0x3D, |
231 | ATA_CMD_WRITE_QUEUED_FUA_EXT = 0x3E, | ||
222 | ATA_CMD_FPDMA_READ = 0x60, | 232 | ATA_CMD_FPDMA_READ = 0x60, |
223 | ATA_CMD_FPDMA_WRITE = 0x61, | 233 | ATA_CMD_FPDMA_WRITE = 0x61, |
224 | ATA_CMD_PIO_READ = 0x20, | 234 | ATA_CMD_PIO_READ = 0x20, |
@@ -235,6 +245,7 @@ enum { | |||
235 | ATA_CMD_PACKET = 0xA0, | 245 | ATA_CMD_PACKET = 0xA0, |
236 | ATA_CMD_VERIFY = 0x40, | 246 | ATA_CMD_VERIFY = 0x40, |
237 | ATA_CMD_VERIFY_EXT = 0x42, | 247 | ATA_CMD_VERIFY_EXT = 0x42, |
248 | ATA_CMD_WRITE_UNCORR_EXT = 0x45, | ||
238 | ATA_CMD_STANDBYNOW1 = 0xE0, | 249 | ATA_CMD_STANDBYNOW1 = 0xE0, |
239 | ATA_CMD_IDLEIMMEDIATE = 0xE1, | 250 | ATA_CMD_IDLEIMMEDIATE = 0xE1, |
240 | ATA_CMD_SLEEP = 0xE6, | 251 | ATA_CMD_SLEEP = 0xE6, |
@@ -243,15 +254,34 @@ enum { | |||
243 | ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, | 254 | ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, |
244 | ATA_CMD_SET_MAX = 0xF9, | 255 | ATA_CMD_SET_MAX = 0xF9, |
245 | ATA_CMD_SET_MAX_EXT = 0x37, | 256 | ATA_CMD_SET_MAX_EXT = 0x37, |
246 | ATA_CMD_READ_LOG_EXT = 0x2f, | 257 | ATA_CMD_READ_LOG_EXT = 0x2F, |
258 | ATA_CMD_WRITE_LOG_EXT = 0x3F, | ||
259 | ATA_CMD_READ_LOG_DMA_EXT = 0x47, | ||
260 | ATA_CMD_WRITE_LOG_DMA_EXT = 0x57, | ||
261 | ATA_CMD_TRUSTED_RCV = 0x5C, | ||
262 | ATA_CMD_TRUSTED_RCV_DMA = 0x5D, | ||
263 | ATA_CMD_TRUSTED_SND = 0x5E, | ||
264 | ATA_CMD_TRUSTED_SND_DMA = 0x5F, | ||
247 | ATA_CMD_PMP_READ = 0xE4, | 265 | ATA_CMD_PMP_READ = 0xE4, |
248 | ATA_CMD_PMP_WRITE = 0xE8, | 266 | ATA_CMD_PMP_WRITE = 0xE8, |
249 | ATA_CMD_CONF_OVERLAY = 0xB1, | 267 | ATA_CMD_CONF_OVERLAY = 0xB1, |
268 | ATA_CMD_SEC_SET_PASS = 0xF1, | ||
269 | ATA_CMD_SEC_UNLOCK = 0xF2, | ||
270 | ATA_CMD_SEC_ERASE_PREP = 0xF3, | ||
271 | ATA_CMD_SEC_ERASE_UNIT = 0xF4, | ||
250 | ATA_CMD_SEC_FREEZE_LOCK = 0xF5, | 272 | ATA_CMD_SEC_FREEZE_LOCK = 0xF5, |
273 | ATA_CMD_SEC_DISABLE_PASS = 0xF6, | ||
274 | ATA_CMD_CONFIG_STREAM = 0x51, | ||
251 | ATA_CMD_SMART = 0xB0, | 275 | ATA_CMD_SMART = 0xB0, |
252 | ATA_CMD_MEDIA_LOCK = 0xDE, | 276 | ATA_CMD_MEDIA_LOCK = 0xDE, |
253 | ATA_CMD_MEDIA_UNLOCK = 0xDF, | 277 | ATA_CMD_MEDIA_UNLOCK = 0xDF, |
254 | ATA_CMD_DSM = 0x06, | 278 | ATA_CMD_DSM = 0x06, |
279 | ATA_CMD_CHK_MED_CRD_TYP = 0xD1, | ||
280 | ATA_CMD_CFA_REQ_EXT_ERR = 0x03, | ||
281 | ATA_CMD_CFA_WRITE_NE = 0x38, | ||
282 | ATA_CMD_CFA_TRANS_SECT = 0x87, | ||
283 | ATA_CMD_CFA_ERASE = 0xC0, | ||
284 | ATA_CMD_CFA_WRITE_MULT_NE = 0xCD, | ||
255 | /* marked obsolete in the ATA/ATAPI-7 spec */ | 285 | /* marked obsolete in the ATA/ATAPI-7 spec */ |
256 | ATA_CMD_RESTORE = 0x10, | 286 | ATA_CMD_RESTORE = 0x10, |
257 | 287 | ||
@@ -306,6 +336,7 @@ enum { | |||
306 | /* SETFEATURE Sector counts for SATA features */ | 336 | /* SETFEATURE Sector counts for SATA features */ |
307 | SATA_AN = 0x05, /* Asynchronous Notification */ | 337 | SATA_AN = 0x05, /* Asynchronous Notification */ |
308 | SATA_DIPM = 0x03, /* Device Initiated Power Management */ | 338 | SATA_DIPM = 0x03, /* Device Initiated Power Management */ |
339 | SATA_FPDMA_AA = 0x02, /* DMA Setup FIS Auto-Activate */ | ||
309 | 340 | ||
310 | /* feature values for SET_MAX */ | 341 | /* feature values for SET_MAX */ |
311 | ATA_SET_MAX_ADDR = 0x00, | 342 | ATA_SET_MAX_ADDR = 0x00, |
@@ -525,6 +556,9 @@ static inline int ata_is_data(u8 prot) | |||
525 | #define ata_id_has_atapi_AN(id) \ | 556 | #define ata_id_has_atapi_AN(id) \ |
526 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ | 557 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ |
527 | ((id)[78] & (1 << 5)) ) | 558 | ((id)[78] & (1 << 5)) ) |
559 | #define ata_id_has_fpdma_aa(id) \ | ||
560 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ | ||
561 | ((id)[78] & (1 << 2)) ) | ||
528 | #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) | 562 | #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) |
529 | #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) | 563 | #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) |
530 | #define ata_id_u32(id,n) \ | 564 | #define ata_id_u32(id,n) \ |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 1d52425a6118..f169bcb90b58 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #include <linux/proportions.h> | 13 | #include <linux/proportions.h> |
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> | ||
17 | #include <linux/writeback.h> | ||
16 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
17 | 19 | ||
18 | struct page; | 20 | struct page; |
@@ -23,9 +25,11 @@ struct dentry; | |||
23 | * Bits in backing_dev_info.state | 25 | * Bits in backing_dev_info.state |
24 | */ | 26 | */ |
25 | enum bdi_state { | 27 | enum bdi_state { |
26 | BDI_pdflush, /* A pdflush thread is working this device */ | 28 | BDI_pending, /* On its way to being activated */ |
29 | BDI_wb_alloc, /* Default embedded wb allocated */ | ||
27 | BDI_async_congested, /* The async (write) queue is getting full */ | 30 | BDI_async_congested, /* The async (write) queue is getting full */ |
28 | BDI_sync_congested, /* The sync queue is getting full */ | 31 | BDI_sync_congested, /* The sync queue is getting full */ |
32 | BDI_registered, /* bdi_register() was done */ | ||
29 | BDI_unused, /* Available bits start here */ | 33 | BDI_unused, /* Available bits start here */ |
30 | }; | 34 | }; |
31 | 35 | ||
@@ -39,7 +43,22 @@ enum bdi_stat_item { | |||
39 | 43 | ||
40 | #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids))) | 44 | #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids))) |
41 | 45 | ||
46 | struct bdi_writeback { | ||
47 | struct list_head list; /* hangs off the bdi */ | ||
48 | |||
49 | struct backing_dev_info *bdi; /* our parent bdi */ | ||
50 | unsigned int nr; | ||
51 | |||
52 | unsigned long last_old_flush; /* last old data flush */ | ||
53 | |||
54 | struct task_struct *task; /* writeback task */ | ||
55 | struct list_head b_dirty; /* dirty inodes */ | ||
56 | struct list_head b_io; /* parked for writeback */ | ||
57 | struct list_head b_more_io; /* parked for more writeback */ | ||
58 | }; | ||
59 | |||
42 | struct backing_dev_info { | 60 | struct backing_dev_info { |
61 | struct list_head bdi_list; | ||
43 | unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ | 62 | unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ |
44 | unsigned long state; /* Always use atomic bitops on this */ | 63 | unsigned long state; /* Always use atomic bitops on this */ |
45 | unsigned int capabilities; /* Device capabilities */ | 64 | unsigned int capabilities; /* Device capabilities */ |
@@ -48,6 +67,8 @@ struct backing_dev_info { | |||
48 | void (*unplug_io_fn)(struct backing_dev_info *, struct page *); | 67 | void (*unplug_io_fn)(struct backing_dev_info *, struct page *); |
49 | void *unplug_io_data; | 68 | void *unplug_io_data; |
50 | 69 | ||
70 | char *name; | ||
71 | |||
51 | struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS]; | 72 | struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS]; |
52 | 73 | ||
53 | struct prop_local_percpu completions; | 74 | struct prop_local_percpu completions; |
@@ -56,6 +77,14 @@ struct backing_dev_info { | |||
56 | unsigned int min_ratio; | 77 | unsigned int min_ratio; |
57 | unsigned int max_ratio, max_prop_frac; | 78 | unsigned int max_ratio, max_prop_frac; |
58 | 79 | ||
80 | struct bdi_writeback wb; /* default writeback info for this bdi */ | ||
81 | spinlock_t wb_lock; /* protects update side of wb_list */ | ||
82 | struct list_head wb_list; /* the flusher threads hanging off this bdi */ | ||
83 | unsigned long wb_mask; /* bitmask of registered tasks */ | ||
84 | unsigned int wb_cnt; /* number of registered tasks */ | ||
85 | |||
86 | struct list_head work_list; | ||
87 | |||
59 | struct device *dev; | 88 | struct device *dev; |
60 | 89 | ||
61 | #ifdef CONFIG_DEBUG_FS | 90 | #ifdef CONFIG_DEBUG_FS |
@@ -71,6 +100,19 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent, | |||
71 | const char *fmt, ...); | 100 | const char *fmt, ...); |
72 | int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); | 101 | int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); |
73 | void bdi_unregister(struct backing_dev_info *bdi); | 102 | void bdi_unregister(struct backing_dev_info *bdi); |
103 | void bdi_start_writeback(struct writeback_control *wbc); | ||
104 | int bdi_writeback_task(struct bdi_writeback *wb); | ||
105 | int bdi_has_dirty_io(struct backing_dev_info *bdi); | ||
106 | |||
107 | extern spinlock_t bdi_lock; | ||
108 | extern struct list_head bdi_list; | ||
109 | |||
110 | static inline int wb_has_dirty_io(struct bdi_writeback *wb) | ||
111 | { | ||
112 | return !list_empty(&wb->b_dirty) || | ||
113 | !list_empty(&wb->b_io) || | ||
114 | !list_empty(&wb->b_more_io); | ||
115 | } | ||
74 | 116 | ||
75 | static inline void __add_bdi_stat(struct backing_dev_info *bdi, | 117 | static inline void __add_bdi_stat(struct backing_dev_info *bdi, |
76 | enum bdi_stat_item item, s64 amount) | 118 | enum bdi_stat_item item, s64 amount) |
@@ -261,6 +303,11 @@ static inline bool bdi_cap_swap_backed(struct backing_dev_info *bdi) | |||
261 | return bdi->capabilities & BDI_CAP_SWAP_BACKED; | 303 | return bdi->capabilities & BDI_CAP_SWAP_BACKED; |
262 | } | 304 | } |
263 | 305 | ||
306 | static inline bool bdi_cap_flush_forker(struct backing_dev_info *bdi) | ||
307 | { | ||
308 | return bdi == &default_backing_dev_info; | ||
309 | } | ||
310 | |||
264 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) | 311 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) |
265 | { | 312 | { |
266 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); | 313 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); |
@@ -276,4 +323,10 @@ static inline bool mapping_cap_swap_backed(struct address_space *mapping) | |||
276 | return bdi_cap_swap_backed(mapping->backing_dev_info); | 323 | return bdi_cap_swap_backed(mapping->backing_dev_info); |
277 | } | 324 | } |
278 | 325 | ||
326 | static inline int bdi_sched_wait(void *word) | ||
327 | { | ||
328 | schedule(); | ||
329 | return 0; | ||
330 | } | ||
331 | |||
279 | #endif /* _LINUX_BACKING_DEV_H */ | 332 | #endif /* _LINUX_BACKING_DEV_H */ |
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index 61ee18c1bdb4..2046b5b8af48 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h | |||
@@ -117,6 +117,7 @@ extern int setup_arg_pages(struct linux_binprm * bprm, | |||
117 | int executable_stack); | 117 | int executable_stack); |
118 | extern int bprm_mm_init(struct linux_binprm *bprm); | 118 | extern int bprm_mm_init(struct linux_binprm *bprm); |
119 | extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm); | 119 | extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm); |
120 | extern int prepare_bprm_creds(struct linux_binprm *bprm); | ||
120 | extern void install_exec_creds(struct linux_binprm *bprm); | 121 | extern void install_exec_creds(struct linux_binprm *bprm); |
121 | extern void do_coredump(long signr, int exit_code, struct pt_regs *regs); | 122 | extern void do_coredump(long signr, int exit_code, struct pt_regs *regs); |
122 | extern int set_binfmt(struct linux_binfmt *new); | 123 | extern int set_binfmt(struct linux_binfmt *new); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 2892b710771c..5be93f18d842 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -142,56 +142,51 @@ struct bio { | |||
142 | * | 142 | * |
143 | * bit 0 -- data direction | 143 | * bit 0 -- data direction |
144 | * If not set, bio is a read from device. If set, it's a write to device. | 144 | * If not set, bio is a read from device. If set, it's a write to device. |
145 | * bit 1 -- rw-ahead when set | 145 | * bit 1 -- fail fast device errors |
146 | * bit 2 -- barrier | 146 | * bit 2 -- fail fast transport errors |
147 | * bit 3 -- fail fast driver errors | ||
148 | * bit 4 -- rw-ahead when set | ||
149 | * bit 5 -- barrier | ||
147 | * Insert a serialization point in the IO queue, forcing previously | 150 | * Insert a serialization point in the IO queue, forcing previously |
148 | * submitted IO to be completed before this one is issued. | 151 | * submitted IO to be completed before this one is issued. |
149 | * bit 3 -- synchronous I/O hint. | 152 | * bit 6 -- synchronous I/O hint. |
150 | * bit 4 -- Unplug the device immediately after submitting this bio. | 153 | * bit 7 -- Unplug the device immediately after submitting this bio. |
151 | * bit 5 -- metadata request | 154 | * bit 8 -- metadata request |
152 | * Used for tracing to differentiate metadata and data IO. May also | 155 | * Used for tracing to differentiate metadata and data IO. May also |
153 | * get some preferential treatment in the IO scheduler | 156 | * get some preferential treatment in the IO scheduler |
154 | * bit 6 -- discard sectors | 157 | * bit 9 -- discard sectors |
155 | * Informs the lower level device that this range of sectors is no longer | 158 | * Informs the lower level device that this range of sectors is no longer |
156 | * used by the file system and may thus be freed by the device. Used | 159 | * used by the file system and may thus be freed by the device. Used |
157 | * for flash based storage. | 160 | * for flash based storage. |
158 | * bit 7 -- fail fast device errors | ||
159 | * bit 8 -- fail fast transport errors | ||
160 | * bit 9 -- fail fast driver errors | ||
161 | * Don't want driver retries for any fast fail whatever the reason. | 161 | * Don't want driver retries for any fast fail whatever the reason. |
162 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this | 162 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this |
163 | one has been submitted, even if it is a SYNC request. | 163 | one has been submitted, even if it is a SYNC request. |
164 | */ | 164 | */ |
165 | #define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */ | 165 | enum bio_rw_flags { |
166 | #define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */ | 166 | BIO_RW, |
167 | #define BIO_RW_BARRIER 2 | 167 | BIO_RW_FAILFAST_DEV, |
168 | #define BIO_RW_SYNCIO 3 | 168 | BIO_RW_FAILFAST_TRANSPORT, |
169 | #define BIO_RW_UNPLUG 4 | 169 | BIO_RW_FAILFAST_DRIVER, |
170 | #define BIO_RW_META 5 | 170 | /* above flags must match REQ_* */ |
171 | #define BIO_RW_DISCARD 6 | 171 | BIO_RW_AHEAD, |
172 | #define BIO_RW_FAILFAST_DEV 7 | 172 | BIO_RW_BARRIER, |
173 | #define BIO_RW_FAILFAST_TRANSPORT 8 | 173 | BIO_RW_SYNCIO, |
174 | #define BIO_RW_FAILFAST_DRIVER 9 | 174 | BIO_RW_UNPLUG, |
175 | #define BIO_RW_NOIDLE 10 | 175 | BIO_RW_META, |
176 | 176 | BIO_RW_DISCARD, | |
177 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) | 177 | BIO_RW_NOIDLE, |
178 | }; | ||
178 | 179 | ||
179 | /* | 180 | /* |
180 | * Old defines, these should eventually be replaced by direct usage of | 181 | * First four bits must match between bio->bi_rw and rq->cmd_flags, make |
181 | * bio_rw_flagged() | 182 | * that explicit here. |
182 | */ | 183 | */ |
183 | #define bio_barrier(bio) bio_rw_flagged(bio, BIO_RW_BARRIER) | 184 | #define BIO_RW_RQ_MASK 0xf |
184 | #define bio_sync(bio) bio_rw_flagged(bio, BIO_RW_SYNCIO) | 185 | |
185 | #define bio_unplug(bio) bio_rw_flagged(bio, BIO_RW_UNPLUG) | 186 | static inline bool bio_rw_flagged(struct bio *bio, enum bio_rw_flags flag) |
186 | #define bio_failfast_dev(bio) bio_rw_flagged(bio, BIO_RW_FAILFAST_DEV) | 187 | { |
187 | #define bio_failfast_transport(bio) \ | 188 | return (bio->bi_rw & (1 << flag)) != 0; |
188 | bio_rw_flagged(bio, BIO_RW_FAILFAST_TRANSPORT) | 189 | } |
189 | #define bio_failfast_driver(bio) \ | ||
190 | bio_rw_flagged(bio, BIO_RW_FAILFAST_DRIVER) | ||
191 | #define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD) | ||
192 | #define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META) | ||
193 | #define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD) | ||
194 | #define bio_noidle(bio) bio_rw_flagged(bio, BIO_RW_NOIDLE) | ||
195 | 190 | ||
196 | /* | 191 | /* |
197 | * upper 16 bits of bi_rw define the io priority of this bio | 192 | * upper 16 bits of bi_rw define the io priority of this bio |
@@ -216,7 +211,7 @@ struct bio { | |||
216 | #define bio_offset(bio) bio_iovec((bio))->bv_offset | 211 | #define bio_offset(bio) bio_iovec((bio))->bv_offset |
217 | #define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) | 212 | #define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) |
218 | #define bio_sectors(bio) ((bio)->bi_size >> 9) | 213 | #define bio_sectors(bio) ((bio)->bi_size >> 9) |
219 | #define bio_empty_barrier(bio) (bio_barrier(bio) && !bio_has_data(bio) && !bio_discard(bio)) | 214 | #define bio_empty_barrier(bio) (bio_rw_flagged(bio, BIO_RW_BARRIER) && !bio_has_data(bio) && !bio_rw_flagged(bio, BIO_RW_DISCARD)) |
220 | 215 | ||
221 | static inline unsigned int bio_cur_bytes(struct bio *bio) | 216 | static inline unsigned int bio_cur_bytes(struct bio *bio) |
222 | { | 217 | { |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 2878811c6134..756d78b8c1c5 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -94,13 +94,13 @@ extern void __bitmap_shift_right(unsigned long *dst, | |||
94 | const unsigned long *src, int shift, int bits); | 94 | const unsigned long *src, int shift, int bits); |
95 | extern void __bitmap_shift_left(unsigned long *dst, | 95 | extern void __bitmap_shift_left(unsigned long *dst, |
96 | const unsigned long *src, int shift, int bits); | 96 | const unsigned long *src, int shift, int bits); |
97 | extern void __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, | 97 | extern int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, |
98 | const unsigned long *bitmap2, int bits); | 98 | const unsigned long *bitmap2, int bits); |
99 | extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, | 99 | extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, |
100 | const unsigned long *bitmap2, int bits); | 100 | const unsigned long *bitmap2, int bits); |
101 | extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, | 101 | extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, |
102 | const unsigned long *bitmap2, int bits); | 102 | const unsigned long *bitmap2, int bits); |
103 | extern void __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, | 103 | extern int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, |
104 | const unsigned long *bitmap2, int bits); | 104 | const unsigned long *bitmap2, int bits); |
105 | extern int __bitmap_intersects(const unsigned long *bitmap1, | 105 | extern int __bitmap_intersects(const unsigned long *bitmap1, |
106 | const unsigned long *bitmap2, int bits); | 106 | const unsigned long *bitmap2, int bits); |
@@ -171,13 +171,12 @@ static inline void bitmap_copy(unsigned long *dst, const unsigned long *src, | |||
171 | } | 171 | } |
172 | } | 172 | } |
173 | 173 | ||
174 | static inline void bitmap_and(unsigned long *dst, const unsigned long *src1, | 174 | static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, |
175 | const unsigned long *src2, int nbits) | 175 | const unsigned long *src2, int nbits) |
176 | { | 176 | { |
177 | if (small_const_nbits(nbits)) | 177 | if (small_const_nbits(nbits)) |
178 | *dst = *src1 & *src2; | 178 | return (*dst = *src1 & *src2) != 0; |
179 | else | 179 | return __bitmap_and(dst, src1, src2, nbits); |
180 | __bitmap_and(dst, src1, src2, nbits); | ||
181 | } | 180 | } |
182 | 181 | ||
183 | static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, | 182 | static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, |
@@ -198,13 +197,12 @@ static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, | |||
198 | __bitmap_xor(dst, src1, src2, nbits); | 197 | __bitmap_xor(dst, src1, src2, nbits); |
199 | } | 198 | } |
200 | 199 | ||
201 | static inline void bitmap_andnot(unsigned long *dst, const unsigned long *src1, | 200 | static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, |
202 | const unsigned long *src2, int nbits) | 201 | const unsigned long *src2, int nbits) |
203 | { | 202 | { |
204 | if (small_const_nbits(nbits)) | 203 | if (small_const_nbits(nbits)) |
205 | *dst = *src1 & ~(*src2); | 204 | return (*dst = *src1 & ~(*src2)) != 0; |
206 | else | 205 | return __bitmap_andnot(dst, src1, src2, nbits); |
207 | __bitmap_andnot(dst, src1, src2, nbits); | ||
208 | } | 206 | } |
209 | 207 | ||
210 | static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, | 208 | static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, |
diff --git a/include/linux/blk-iopoll.h b/include/linux/blk-iopoll.h new file mode 100644 index 000000000000..308734d3d4a2 --- /dev/null +++ b/include/linux/blk-iopoll.h | |||
@@ -0,0 +1,48 @@ | |||
1 | #ifndef BLK_IOPOLL_H | ||
2 | #define BLK_IOPOLL_H | ||
3 | |||
4 | struct blk_iopoll; | ||
5 | typedef int (blk_iopoll_fn)(struct blk_iopoll *, int); | ||
6 | |||
7 | struct blk_iopoll { | ||
8 | struct list_head list; | ||
9 | unsigned long state; | ||
10 | unsigned long data; | ||
11 | int weight; | ||
12 | int max; | ||
13 | blk_iopoll_fn *poll; | ||
14 | }; | ||
15 | |||
16 | enum { | ||
17 | IOPOLL_F_SCHED = 0, | ||
18 | IOPOLL_F_DISABLE = 1, | ||
19 | }; | ||
20 | |||
21 | /* | ||
22 | * Returns 0 if we successfully set the IOPOLL_F_SCHED bit, indicating | ||
23 | * that we were the first to acquire this iop for scheduling. If this iop | ||
24 | * is currently disabled, return "failure". | ||
25 | */ | ||
26 | static inline int blk_iopoll_sched_prep(struct blk_iopoll *iop) | ||
27 | { | ||
28 | if (!test_bit(IOPOLL_F_DISABLE, &iop->state)) | ||
29 | return test_and_set_bit(IOPOLL_F_SCHED, &iop->state); | ||
30 | |||
31 | return 1; | ||
32 | } | ||
33 | |||
34 | static inline int blk_iopoll_disable_pending(struct blk_iopoll *iop) | ||
35 | { | ||
36 | return test_bit(IOPOLL_F_DISABLE, &iop->state); | ||
37 | } | ||
38 | |||
39 | extern void blk_iopoll_sched(struct blk_iopoll *); | ||
40 | extern void blk_iopoll_init(struct blk_iopoll *, int, blk_iopoll_fn *); | ||
41 | extern void blk_iopoll_complete(struct blk_iopoll *); | ||
42 | extern void __blk_iopoll_complete(struct blk_iopoll *); | ||
43 | extern void blk_iopoll_enable(struct blk_iopoll *); | ||
44 | extern void blk_iopoll_disable(struct blk_iopoll *); | ||
45 | |||
46 | extern int blk_iopoll_enabled; | ||
47 | |||
48 | #endif | ||
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 69103e053c92..e23a86cae5ac 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -86,13 +86,14 @@ enum { | |||
86 | }; | 86 | }; |
87 | 87 | ||
88 | /* | 88 | /* |
89 | * request type modified bits. first two bits match BIO_RW* bits, important | 89 | * request type modified bits. first four bits match BIO_RW* bits, important |
90 | */ | 90 | */ |
91 | enum rq_flag_bits { | 91 | enum rq_flag_bits { |
92 | __REQ_RW, /* not set, read. set, write */ | 92 | __REQ_RW, /* not set, read. set, write */ |
93 | __REQ_FAILFAST_DEV, /* no driver retries of device errors */ | 93 | __REQ_FAILFAST_DEV, /* no driver retries of device errors */ |
94 | __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */ | 94 | __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */ |
95 | __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */ | 95 | __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */ |
96 | /* above flags must match BIO_RW_* */ | ||
96 | __REQ_DISCARD, /* request to discard sectors */ | 97 | __REQ_DISCARD, /* request to discard sectors */ |
97 | __REQ_SORTED, /* elevator knows about this request */ | 98 | __REQ_SORTED, /* elevator knows about this request */ |
98 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ | 99 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ |
@@ -114,6 +115,7 @@ enum rq_flag_bits { | |||
114 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ | 115 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ |
115 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ | 116 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ |
116 | __REQ_IO_STAT, /* account I/O stat */ | 117 | __REQ_IO_STAT, /* account I/O stat */ |
118 | __REQ_MIXED_MERGE, /* merge of different types, fail separately */ | ||
117 | __REQ_NR_BITS, /* stops here */ | 119 | __REQ_NR_BITS, /* stops here */ |
118 | }; | 120 | }; |
119 | 121 | ||
@@ -142,6 +144,10 @@ enum rq_flag_bits { | |||
142 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) | 144 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) |
143 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) | 145 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) |
144 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) | 146 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) |
147 | #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE) | ||
148 | |||
149 | #define REQ_FAILFAST_MASK (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | \ | ||
150 | REQ_FAILFAST_DRIVER) | ||
145 | 151 | ||
146 | #define BLK_MAX_CDB 16 | 152 | #define BLK_MAX_CDB 16 |
147 | 153 | ||
@@ -453,10 +459,12 @@ struct request_queue | |||
453 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ | 459 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ |
454 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ | 460 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ |
455 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ | 461 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ |
462 | #define QUEUE_FLAG_CQ 16 /* hardware does queuing */ | ||
456 | 463 | ||
457 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | 464 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ |
458 | (1 << QUEUE_FLAG_CLUSTER) | \ | 465 | (1 << QUEUE_FLAG_CLUSTER) | \ |
459 | (1 << QUEUE_FLAG_STACKABLE)) | 466 | (1 << QUEUE_FLAG_STACKABLE) | \ |
467 | (1 << QUEUE_FLAG_SAME_COMP)) | ||
460 | 468 | ||
461 | static inline int queue_is_locked(struct request_queue *q) | 469 | static inline int queue_is_locked(struct request_queue *q) |
462 | { | 470 | { |
@@ -575,6 +583,7 @@ enum { | |||
575 | 583 | ||
576 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 584 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
577 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 585 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
586 | #define blk_queue_queuing(q) test_bit(QUEUE_FLAG_CQ, &(q)->queue_flags) | ||
578 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 587 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
579 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | 588 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) |
580 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) | 589 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) |
@@ -828,11 +837,13 @@ static inline void blk_run_address_space(struct address_space *mapping) | |||
828 | } | 837 | } |
829 | 838 | ||
830 | /* | 839 | /* |
831 | * blk_rq_pos() : the current sector | 840 | * blk_rq_pos() : the current sector |
832 | * blk_rq_bytes() : bytes left in the entire request | 841 | * blk_rq_bytes() : bytes left in the entire request |
833 | * blk_rq_cur_bytes() : bytes left in the current segment | 842 | * blk_rq_cur_bytes() : bytes left in the current segment |
834 | * blk_rq_sectors() : sectors left in the entire request | 843 | * blk_rq_err_bytes() : bytes left till the next error boundary |
835 | * blk_rq_cur_sectors() : sectors left in the current segment | 844 | * blk_rq_sectors() : sectors left in the entire request |
845 | * blk_rq_cur_sectors() : sectors left in the current segment | ||
846 | * blk_rq_err_sectors() : sectors left till the next error boundary | ||
836 | */ | 847 | */ |
837 | static inline sector_t blk_rq_pos(const struct request *rq) | 848 | static inline sector_t blk_rq_pos(const struct request *rq) |
838 | { | 849 | { |
@@ -849,6 +860,8 @@ static inline int blk_rq_cur_bytes(const struct request *rq) | |||
849 | return rq->bio ? bio_cur_bytes(rq->bio) : 0; | 860 | return rq->bio ? bio_cur_bytes(rq->bio) : 0; |
850 | } | 861 | } |
851 | 862 | ||
863 | extern unsigned int blk_rq_err_bytes(const struct request *rq); | ||
864 | |||
852 | static inline unsigned int blk_rq_sectors(const struct request *rq) | 865 | static inline unsigned int blk_rq_sectors(const struct request *rq) |
853 | { | 866 | { |
854 | return blk_rq_bytes(rq) >> 9; | 867 | return blk_rq_bytes(rq) >> 9; |
@@ -859,6 +872,11 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq) | |||
859 | return blk_rq_cur_bytes(rq) >> 9; | 872 | return blk_rq_cur_bytes(rq) >> 9; |
860 | } | 873 | } |
861 | 874 | ||
875 | static inline unsigned int blk_rq_err_sectors(const struct request *rq) | ||
876 | { | ||
877 | return blk_rq_err_bytes(rq) >> 9; | ||
878 | } | ||
879 | |||
862 | /* | 880 | /* |
863 | * Request issue related functions. | 881 | * Request issue related functions. |
864 | */ | 882 | */ |
@@ -885,10 +903,12 @@ extern bool blk_end_request(struct request *rq, int error, | |||
885 | unsigned int nr_bytes); | 903 | unsigned int nr_bytes); |
886 | extern void blk_end_request_all(struct request *rq, int error); | 904 | extern void blk_end_request_all(struct request *rq, int error); |
887 | extern bool blk_end_request_cur(struct request *rq, int error); | 905 | extern bool blk_end_request_cur(struct request *rq, int error); |
906 | extern bool blk_end_request_err(struct request *rq, int error); | ||
888 | extern bool __blk_end_request(struct request *rq, int error, | 907 | extern bool __blk_end_request(struct request *rq, int error, |
889 | unsigned int nr_bytes); | 908 | unsigned int nr_bytes); |
890 | extern void __blk_end_request_all(struct request *rq, int error); | 909 | extern void __blk_end_request_all(struct request *rq, int error); |
891 | extern bool __blk_end_request_cur(struct request *rq, int error); | 910 | extern bool __blk_end_request_cur(struct request *rq, int error); |
911 | extern bool __blk_end_request_err(struct request *rq, int error); | ||
892 | 912 | ||
893 | extern void blk_complete_request(struct request *); | 913 | extern void blk_complete_request(struct request *); |
894 | extern void __blk_complete_request(struct request *); | 914 | extern void __blk_complete_request(struct request *); |
@@ -915,6 +935,7 @@ extern void blk_queue_alignment_offset(struct request_queue *q, | |||
915 | unsigned int alignment); | 935 | unsigned int alignment); |
916 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); | 936 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); |
917 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); | 937 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); |
938 | extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt); | ||
918 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); | 939 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); |
919 | extern void blk_set_default_limits(struct queue_limits *lim); | 940 | extern void blk_set_default_limits(struct queue_limits *lim); |
920 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, | 941 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, |
@@ -977,15 +998,18 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
977 | } | 998 | } |
978 | 999 | ||
979 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 1000 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
980 | extern int blkdev_issue_discard(struct block_device *, | 1001 | #define DISCARD_FL_WAIT 0x01 /* wait for completion */ |
981 | sector_t sector, sector_t nr_sects, gfp_t); | 1002 | #define DISCARD_FL_BARRIER 0x02 /* issue DISCARD_BARRIER request */ |
1003 | extern int blkdev_issue_discard(struct block_device *, sector_t sector, | ||
1004 | sector_t nr_sects, gfp_t, int flags); | ||
982 | 1005 | ||
983 | static inline int sb_issue_discard(struct super_block *sb, | 1006 | static inline int sb_issue_discard(struct super_block *sb, |
984 | sector_t block, sector_t nr_blocks) | 1007 | sector_t block, sector_t nr_blocks) |
985 | { | 1008 | { |
986 | block <<= (sb->s_blocksize_bits - 9); | 1009 | block <<= (sb->s_blocksize_bits - 9); |
987 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 1010 | nr_blocks <<= (sb->s_blocksize_bits - 9); |
988 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL); | 1011 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, |
1012 | DISCARD_FL_BARRIER); | ||
989 | } | 1013 | } |
990 | 1014 | ||
991 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | 1015 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 4a37a56f6cdd..5824b20b5fcb 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h | |||
@@ -66,5 +66,6 @@ void can_bus_off(struct net_device *dev); | |||
66 | 66 | ||
67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); | 67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); |
68 | void can_get_echo_skb(struct net_device *dev, int idx); | 68 | void can_get_echo_skb(struct net_device *dev, int idx); |
69 | void can_free_echo_skb(struct net_device *dev, int idx); | ||
69 | 70 | ||
70 | #endif /* CAN_DEV_H */ | 71 | #endif /* CAN_DEV_H */ |
diff --git a/include/linux/connector.h b/include/linux/connector.h index b68d27850d51..47ebf416f512 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h | |||
@@ -136,7 +136,7 @@ struct cn_callback_data { | |||
136 | void *ddata; | 136 | void *ddata; |
137 | 137 | ||
138 | void *callback_priv; | 138 | void *callback_priv; |
139 | void (*callback) (void *); | 139 | void (*callback) (struct cn_msg *); |
140 | 140 | ||
141 | void *free; | 141 | void *free; |
142 | }; | 142 | }; |
@@ -167,11 +167,11 @@ struct cn_dev { | |||
167 | struct cn_queue_dev *cbdev; | 167 | struct cn_queue_dev *cbdev; |
168 | }; | 168 | }; |
169 | 169 | ||
170 | int cn_add_callback(struct cb_id *, char *, void (*callback) (void *)); | 170 | int cn_add_callback(struct cb_id *, char *, void (*callback) (struct cn_msg *)); |
171 | void cn_del_callback(struct cb_id *); | 171 | void cn_del_callback(struct cb_id *); |
172 | int cn_netlink_send(struct cn_msg *, u32, gfp_t); | 172 | int cn_netlink_send(struct cn_msg *, u32, gfp_t); |
173 | 173 | ||
174 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *)); | 174 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(struct cn_msg *)); |
175 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); | 175 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); |
176 | 176 | ||
177 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); | 177 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 4d668e05d458..47536197ffdd 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -48,6 +48,15 @@ struct notifier_block; | |||
48 | 48 | ||
49 | #ifdef CONFIG_SMP | 49 | #ifdef CONFIG_SMP |
50 | /* Need to know about CPUs going up/down? */ | 50 | /* Need to know about CPUs going up/down? */ |
51 | #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) | ||
52 | #define cpu_notifier(fn, pri) { \ | ||
53 | static struct notifier_block fn##_nb __cpuinitdata = \ | ||
54 | { .notifier_call = fn, .priority = pri }; \ | ||
55 | register_cpu_notifier(&fn##_nb); \ | ||
56 | } | ||
57 | #else /* #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ | ||
58 | #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) | ||
59 | #endif /* #else #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ | ||
51 | #ifdef CONFIG_HOTPLUG_CPU | 60 | #ifdef CONFIG_HOTPLUG_CPU |
52 | extern int register_cpu_notifier(struct notifier_block *nb); | 61 | extern int register_cpu_notifier(struct notifier_block *nb); |
53 | extern void unregister_cpu_notifier(struct notifier_block *nb); | 62 | extern void unregister_cpu_notifier(struct notifier_block *nb); |
@@ -74,6 +83,8 @@ extern void cpu_maps_update_done(void); | |||
74 | 83 | ||
75 | #else /* CONFIG_SMP */ | 84 | #else /* CONFIG_SMP */ |
76 | 85 | ||
86 | #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) | ||
87 | |||
77 | static inline int register_cpu_notifier(struct notifier_block *nb) | 88 | static inline int register_cpu_notifier(struct notifier_block *nb) |
78 | { | 89 | { |
79 | return 0; | 90 | return 0; |
@@ -99,11 +110,7 @@ extern struct sysdev_class cpu_sysdev_class; | |||
99 | 110 | ||
100 | extern void get_online_cpus(void); | 111 | extern void get_online_cpus(void); |
101 | extern void put_online_cpus(void); | 112 | extern void put_online_cpus(void); |
102 | #define hotcpu_notifier(fn, pri) { \ | 113 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) |
103 | static struct notifier_block fn##_nb __cpuinitdata = \ | ||
104 | { .notifier_call = fn, .priority = pri }; \ | ||
105 | register_cpu_notifier(&fn##_nb); \ | ||
106 | } | ||
107 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) | 114 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) |
108 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 115 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
109 | int cpu_down(unsigned int cpu); | 116 | int cpu_down(unsigned int cpu); |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index c5ac87ca7bc6..796df12091b7 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -43,10 +43,10 @@ | |||
43 | * int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask | 43 | * int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask |
44 | * int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask | 44 | * int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask |
45 | * | 45 | * |
46 | * void cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] | 46 | * int cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] |
47 | * void cpus_or(dst, src1, src2) dst = src1 | src2 [union] | 47 | * void cpus_or(dst, src1, src2) dst = src1 | src2 [union] |
48 | * void cpus_xor(dst, src1, src2) dst = src1 ^ src2 | 48 | * void cpus_xor(dst, src1, src2) dst = src1 ^ src2 |
49 | * void cpus_andnot(dst, src1, src2) dst = src1 & ~src2 | 49 | * int cpus_andnot(dst, src1, src2) dst = src1 & ~src2 |
50 | * void cpus_complement(dst, src) dst = ~src | 50 | * void cpus_complement(dst, src) dst = ~src |
51 | * | 51 | * |
52 | * int cpus_equal(mask1, mask2) Does mask1 == mask2? | 52 | * int cpus_equal(mask1, mask2) Does mask1 == mask2? |
@@ -179,10 +179,10 @@ static inline int __cpu_test_and_set(int cpu, cpumask_t *addr) | |||
179 | } | 179 | } |
180 | 180 | ||
181 | #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) | 181 | #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) |
182 | static inline void __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, | 182 | static inline int __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, |
183 | const cpumask_t *src2p, int nbits) | 183 | const cpumask_t *src2p, int nbits) |
184 | { | 184 | { |
185 | bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); | 185 | return bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); |
186 | } | 186 | } |
187 | 187 | ||
188 | #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) | 188 | #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) |
@@ -201,10 +201,10 @@ static inline void __cpus_xor(cpumask_t *dstp, const cpumask_t *src1p, | |||
201 | 201 | ||
202 | #define cpus_andnot(dst, src1, src2) \ | 202 | #define cpus_andnot(dst, src1, src2) \ |
203 | __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) | 203 | __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) |
204 | static inline void __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, | 204 | static inline int __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, |
205 | const cpumask_t *src2p, int nbits) | 205 | const cpumask_t *src2p, int nbits) |
206 | { | 206 | { |
207 | bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); | 207 | return bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); |
208 | } | 208 | } |
209 | 209 | ||
210 | #define cpus_complement(dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) | 210 | #define cpus_complement(dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) |
@@ -738,11 +738,11 @@ static inline void cpumask_clear(struct cpumask *dstp) | |||
738 | * @src1p: the first input | 738 | * @src1p: the first input |
739 | * @src2p: the second input | 739 | * @src2p: the second input |
740 | */ | 740 | */ |
741 | static inline void cpumask_and(struct cpumask *dstp, | 741 | static inline int cpumask_and(struct cpumask *dstp, |
742 | const struct cpumask *src1p, | 742 | const struct cpumask *src1p, |
743 | const struct cpumask *src2p) | 743 | const struct cpumask *src2p) |
744 | { | 744 | { |
745 | bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), | 745 | return bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), |
746 | cpumask_bits(src2p), nr_cpumask_bits); | 746 | cpumask_bits(src2p), nr_cpumask_bits); |
747 | } | 747 | } |
748 | 748 | ||
@@ -779,11 +779,11 @@ static inline void cpumask_xor(struct cpumask *dstp, | |||
779 | * @src1p: the first input | 779 | * @src1p: the first input |
780 | * @src2p: the second input | 780 | * @src2p: the second input |
781 | */ | 781 | */ |
782 | static inline void cpumask_andnot(struct cpumask *dstp, | 782 | static inline int cpumask_andnot(struct cpumask *dstp, |
783 | const struct cpumask *src1p, | 783 | const struct cpumask *src1p, |
784 | const struct cpumask *src2p) | 784 | const struct cpumask *src2p) |
785 | { | 785 | { |
786 | bitmap_andnot(cpumask_bits(dstp), cpumask_bits(src1p), | 786 | return bitmap_andnot(cpumask_bits(dstp), cpumask_bits(src1p), |
787 | cpumask_bits(src2p), nr_cpumask_bits); | 787 | cpumask_bits(src2p), nr_cpumask_bits); |
788 | } | 788 | } |
789 | 789 | ||
diff --git a/include/linux/cred.h b/include/linux/cred.h index 4fa999696310..fb371601a3b4 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/capability.h> | 15 | #include <linux/capability.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/key.h> | 17 | #include <linux/key.h> |
18 | #include <linux/selinux.h> | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | 20 | ||
20 | struct user_struct; | 21 | struct user_struct; |
@@ -114,6 +115,13 @@ struct thread_group_cred { | |||
114 | */ | 115 | */ |
115 | struct cred { | 116 | struct cred { |
116 | atomic_t usage; | 117 | atomic_t usage; |
118 | #ifdef CONFIG_DEBUG_CREDENTIALS | ||
119 | atomic_t subscribers; /* number of processes subscribed */ | ||
120 | void *put_addr; | ||
121 | unsigned magic; | ||
122 | #define CRED_MAGIC 0x43736564 | ||
123 | #define CRED_MAGIC_DEAD 0x44656144 | ||
124 | #endif | ||
117 | uid_t uid; /* real UID of the task */ | 125 | uid_t uid; /* real UID of the task */ |
118 | gid_t gid; /* real GID of the task */ | 126 | gid_t gid; /* real GID of the task */ |
119 | uid_t suid; /* saved UID of the task */ | 127 | uid_t suid; /* saved UID of the task */ |
@@ -143,7 +151,9 @@ struct cred { | |||
143 | }; | 151 | }; |
144 | 152 | ||
145 | extern void __put_cred(struct cred *); | 153 | extern void __put_cred(struct cred *); |
154 | extern void exit_creds(struct task_struct *); | ||
146 | extern int copy_creds(struct task_struct *, unsigned long); | 155 | extern int copy_creds(struct task_struct *, unsigned long); |
156 | extern struct cred *cred_alloc_blank(void); | ||
147 | extern struct cred *prepare_creds(void); | 157 | extern struct cred *prepare_creds(void); |
148 | extern struct cred *prepare_exec_creds(void); | 158 | extern struct cred *prepare_exec_creds(void); |
149 | extern struct cred *prepare_usermodehelper_creds(void); | 159 | extern struct cred *prepare_usermodehelper_creds(void); |
@@ -158,6 +168,62 @@ extern int set_security_override_from_ctx(struct cred *, const char *); | |||
158 | extern int set_create_files_as(struct cred *, struct inode *); | 168 | extern int set_create_files_as(struct cred *, struct inode *); |
159 | extern void __init cred_init(void); | 169 | extern void __init cred_init(void); |
160 | 170 | ||
171 | /* | ||
172 | * check for validity of credentials | ||
173 | */ | ||
174 | #ifdef CONFIG_DEBUG_CREDENTIALS | ||
175 | extern void __invalid_creds(const struct cred *, const char *, unsigned); | ||
176 | extern void __validate_process_creds(struct task_struct *, | ||
177 | const char *, unsigned); | ||
178 | |||
179 | static inline bool creds_are_invalid(const struct cred *cred) | ||
180 | { | ||
181 | if (cred->magic != CRED_MAGIC) | ||
182 | return true; | ||
183 | if (atomic_read(&cred->usage) < atomic_read(&cred->subscribers)) | ||
184 | return true; | ||
185 | #ifdef CONFIG_SECURITY_SELINUX | ||
186 | if (selinux_is_enabled()) { | ||
187 | if ((unsigned long) cred->security < PAGE_SIZE) | ||
188 | return true; | ||
189 | if ((*(u32 *)cred->security & 0xffffff00) == | ||
190 | (POISON_FREE << 24 | POISON_FREE << 16 | POISON_FREE << 8)) | ||
191 | return true; | ||
192 | } | ||
193 | #endif | ||
194 | return false; | ||
195 | } | ||
196 | |||
197 | static inline void __validate_creds(const struct cred *cred, | ||
198 | const char *file, unsigned line) | ||
199 | { | ||
200 | if (unlikely(creds_are_invalid(cred))) | ||
201 | __invalid_creds(cred, file, line); | ||
202 | } | ||
203 | |||
204 | #define validate_creds(cred) \ | ||
205 | do { \ | ||
206 | __validate_creds((cred), __FILE__, __LINE__); \ | ||
207 | } while(0) | ||
208 | |||
209 | #define validate_process_creds() \ | ||
210 | do { \ | ||
211 | __validate_process_creds(current, __FILE__, __LINE__); \ | ||
212 | } while(0) | ||
213 | |||
214 | extern void validate_creds_for_do_exit(struct task_struct *); | ||
215 | #else | ||
216 | static inline void validate_creds(const struct cred *cred) | ||
217 | { | ||
218 | } | ||
219 | static inline void validate_creds_for_do_exit(struct task_struct *tsk) | ||
220 | { | ||
221 | } | ||
222 | static inline void validate_process_creds(void) | ||
223 | { | ||
224 | } | ||
225 | #endif | ||
226 | |||
161 | /** | 227 | /** |
162 | * get_new_cred - Get a reference on a new set of credentials | 228 | * get_new_cred - Get a reference on a new set of credentials |
163 | * @cred: The new credentials to reference | 229 | * @cred: The new credentials to reference |
@@ -186,7 +252,9 @@ static inline struct cred *get_new_cred(struct cred *cred) | |||
186 | */ | 252 | */ |
187 | static inline const struct cred *get_cred(const struct cred *cred) | 253 | static inline const struct cred *get_cred(const struct cred *cred) |
188 | { | 254 | { |
189 | return get_new_cred((struct cred *) cred); | 255 | struct cred *nonconst_cred = (struct cred *) cred; |
256 | validate_creds(cred); | ||
257 | return get_new_cred(nonconst_cred); | ||
190 | } | 258 | } |
191 | 259 | ||
192 | /** | 260 | /** |
@@ -204,7 +272,7 @@ static inline void put_cred(const struct cred *_cred) | |||
204 | { | 272 | { |
205 | struct cred *cred = (struct cred *) _cred; | 273 | struct cred *cred = (struct cred *) _cred; |
206 | 274 | ||
207 | BUG_ON(atomic_read(&(cred)->usage) <= 0); | 275 | validate_creds(cred); |
208 | if (atomic_dec_and_test(&(cred)->usage)) | 276 | if (atomic_dec_and_test(&(cred)->usage)) |
209 | __put_cred(cred); | 277 | __put_cred(cred); |
210 | } | 278 | } |
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index ec29fa268b94..fd929889e8dc 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
@@ -115,7 +115,6 @@ struct crypto_async_request; | |||
115 | struct crypto_aead; | 115 | struct crypto_aead; |
116 | struct crypto_blkcipher; | 116 | struct crypto_blkcipher; |
117 | struct crypto_hash; | 117 | struct crypto_hash; |
118 | struct crypto_ahash; | ||
119 | struct crypto_rng; | 118 | struct crypto_rng; |
120 | struct crypto_tfm; | 119 | struct crypto_tfm; |
121 | struct crypto_type; | 120 | struct crypto_type; |
@@ -146,16 +145,6 @@ struct ablkcipher_request { | |||
146 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | 145 | void *__ctx[] CRYPTO_MINALIGN_ATTR; |
147 | }; | 146 | }; |
148 | 147 | ||
149 | struct ahash_request { | ||
150 | struct crypto_async_request base; | ||
151 | |||
152 | unsigned int nbytes; | ||
153 | struct scatterlist *src; | ||
154 | u8 *result; | ||
155 | |||
156 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
157 | }; | ||
158 | |||
159 | /** | 148 | /** |
160 | * struct aead_request - AEAD request | 149 | * struct aead_request - AEAD request |
161 | * @base: Common attributes for async crypto requests | 150 | * @base: Common attributes for async crypto requests |
@@ -220,18 +209,6 @@ struct ablkcipher_alg { | |||
220 | unsigned int ivsize; | 209 | unsigned int ivsize; |
221 | }; | 210 | }; |
222 | 211 | ||
223 | struct ahash_alg { | ||
224 | int (*init)(struct ahash_request *req); | ||
225 | int (*reinit)(struct ahash_request *req); | ||
226 | int (*update)(struct ahash_request *req); | ||
227 | int (*final)(struct ahash_request *req); | ||
228 | int (*digest)(struct ahash_request *req); | ||
229 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
230 | unsigned int keylen); | ||
231 | |||
232 | unsigned int digestsize; | ||
233 | }; | ||
234 | |||
235 | struct aead_alg { | 212 | struct aead_alg { |
236 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, | 213 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, |
237 | unsigned int keylen); | 214 | unsigned int keylen); |
@@ -318,7 +295,6 @@ struct rng_alg { | |||
318 | #define cra_cipher cra_u.cipher | 295 | #define cra_cipher cra_u.cipher |
319 | #define cra_digest cra_u.digest | 296 | #define cra_digest cra_u.digest |
320 | #define cra_hash cra_u.hash | 297 | #define cra_hash cra_u.hash |
321 | #define cra_ahash cra_u.ahash | ||
322 | #define cra_compress cra_u.compress | 298 | #define cra_compress cra_u.compress |
323 | #define cra_rng cra_u.rng | 299 | #define cra_rng cra_u.rng |
324 | 300 | ||
@@ -346,7 +322,6 @@ struct crypto_alg { | |||
346 | struct cipher_alg cipher; | 322 | struct cipher_alg cipher; |
347 | struct digest_alg digest; | 323 | struct digest_alg digest; |
348 | struct hash_alg hash; | 324 | struct hash_alg hash; |
349 | struct ahash_alg ahash; | ||
350 | struct compress_alg compress; | 325 | struct compress_alg compress; |
351 | struct rng_alg rng; | 326 | struct rng_alg rng; |
352 | } cra_u; | 327 | } cra_u; |
@@ -433,18 +408,6 @@ struct hash_tfm { | |||
433 | unsigned int digestsize; | 408 | unsigned int digestsize; |
434 | }; | 409 | }; |
435 | 410 | ||
436 | struct ahash_tfm { | ||
437 | int (*init)(struct ahash_request *req); | ||
438 | int (*update)(struct ahash_request *req); | ||
439 | int (*final)(struct ahash_request *req); | ||
440 | int (*digest)(struct ahash_request *req); | ||
441 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
442 | unsigned int keylen); | ||
443 | |||
444 | unsigned int digestsize; | ||
445 | unsigned int reqsize; | ||
446 | }; | ||
447 | |||
448 | struct compress_tfm { | 411 | struct compress_tfm { |
449 | int (*cot_compress)(struct crypto_tfm *tfm, | 412 | int (*cot_compress)(struct crypto_tfm *tfm, |
450 | const u8 *src, unsigned int slen, | 413 | const u8 *src, unsigned int slen, |
@@ -465,7 +428,6 @@ struct rng_tfm { | |||
465 | #define crt_blkcipher crt_u.blkcipher | 428 | #define crt_blkcipher crt_u.blkcipher |
466 | #define crt_cipher crt_u.cipher | 429 | #define crt_cipher crt_u.cipher |
467 | #define crt_hash crt_u.hash | 430 | #define crt_hash crt_u.hash |
468 | #define crt_ahash crt_u.ahash | ||
469 | #define crt_compress crt_u.compress | 431 | #define crt_compress crt_u.compress |
470 | #define crt_rng crt_u.rng | 432 | #define crt_rng crt_u.rng |
471 | 433 | ||
@@ -479,7 +441,6 @@ struct crypto_tfm { | |||
479 | struct blkcipher_tfm blkcipher; | 441 | struct blkcipher_tfm blkcipher; |
480 | struct cipher_tfm cipher; | 442 | struct cipher_tfm cipher; |
481 | struct hash_tfm hash; | 443 | struct hash_tfm hash; |
482 | struct ahash_tfm ahash; | ||
483 | struct compress_tfm compress; | 444 | struct compress_tfm compress; |
484 | struct rng_tfm rng; | 445 | struct rng_tfm rng; |
485 | } crt_u; | 446 | } crt_u; |
@@ -770,7 +731,7 @@ static inline struct ablkcipher_request *ablkcipher_request_alloc( | |||
770 | 731 | ||
771 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) | 732 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) |
772 | { | 733 | { |
773 | kfree(req); | 734 | kzfree(req); |
774 | } | 735 | } |
775 | 736 | ||
776 | static inline void ablkcipher_request_set_callback( | 737 | static inline void ablkcipher_request_set_callback( |
@@ -901,7 +862,7 @@ static inline struct aead_request *aead_request_alloc(struct crypto_aead *tfm, | |||
901 | 862 | ||
902 | static inline void aead_request_free(struct aead_request *req) | 863 | static inline void aead_request_free(struct aead_request *req) |
903 | { | 864 | { |
904 | kfree(req); | 865 | kzfree(req); |
905 | } | 866 | } |
906 | 867 | ||
907 | static inline void aead_request_set_callback(struct aead_request *req, | 868 | static inline void aead_request_set_callback(struct aead_request *req, |
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h index 7d2e10006188..b7cdbb4373df 100644 --- a/include/linux/dcbnl.h +++ b/include/linux/dcbnl.h | |||
@@ -50,6 +50,8 @@ struct dcbmsg { | |||
50 | * @DCB_CMD_SNUMTCS: set the number of traffic classes | 50 | * @DCB_CMD_SNUMTCS: set the number of traffic classes |
51 | * @DCB_CMD_GBCN: set backward congestion notification configuration | 51 | * @DCB_CMD_GBCN: set backward congestion notification configuration |
52 | * @DCB_CMD_SBCN: get backward congestion notification configration. | 52 | * @DCB_CMD_SBCN: get backward congestion notification configration. |
53 | * @DCB_CMD_GAPP: get application protocol configuration | ||
54 | * @DCB_CMD_SAPP: set application protocol configuration | ||
53 | */ | 55 | */ |
54 | enum dcbnl_commands { | 56 | enum dcbnl_commands { |
55 | DCB_CMD_UNDEFINED, | 57 | DCB_CMD_UNDEFINED, |
@@ -80,6 +82,9 @@ enum dcbnl_commands { | |||
80 | DCB_CMD_BCN_GCFG, | 82 | DCB_CMD_BCN_GCFG, |
81 | DCB_CMD_BCN_SCFG, | 83 | DCB_CMD_BCN_SCFG, |
82 | 84 | ||
85 | DCB_CMD_GAPP, | ||
86 | DCB_CMD_SAPP, | ||
87 | |||
83 | __DCB_CMD_ENUM_MAX, | 88 | __DCB_CMD_ENUM_MAX, |
84 | DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, | 89 | DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, |
85 | }; | 90 | }; |
@@ -114,6 +119,7 @@ enum dcbnl_attrs { | |||
114 | DCB_ATTR_CAP, | 119 | DCB_ATTR_CAP, |
115 | DCB_ATTR_NUMTCS, | 120 | DCB_ATTR_NUMTCS, |
116 | DCB_ATTR_BCN, | 121 | DCB_ATTR_BCN, |
122 | DCB_ATTR_APP, | ||
117 | 123 | ||
118 | __DCB_ATTR_ENUM_MAX, | 124 | __DCB_ATTR_ENUM_MAX, |
119 | DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, | 125 | DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, |
@@ -338,5 +344,17 @@ enum dcb_general_attr_values { | |||
338 | DCB_ATTR_VALUE_UNDEFINED = 0xff | 344 | DCB_ATTR_VALUE_UNDEFINED = 0xff |
339 | }; | 345 | }; |
340 | 346 | ||
347 | #define DCB_APP_IDTYPE_ETHTYPE 0x00 | ||
348 | #define DCB_APP_IDTYPE_PORTNUM 0x01 | ||
349 | enum dcbnl_app_attrs { | ||
350 | DCB_APP_ATTR_UNDEFINED, | ||
351 | |||
352 | DCB_APP_ATTR_IDTYPE, | ||
353 | DCB_APP_ATTR_ID, | ||
354 | DCB_APP_ATTR_PRIORITY, | ||
355 | |||
356 | __DCB_APP_ATTR_ENUM_MAX, | ||
357 | DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1, | ||
358 | }; | ||
341 | 359 | ||
342 | #endif /* __LINUX_DCBNL_H__ */ | 360 | #endif /* __LINUX_DCBNL_H__ */ |
diff --git a/include/linux/decompress/generic.h b/include/linux/decompress/generic.h index 6dfb856327bb..0c7111a55a1a 100644 --- a/include/linux/decompress/generic.h +++ b/include/linux/decompress/generic.h | |||
@@ -1,31 +1,37 @@ | |||
1 | #ifndef DECOMPRESS_GENERIC_H | 1 | #ifndef DECOMPRESS_GENERIC_H |
2 | #define DECOMPRESS_GENERIC_H | 2 | #define DECOMPRESS_GENERIC_H |
3 | 3 | ||
4 | /* Minimal chunksize to be read. | ||
5 | *Bzip2 prefers at least 4096 | ||
6 | *Lzma prefers 0x10000 */ | ||
7 | #define COMPR_IOBUF_SIZE 4096 | ||
8 | |||
9 | typedef int (*decompress_fn) (unsigned char *inbuf, int len, | 4 | typedef int (*decompress_fn) (unsigned char *inbuf, int len, |
10 | int(*fill)(void*, unsigned int), | 5 | int(*fill)(void*, unsigned int), |
11 | int(*writebb)(void*, unsigned int), | 6 | int(*flush)(void*, unsigned int), |
12 | unsigned char *output, | 7 | unsigned char *outbuf, |
13 | int *posp, | 8 | int *posp, |
14 | void(*error)(char *x)); | 9 | void(*error)(char *x)); |
15 | 10 | ||
16 | /* inbuf - input buffer | 11 | /* inbuf - input buffer |
17 | *len - len of pre-read data in inbuf | 12 | *len - len of pre-read data in inbuf |
18 | *fill - function to fill inbuf if empty | 13 | *fill - function to fill inbuf when empty |
19 | *writebb - function to write out outbug | 14 | *flush - function to write out outbuf |
15 | *outbuf - output buffer | ||
20 | *posp - if non-null, input position (number of bytes read) will be | 16 | *posp - if non-null, input position (number of bytes read) will be |
21 | * returned here | 17 | * returned here |
22 | * | 18 | * |
23 | *If len != 0, the inbuf is initialized (with as much data), and fill | 19 | *If len != 0, inbuf should contain all the necessary input data, and fill |
24 | *should not be called | 20 | *should be NULL |
25 | *If len = 0, the inbuf is allocated, but empty. Its size is IOBUF_SIZE | 21 | *If len = 0, inbuf can be NULL, in which case the decompressor will allocate |
26 | *fill should be called (repeatedly...) to read data, at most IOBUF_SIZE | 22 | *the input buffer. If inbuf != NULL it must be at least XXX_IOBUF_SIZE bytes. |
23 | *fill will be called (repeatedly...) to read data, at most XXX_IOBUF_SIZE | ||
24 | *bytes should be read per call. Replace XXX with the appropriate decompressor | ||
25 | *name, i.e. LZMA_IOBUF_SIZE. | ||
26 | * | ||
27 | *If flush = NULL, outbuf must be large enough to buffer all the expected | ||
28 | *output. If flush != NULL, the output buffer will be allocated by the | ||
29 | *decompressor (outbuf = NULL), and the flush function will be called to | ||
30 | *flush the output buffer at the appropriate time (decompressor and stream | ||
31 | *dependent). | ||
27 | */ | 32 | */ |
28 | 33 | ||
34 | |||
29 | /* Utility routine to detect the decompression method */ | 35 | /* Utility routine to detect the decompression method */ |
30 | decompress_fn decompress_method(const unsigned char *inbuf, int len, | 36 | decompress_fn decompress_method(const unsigned char *inbuf, int len, |
31 | const char **name); | 37 | const char **name); |
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 655e7721580a..df7607e6dce8 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
@@ -91,6 +91,9 @@ typedef int (*dm_iterate_devices_fn) (struct dm_target *ti, | |||
91 | iterate_devices_callout_fn fn, | 91 | iterate_devices_callout_fn fn, |
92 | void *data); | 92 | void *data); |
93 | 93 | ||
94 | typedef void (*dm_io_hints_fn) (struct dm_target *ti, | ||
95 | struct queue_limits *limits); | ||
96 | |||
94 | /* | 97 | /* |
95 | * Returns: | 98 | * Returns: |
96 | * 0: The target can handle the next I/O immediately. | 99 | * 0: The target can handle the next I/O immediately. |
@@ -151,6 +154,7 @@ struct target_type { | |||
151 | dm_merge_fn merge; | 154 | dm_merge_fn merge; |
152 | dm_busy_fn busy; | 155 | dm_busy_fn busy; |
153 | dm_iterate_devices_fn iterate_devices; | 156 | dm_iterate_devices_fn iterate_devices; |
157 | dm_io_hints_fn io_hints; | ||
154 | 158 | ||
155 | /* For internal device-mapper use. */ | 159 | /* For internal device-mapper use. */ |
156 | struct list_head list; | 160 | struct list_head list; |
diff --git a/include/linux/device.h b/include/linux/device.h index aebb81036db2..a28642975053 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -62,7 +62,7 @@ struct bus_type { | |||
62 | int (*suspend)(struct device *dev, pm_message_t state); | 62 | int (*suspend)(struct device *dev, pm_message_t state); |
63 | int (*resume)(struct device *dev); | 63 | int (*resume)(struct device *dev); |
64 | 64 | ||
65 | struct dev_pm_ops *pm; | 65 | const struct dev_pm_ops *pm; |
66 | 66 | ||
67 | struct bus_type_private *p; | 67 | struct bus_type_private *p; |
68 | }; | 68 | }; |
@@ -132,7 +132,7 @@ struct device_driver { | |||
132 | int (*resume) (struct device *dev); | 132 | int (*resume) (struct device *dev); |
133 | struct attribute_group **groups; | 133 | struct attribute_group **groups; |
134 | 134 | ||
135 | struct dev_pm_ops *pm; | 135 | const struct dev_pm_ops *pm; |
136 | 136 | ||
137 | struct driver_private *p; | 137 | struct driver_private *p; |
138 | }; | 138 | }; |
@@ -200,7 +200,8 @@ struct class { | |||
200 | int (*suspend)(struct device *dev, pm_message_t state); | 200 | int (*suspend)(struct device *dev, pm_message_t state); |
201 | int (*resume)(struct device *dev); | 201 | int (*resume)(struct device *dev); |
202 | 202 | ||
203 | struct dev_pm_ops *pm; | 203 | const struct dev_pm_ops *pm; |
204 | |||
204 | struct class_private *p; | 205 | struct class_private *p; |
205 | }; | 206 | }; |
206 | 207 | ||
@@ -291,7 +292,7 @@ struct device_type { | |||
291 | char *(*nodename)(struct device *dev); | 292 | char *(*nodename)(struct device *dev); |
292 | void (*release)(struct device *dev); | 293 | void (*release)(struct device *dev); |
293 | 294 | ||
294 | struct dev_pm_ops *pm; | 295 | const struct dev_pm_ops *pm; |
295 | }; | 296 | }; |
296 | 297 | ||
297 | /* interface for exporting device attributes */ | 298 | /* interface for exporting device attributes */ |
diff --git a/include/linux/dm-log-userspace.h b/include/linux/dm-log-userspace.h index 642e3017b51f..8a1f972c0fe9 100644 --- a/include/linux/dm-log-userspace.h +++ b/include/linux/dm-log-userspace.h | |||
@@ -371,7 +371,18 @@ | |||
371 | (DM_ULOG_REQUEST_MASK & (request_type)) | 371 | (DM_ULOG_REQUEST_MASK & (request_type)) |
372 | 372 | ||
373 | struct dm_ulog_request { | 373 | struct dm_ulog_request { |
374 | char uuid[DM_UUID_LEN]; /* Ties a request to a specific mirror log */ | 374 | /* |
375 | * The local unique identifier (luid) and the universally unique | ||
376 | * identifier (uuid) are used to tie a request to a specific | ||
377 | * mirror log. A single machine log could probably make due with | ||
378 | * just the 'luid', but a cluster-aware log must use the 'uuid' and | ||
379 | * the 'luid'. The uuid is what is required for node to node | ||
380 | * communication concerning a particular log, but the 'luid' helps | ||
381 | * differentiate between logs that are being swapped and have the | ||
382 | * same 'uuid'. (Think "live" and "inactive" device-mapper tables.) | ||
383 | */ | ||
384 | uint64_t luid; | ||
385 | char uuid[DM_UUID_LEN]; | ||
375 | char padding[7]; /* Padding because DM_UUID_LEN = 129 */ | 386 | char padding[7]; /* Padding because DM_UUID_LEN = 129 */ |
376 | 387 | ||
377 | int32_t error; /* Used to report back processing errors */ | 388 | int32_t error; /* Used to report back processing errors */ |
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 07dfd460d286..91b761846061 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
@@ -58,6 +58,7 @@ struct dma_map_ops { | |||
58 | enum dma_data_direction dir); | 58 | enum dma_data_direction dir); |
59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); | 59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); |
60 | int (*dma_supported)(struct device *dev, u64 mask); | 60 | int (*dma_supported)(struct device *dev, u64 mask); |
61 | int (*set_dma_mask)(struct device *dev, u64 mask); | ||
61 | int is_phys; | 62 | int is_phys; |
62 | }; | 63 | }; |
63 | 64 | ||
@@ -98,11 +99,6 @@ static inline int is_device_dma_capable(struct device *dev) | |||
98 | return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; | 99 | return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; |
99 | } | 100 | } |
100 | 101 | ||
101 | static inline int is_buffer_dma_capable(u64 mask, dma_addr_t addr, size_t size) | ||
102 | { | ||
103 | return addr + size <= mask; | ||
104 | } | ||
105 | |||
106 | #ifdef CONFIG_HAS_DMA | 102 | #ifdef CONFIG_HAS_DMA |
107 | #include <asm/dma-mapping.h> | 103 | #include <asm/dma-mapping.h> |
108 | #else | 104 | #else |
diff --git a/include/linux/dmi.h b/include/linux/dmi.h index bb5489c82c99..a8a3e1ac281d 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h | |||
@@ -43,7 +43,7 @@ extern const char * dmi_get_system_info(int field); | |||
43 | extern const struct dmi_device * dmi_find_device(int type, const char *name, | 43 | extern const struct dmi_device * dmi_find_device(int type, const char *name, |
44 | const struct dmi_device *from); | 44 | const struct dmi_device *from); |
45 | extern void dmi_scan_machine(void); | 45 | extern void dmi_scan_machine(void); |
46 | extern int dmi_get_year(int field); | 46 | extern bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp); |
47 | extern int dmi_name_in_vendors(const char *str); | 47 | extern int dmi_name_in_vendors(const char *str); |
48 | extern int dmi_name_in_serial(const char *str); | 48 | extern int dmi_name_in_serial(const char *str); |
49 | extern int dmi_available; | 49 | extern int dmi_available; |
@@ -58,7 +58,16 @@ static inline const char * dmi_get_system_info(int field) { return NULL; } | |||
58 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, | 58 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, |
59 | const struct dmi_device *from) { return NULL; } | 59 | const struct dmi_device *from) { return NULL; } |
60 | static inline void dmi_scan_machine(void) { return; } | 60 | static inline void dmi_scan_machine(void) { return; } |
61 | static inline int dmi_get_year(int year) { return 0; } | 61 | static inline bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp) |
62 | { | ||
63 | if (yearp) | ||
64 | *yearp = 0; | ||
65 | if (monthp) | ||
66 | *monthp = 0; | ||
67 | if (dayp) | ||
68 | *dayp = 0; | ||
69 | return false; | ||
70 | } | ||
62 | static inline int dmi_name_in_vendors(const char *s) { return 0; } | 71 | static inline int dmi_name_in_vendors(const char *s) { return 0; } |
63 | static inline int dmi_name_in_serial(const char *s) { return 0; } | 72 | static inline int dmi_name_in_serial(const char *s) { return 0; } |
64 | #define dmi_available 0 | 73 | #define dmi_available 0 |
diff --git a/include/linux/dtlk.h b/include/linux/dtlk.h index 2896d90118a9..22a7b9a5f5d1 100644 --- a/include/linux/dtlk.h +++ b/include/linux/dtlk.h | |||
@@ -1,22 +1,3 @@ | |||
1 | #if 0 | ||
2 | |||
3 | #define TRACE_TXT(text) \ | ||
4 | { \ | ||
5 | if(dtlk_trace) \ | ||
6 | { \ | ||
7 | console_print(text); \ | ||
8 | console_print("\n"); \ | ||
9 | } \ | ||
10 | } | ||
11 | |||
12 | #define TRACE_CHR(chr) \ | ||
13 | { \ | ||
14 | if(dtlk_trace) \ | ||
15 | console_print(chr); \ | ||
16 | } \ | ||
17 | |||
18 | #endif | ||
19 | |||
20 | #define DTLK_MINOR 0 | 1 | #define DTLK_MINOR 0 |
21 | #define DTLK_IO_EXTENT 0x02 | 2 | #define DTLK_IO_EXTENT 0x02 |
22 | 3 | ||
diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index fef943738a24..f078f3ac82d4 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h | |||
@@ -151,5 +151,7 @@ struct dmx_stc { | |||
151 | #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) | 151 | #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) |
152 | #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) | 152 | #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) |
153 | #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) | 153 | #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) |
154 | #define DMX_ADD_PID _IOW('o', 51, __u16) | ||
155 | #define DMX_REMOVE_PID _IOW('o', 52, __u16) | ||
154 | 156 | ||
155 | #endif /*_DVBDMX_H_*/ | 157 | #endif /*_DVBDMX_H_*/ |
diff --git a/include/linux/enclosure.h b/include/linux/enclosure.h index 4332442b1b57..90d1c2184112 100644 --- a/include/linux/enclosure.h +++ b/include/linux/enclosure.h | |||
@@ -122,8 +122,9 @@ enclosure_component_register(struct enclosure_device *, unsigned int, | |||
122 | enum enclosure_component_type, const char *); | 122 | enum enclosure_component_type, const char *); |
123 | int enclosure_add_device(struct enclosure_device *enclosure, int component, | 123 | int enclosure_add_device(struct enclosure_device *enclosure, int component, |
124 | struct device *dev); | 124 | struct device *dev); |
125 | int enclosure_remove_device(struct enclosure_device *enclosure, int component); | 125 | int enclosure_remove_device(struct enclosure_device *, struct device *); |
126 | struct enclosure_device *enclosure_find(struct device *dev); | 126 | struct enclosure_device *enclosure_find(struct device *dev, |
127 | struct enclosure_device *start); | ||
127 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), | 128 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), |
128 | void *data); | 129 | void *data); |
129 | 130 | ||
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 9b660bd2e2b3..15e4eb713694 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -362,12 +362,25 @@ struct ethtool_rxnfc { | |||
362 | __u32 rule_locs[0]; | 362 | __u32 rule_locs[0]; |
363 | }; | 363 | }; |
364 | 364 | ||
365 | #define ETHTOOL_FLASH_MAX_FILENAME 128 | ||
366 | enum ethtool_flash_op_type { | ||
367 | ETHTOOL_FLASH_ALL_REGIONS = 0, | ||
368 | }; | ||
369 | |||
370 | /* for passing firmware flashing related parameters */ | ||
371 | struct ethtool_flash { | ||
372 | __u32 cmd; | ||
373 | __u32 region; | ||
374 | char data[ETHTOOL_FLASH_MAX_FILENAME]; | ||
375 | }; | ||
376 | |||
365 | #ifdef __KERNEL__ | 377 | #ifdef __KERNEL__ |
366 | 378 | ||
367 | struct net_device; | 379 | struct net_device; |
368 | 380 | ||
369 | /* Some generic methods drivers may use in their ethtool_ops */ | 381 | /* Some generic methods drivers may use in their ethtool_ops */ |
370 | u32 ethtool_op_get_link(struct net_device *dev); | 382 | u32 ethtool_op_get_link(struct net_device *dev); |
383 | u32 ethtool_op_get_rx_csum(struct net_device *dev); | ||
371 | u32 ethtool_op_get_tx_csum(struct net_device *dev); | 384 | u32 ethtool_op_get_tx_csum(struct net_device *dev); |
372 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); | 385 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); |
373 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); | 386 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); |
@@ -488,6 +501,7 @@ struct ethtool_ops { | |||
488 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ | 501 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ |
489 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); | 502 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); |
490 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); | 503 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); |
504 | int (*flash_device)(struct net_device *, struct ethtool_flash *); | ||
491 | }; | 505 | }; |
492 | #endif /* __KERNEL__ */ | 506 | #endif /* __KERNEL__ */ |
493 | 507 | ||
@@ -544,6 +558,7 @@ struct ethtool_ops { | |||
544 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ | 558 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ |
545 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ | 559 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ |
546 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ | 560 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ |
561 | #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ | ||
547 | 562 | ||
548 | /* compatibility with older code */ | 563 | /* compatibility with older code */ |
549 | #define SPARC_ETH_GSET ETHTOOL_GSET | 564 | #define SPARC_ETH_GSET ETHTOOL_GSET |
diff --git a/include/linux/fips.h b/include/linux/fips.h new file mode 100644 index 000000000000..f8fb07b0b6b8 --- /dev/null +++ b/include/linux/fips.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _FIPS_H | ||
2 | #define _FIPS_H | ||
3 | |||
4 | #ifdef CONFIG_CRYPTO_FIPS | ||
5 | extern int fips_enabled; | ||
6 | #else | ||
7 | #define fips_enabled 0 | ||
8 | #endif | ||
9 | |||
10 | #endif | ||
diff --git a/include/linux/flex_array.h b/include/linux/flex_array.h index 23c1ec79a31b..45ff18491514 100644 --- a/include/linux/flex_array.h +++ b/include/linux/flex_array.h | |||
@@ -21,7 +21,7 @@ struct flex_array { | |||
21 | struct { | 21 | struct { |
22 | int element_size; | 22 | int element_size; |
23 | int total_nr_elements; | 23 | int total_nr_elements; |
24 | struct flex_array_part *parts[0]; | 24 | struct flex_array_part *parts[]; |
25 | }; | 25 | }; |
26 | /* | 26 | /* |
27 | * This little trick makes sure that | 27 | * This little trick makes sure that |
@@ -36,12 +36,14 @@ struct flex_array { | |||
36 | .total_nr_elements = (total), \ | 36 | .total_nr_elements = (total), \ |
37 | } } } | 37 | } } } |
38 | 38 | ||
39 | struct flex_array *flex_array_alloc(int element_size, int total, gfp_t flags); | 39 | struct flex_array *flex_array_alloc(int element_size, unsigned int total, |
40 | int flex_array_prealloc(struct flex_array *fa, int start, int end, gfp_t flags); | 40 | gfp_t flags); |
41 | int flex_array_prealloc(struct flex_array *fa, unsigned int start, | ||
42 | unsigned int end, gfp_t flags); | ||
41 | void flex_array_free(struct flex_array *fa); | 43 | void flex_array_free(struct flex_array *fa); |
42 | void flex_array_free_parts(struct flex_array *fa); | 44 | void flex_array_free_parts(struct flex_array *fa); |
43 | int flex_array_put(struct flex_array *fa, int element_nr, void *src, | 45 | int flex_array_put(struct flex_array *fa, unsigned int element_nr, void *src, |
44 | gfp_t flags); | 46 | gfp_t flags); |
45 | void *flex_array_get(struct flex_array *fa, int element_nr); | 47 | void *flex_array_get(struct flex_array *fa, unsigned int element_nr); |
46 | 48 | ||
47 | #endif /* _FLEX_ARRAY_H */ | 49 | #endif /* _FLEX_ARRAY_H */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index a36ffa5a77a4..b21cf6b9c80b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -161,8 +161,8 @@ struct inodes_stat_t { | |||
161 | * These aren't really reads or writes, they pass down information about | 161 | * These aren't really reads or writes, they pass down information about |
162 | * parts of device that are now unused by the file system. | 162 | * parts of device that are now unused by the file system. |
163 | */ | 163 | */ |
164 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) | 164 | #define DISCARD_NOBARRIER (WRITE | (1 << BIO_RW_DISCARD)) |
165 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) | 165 | #define DISCARD_BARRIER (DISCARD_NOBARRIER | (1 << BIO_RW_BARRIER)) |
166 | 166 | ||
167 | #define SEL_IN 1 | 167 | #define SEL_IN 1 |
168 | #define SEL_OUT 2 | 168 | #define SEL_OUT 2 |
@@ -715,7 +715,7 @@ struct posix_acl; | |||
715 | 715 | ||
716 | struct inode { | 716 | struct inode { |
717 | struct hlist_node i_hash; | 717 | struct hlist_node i_hash; |
718 | struct list_head i_list; | 718 | struct list_head i_list; /* backing dev IO list */ |
719 | struct list_head i_sb_list; | 719 | struct list_head i_sb_list; |
720 | struct list_head i_dentry; | 720 | struct list_head i_dentry; |
721 | unsigned long i_ino; | 721 | unsigned long i_ino; |
@@ -1336,9 +1336,6 @@ struct super_block { | |||
1336 | struct xattr_handler **s_xattr; | 1336 | struct xattr_handler **s_xattr; |
1337 | 1337 | ||
1338 | struct list_head s_inodes; /* all inodes */ | 1338 | struct list_head s_inodes; /* all inodes */ |
1339 | struct list_head s_dirty; /* dirty inodes */ | ||
1340 | struct list_head s_io; /* parked for writeback */ | ||
1341 | struct list_head s_more_io; /* parked for more writeback */ | ||
1342 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ | 1339 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ |
1343 | struct list_head s_files; | 1340 | struct list_head s_files; |
1344 | /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */ | 1341 | /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */ |
@@ -1458,11 +1455,6 @@ int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags); | |||
1458 | #define DT_SOCK 12 | 1455 | #define DT_SOCK 12 |
1459 | #define DT_WHT 14 | 1456 | #define DT_WHT 14 |
1460 | 1457 | ||
1461 | #define OSYNC_METADATA (1<<0) | ||
1462 | #define OSYNC_DATA (1<<1) | ||
1463 | #define OSYNC_INODE (1<<2) | ||
1464 | int generic_osync_inode(struct inode *, struct address_space *, int); | ||
1465 | |||
1466 | /* | 1458 | /* |
1467 | * This is the "filldir" function type, used by readdir() to let | 1459 | * This is the "filldir" function type, used by readdir() to let |
1468 | * the kernel specify what kind of dirent layout it wants to have. | 1460 | * the kernel specify what kind of dirent layout it wants to have. |
@@ -1528,6 +1520,7 @@ struct inode_operations { | |||
1528 | void (*put_link) (struct dentry *, struct nameidata *, void *); | 1520 | void (*put_link) (struct dentry *, struct nameidata *, void *); |
1529 | void (*truncate) (struct inode *); | 1521 | void (*truncate) (struct inode *); |
1530 | int (*permission) (struct inode *, int); | 1522 | int (*permission) (struct inode *, int); |
1523 | int (*check_acl)(struct inode *, int); | ||
1531 | int (*setattr) (struct dentry *, struct iattr *); | 1524 | int (*setattr) (struct dentry *, struct iattr *); |
1532 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); | 1525 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); |
1533 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 1526 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
@@ -1788,6 +1781,7 @@ extern int get_sb_pseudo(struct file_system_type *, char *, | |||
1788 | struct vfsmount *mnt); | 1781 | struct vfsmount *mnt); |
1789 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); | 1782 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); |
1790 | int __put_super_and_need_restart(struct super_block *sb); | 1783 | int __put_super_and_need_restart(struct super_block *sb); |
1784 | void put_super(struct super_block *sb); | ||
1791 | 1785 | ||
1792 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ | 1786 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ |
1793 | #define fops_get(fops) \ | 1787 | #define fops_get(fops) \ |
@@ -1998,12 +1992,25 @@ extern void bd_release_from_disk(struct block_device *, struct gendisk *); | |||
1998 | #define CHRDEV_MAJOR_HASH_SIZE 255 | 1992 | #define CHRDEV_MAJOR_HASH_SIZE 255 |
1999 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); | 1993 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); |
2000 | extern int register_chrdev_region(dev_t, unsigned, const char *); | 1994 | extern int register_chrdev_region(dev_t, unsigned, const char *); |
2001 | extern int register_chrdev(unsigned int, const char *, | 1995 | extern int __register_chrdev(unsigned int major, unsigned int baseminor, |
2002 | const struct file_operations *); | 1996 | unsigned int count, const char *name, |
2003 | extern void unregister_chrdev(unsigned int, const char *); | 1997 | const struct file_operations *fops); |
1998 | extern void __unregister_chrdev(unsigned int major, unsigned int baseminor, | ||
1999 | unsigned int count, const char *name); | ||
2004 | extern void unregister_chrdev_region(dev_t, unsigned); | 2000 | extern void unregister_chrdev_region(dev_t, unsigned); |
2005 | extern void chrdev_show(struct seq_file *,off_t); | 2001 | extern void chrdev_show(struct seq_file *,off_t); |
2006 | 2002 | ||
2003 | static inline int register_chrdev(unsigned int major, const char *name, | ||
2004 | const struct file_operations *fops) | ||
2005 | { | ||
2006 | return __register_chrdev(major, 0, 256, name, fops); | ||
2007 | } | ||
2008 | |||
2009 | static inline void unregister_chrdev(unsigned int major, const char *name) | ||
2010 | { | ||
2011 | __unregister_chrdev(major, 0, 256, name); | ||
2012 | } | ||
2013 | |||
2007 | /* fs/block_dev.c */ | 2014 | /* fs/block_dev.c */ |
2008 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ | 2015 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ |
2009 | #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */ | 2016 | #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */ |
@@ -2070,12 +2077,12 @@ static inline void invalidate_remote_inode(struct inode *inode) | |||
2070 | extern int invalidate_inode_pages2(struct address_space *mapping); | 2077 | extern int invalidate_inode_pages2(struct address_space *mapping); |
2071 | extern int invalidate_inode_pages2_range(struct address_space *mapping, | 2078 | extern int invalidate_inode_pages2_range(struct address_space *mapping, |
2072 | pgoff_t start, pgoff_t end); | 2079 | pgoff_t start, pgoff_t end); |
2073 | extern void generic_sync_sb_inodes(struct super_block *sb, | ||
2074 | struct writeback_control *wbc); | ||
2075 | extern int write_inode_now(struct inode *, int); | 2080 | extern int write_inode_now(struct inode *, int); |
2076 | extern int filemap_fdatawrite(struct address_space *); | 2081 | extern int filemap_fdatawrite(struct address_space *); |
2077 | extern int filemap_flush(struct address_space *); | 2082 | extern int filemap_flush(struct address_space *); |
2078 | extern int filemap_fdatawait(struct address_space *); | 2083 | extern int filemap_fdatawait(struct address_space *); |
2084 | extern int filemap_fdatawait_range(struct address_space *, loff_t lstart, | ||
2085 | loff_t lend); | ||
2079 | extern int filemap_write_and_wait(struct address_space *mapping); | 2086 | extern int filemap_write_and_wait(struct address_space *mapping); |
2080 | extern int filemap_write_and_wait_range(struct address_space *mapping, | 2087 | extern int filemap_write_and_wait_range(struct address_space *mapping, |
2081 | loff_t lstart, loff_t lend); | 2088 | loff_t lstart, loff_t lend); |
@@ -2086,7 +2093,10 @@ extern int __filemap_fdatawrite_range(struct address_space *mapping, | |||
2086 | extern int filemap_fdatawrite_range(struct address_space *mapping, | 2093 | extern int filemap_fdatawrite_range(struct address_space *mapping, |
2087 | loff_t start, loff_t end); | 2094 | loff_t start, loff_t end); |
2088 | 2095 | ||
2096 | extern int vfs_fsync_range(struct file *file, struct dentry *dentry, | ||
2097 | loff_t start, loff_t end, int datasync); | ||
2089 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 2098 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); |
2099 | extern int generic_write_sync(struct file *file, loff_t pos, loff_t count); | ||
2090 | extern void sync_supers(void); | 2100 | extern void sync_supers(void); |
2091 | extern void emergency_sync(void); | 2101 | extern void emergency_sync(void); |
2092 | extern void emergency_remount(void); | 2102 | extern void emergency_remount(void); |
@@ -2123,7 +2133,7 @@ extern struct file *do_filp_open(int dfd, const char *pathname, | |||
2123 | int open_flag, int mode, int acc_mode); | 2133 | int open_flag, int mode, int acc_mode); |
2124 | extern int may_open(struct path *, int, int); | 2134 | extern int may_open(struct path *, int, int); |
2125 | 2135 | ||
2126 | extern int kernel_read(struct file *, unsigned long, char *, unsigned long); | 2136 | extern int kernel_read(struct file *, loff_t, char *, unsigned long); |
2127 | extern struct file * open_exec(const char *); | 2137 | extern struct file * open_exec(const char *); |
2128 | 2138 | ||
2129 | /* fs/dcache.c -- generic fs support functions */ | 2139 | /* fs/dcache.c -- generic fs support functions */ |
@@ -2137,7 +2147,7 @@ extern loff_t default_llseek(struct file *file, loff_t offset, int origin); | |||
2137 | 2147 | ||
2138 | extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin); | 2148 | extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin); |
2139 | 2149 | ||
2140 | extern struct inode * inode_init_always(struct super_block *, struct inode *); | 2150 | extern int inode_init_always(struct super_block *, struct inode *); |
2141 | extern void inode_init_once(struct inode *); | 2151 | extern void inode_init_once(struct inode *); |
2142 | extern void inode_add_to_lists(struct super_block *, struct inode *); | 2152 | extern void inode_add_to_lists(struct super_block *, struct inode *); |
2143 | extern void iput(struct inode *); | 2153 | extern void iput(struct inode *); |
@@ -2164,6 +2174,7 @@ extern void __iget(struct inode * inode); | |||
2164 | extern void iget_failed(struct inode *); | 2174 | extern void iget_failed(struct inode *); |
2165 | extern void clear_inode(struct inode *); | 2175 | extern void clear_inode(struct inode *); |
2166 | extern void destroy_inode(struct inode *); | 2176 | extern void destroy_inode(struct inode *); |
2177 | extern void __destroy_inode(struct inode *); | ||
2167 | extern struct inode *new_inode(struct super_block *); | 2178 | extern struct inode *new_inode(struct super_block *); |
2168 | extern int should_remove_suid(struct dentry *); | 2179 | extern int should_remove_suid(struct dentry *); |
2169 | extern int file_remove_suid(struct file *); | 2180 | extern int file_remove_suid(struct file *); |
@@ -2185,16 +2196,15 @@ extern int bdev_read_only(struct block_device *); | |||
2185 | extern int set_blocksize(struct block_device *, int); | 2196 | extern int set_blocksize(struct block_device *, int); |
2186 | extern int sb_set_blocksize(struct super_block *, int); | 2197 | extern int sb_set_blocksize(struct super_block *, int); |
2187 | extern int sb_min_blocksize(struct super_block *, int); | 2198 | extern int sb_min_blocksize(struct super_block *, int); |
2188 | extern int sb_has_dirty_inodes(struct super_block *); | ||
2189 | 2199 | ||
2190 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); | 2200 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); |
2191 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); | 2201 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); |
2192 | extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); | 2202 | extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); |
2193 | int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); | 2203 | int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); |
2194 | extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); | 2204 | extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); |
2205 | extern ssize_t __generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, | ||
2206 | loff_t *); | ||
2195 | extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); | 2207 | extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); |
2196 | extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *, | ||
2197 | unsigned long, loff_t); | ||
2198 | extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, | 2208 | extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, |
2199 | unsigned long *, loff_t, loff_t *, size_t, size_t); | 2209 | unsigned long *, loff_t, loff_t *, size_t, size_t); |
2200 | extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, | 2210 | extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, |
@@ -2204,6 +2214,10 @@ extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t l | |||
2204 | extern int generic_segment_checks(const struct iovec *iov, | 2214 | extern int generic_segment_checks(const struct iovec *iov, |
2205 | unsigned long *nr_segs, size_t *count, int access_flags); | 2215 | unsigned long *nr_segs, size_t *count, int access_flags); |
2206 | 2216 | ||
2217 | /* fs/block_dev.c */ | ||
2218 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, | ||
2219 | unsigned long nr_segs, loff_t pos); | ||
2220 | |||
2207 | /* fs/splice.c */ | 2221 | /* fs/splice.c */ |
2208 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, | 2222 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, |
2209 | struct pipe_inode_info *, size_t, unsigned int); | 2223 | struct pipe_inode_info *, size_t, unsigned int); |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 5c093ffc655b..23f7179bf74e 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -89,18 +89,26 @@ enum print_line_t { | |||
89 | TRACE_TYPE_NO_CONSUME = 3 /* Handled but ask to not consume */ | 89 | TRACE_TYPE_NO_CONSUME = 3 /* Handled but ask to not consume */ |
90 | }; | 90 | }; |
91 | 91 | ||
92 | 92 | void tracing_generic_entry_update(struct trace_entry *entry, | |
93 | unsigned long flags, | ||
94 | int pc); | ||
93 | struct ring_buffer_event * | 95 | struct ring_buffer_event * |
94 | trace_current_buffer_lock_reserve(int type, unsigned long len, | 96 | trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer, |
97 | int type, unsigned long len, | ||
95 | unsigned long flags, int pc); | 98 | unsigned long flags, int pc); |
96 | void trace_current_buffer_unlock_commit(struct ring_buffer_event *event, | 99 | void trace_current_buffer_unlock_commit(struct ring_buffer *buffer, |
100 | struct ring_buffer_event *event, | ||
97 | unsigned long flags, int pc); | 101 | unsigned long flags, int pc); |
98 | void trace_nowake_buffer_unlock_commit(struct ring_buffer_event *event, | 102 | void trace_nowake_buffer_unlock_commit(struct ring_buffer *buffer, |
103 | struct ring_buffer_event *event, | ||
99 | unsigned long flags, int pc); | 104 | unsigned long flags, int pc); |
100 | void trace_current_buffer_discard_commit(struct ring_buffer_event *event); | 105 | void trace_current_buffer_discard_commit(struct ring_buffer *buffer, |
106 | struct ring_buffer_event *event); | ||
101 | 107 | ||
102 | void tracing_record_cmdline(struct task_struct *tsk); | 108 | void tracing_record_cmdline(struct task_struct *tsk); |
103 | 109 | ||
110 | struct event_filter; | ||
111 | |||
104 | struct ftrace_event_call { | 112 | struct ftrace_event_call { |
105 | struct list_head list; | 113 | struct list_head list; |
106 | char *name; | 114 | char *name; |
@@ -108,36 +116,46 @@ struct ftrace_event_call { | |||
108 | struct dentry *dir; | 116 | struct dentry *dir; |
109 | struct trace_event *event; | 117 | struct trace_event *event; |
110 | int enabled; | 118 | int enabled; |
111 | int (*regfunc)(void); | 119 | int (*regfunc)(void *); |
112 | void (*unregfunc)(void); | 120 | void (*unregfunc)(void *); |
113 | int id; | 121 | int id; |
114 | int (*raw_init)(void); | 122 | int (*raw_init)(void); |
115 | int (*show_format)(struct trace_seq *s); | 123 | int (*show_format)(struct ftrace_event_call *call, |
116 | int (*define_fields)(void); | 124 | struct trace_seq *s); |
125 | int (*define_fields)(struct ftrace_event_call *); | ||
117 | struct list_head fields; | 126 | struct list_head fields; |
118 | int filter_active; | 127 | int filter_active; |
119 | void *filter; | 128 | struct event_filter *filter; |
120 | void *mod; | 129 | void *mod; |
130 | void *data; | ||
121 | 131 | ||
122 | #ifdef CONFIG_EVENT_PROFILE | 132 | atomic_t profile_count; |
123 | atomic_t profile_count; | 133 | int (*profile_enable)(struct ftrace_event_call *); |
124 | int (*profile_enable)(struct ftrace_event_call *); | 134 | void (*profile_disable)(struct ftrace_event_call *); |
125 | void (*profile_disable)(struct ftrace_event_call *); | ||
126 | #endif | ||
127 | }; | 135 | }; |
128 | 136 | ||
129 | #define MAX_FILTER_PRED 32 | 137 | #define MAX_FILTER_PRED 32 |
130 | #define MAX_FILTER_STR_VAL 128 | 138 | #define MAX_FILTER_STR_VAL 128 |
131 | 139 | ||
132 | extern int init_preds(struct ftrace_event_call *call); | ||
133 | extern void destroy_preds(struct ftrace_event_call *call); | 140 | extern void destroy_preds(struct ftrace_event_call *call); |
134 | extern int filter_match_preds(struct ftrace_event_call *call, void *rec); | 141 | extern int filter_match_preds(struct ftrace_event_call *call, void *rec); |
135 | extern int filter_current_check_discard(struct ftrace_event_call *call, | 142 | extern int filter_current_check_discard(struct ring_buffer *buffer, |
143 | struct ftrace_event_call *call, | ||
136 | void *rec, | 144 | void *rec, |
137 | struct ring_buffer_event *event); | 145 | struct ring_buffer_event *event); |
138 | 146 | ||
139 | extern int trace_define_field(struct ftrace_event_call *call, char *type, | 147 | enum { |
140 | char *name, int offset, int size, int is_signed); | 148 | FILTER_OTHER = 0, |
149 | FILTER_STATIC_STRING, | ||
150 | FILTER_DYN_STRING, | ||
151 | FILTER_PTR_STRING, | ||
152 | }; | ||
153 | |||
154 | extern int trace_define_field(struct ftrace_event_call *call, | ||
155 | const char *type, const char *name, | ||
156 | int offset, int size, int is_signed, | ||
157 | int filter_type); | ||
158 | extern int trace_define_common_fields(struct ftrace_event_call *call); | ||
141 | 159 | ||
142 | #define is_signed_type(type) (((type)(-1)) < 0) | 160 | #define is_signed_type(type) (((type)(-1)) < 0) |
143 | 161 | ||
@@ -162,11 +180,4 @@ do { \ | |||
162 | __trace_printk(ip, fmt, ##args); \ | 180 | __trace_printk(ip, fmt, ##args); \ |
163 | } while (0) | 181 | } while (0) |
164 | 182 | ||
165 | #define __common_field(type, item, is_signed) \ | ||
166 | ret = trace_define_field(event_call, #type, "common_" #item, \ | ||
167 | offsetof(typeof(field.ent), item), \ | ||
168 | sizeof(field.ent.item), is_signed); \ | ||
169 | if (ret) \ | ||
170 | return ret; | ||
171 | |||
172 | #endif /* _LINUX_FTRACE_EVENT_H */ | 183 | #endif /* _LINUX_FTRACE_EVENT_H */ |
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h index 0ffa41df0ee8..710e901085d0 100644 --- a/include/linux/gen_stats.h +++ b/include/linux/gen_stats.h | |||
@@ -22,6 +22,11 @@ struct gnet_stats_basic | |||
22 | { | 22 | { |
23 | __u64 bytes; | 23 | __u64 bytes; |
24 | __u32 packets; | 24 | __u32 packets; |
25 | }; | ||
26 | struct gnet_stats_basic_packed | ||
27 | { | ||
28 | __u64 bytes; | ||
29 | __u32 packets; | ||
25 | } __attribute__ ((packed)); | 30 | } __attribute__ ((packed)); |
26 | 31 | ||
27 | /** | 32 | /** |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 45fc320a53c6..44263cb27121 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -98,7 +98,7 @@ struct hd_struct { | |||
98 | int make_it_fail; | 98 | int make_it_fail; |
99 | #endif | 99 | #endif |
100 | unsigned long stamp; | 100 | unsigned long stamp; |
101 | int in_flight; | 101 | int in_flight[2]; |
102 | #ifdef CONFIG_SMP | 102 | #ifdef CONFIG_SMP |
103 | struct disk_stats *dkstats; | 103 | struct disk_stats *dkstats; |
104 | #else | 104 | #else |
@@ -322,18 +322,23 @@ static inline void free_part_stats(struct hd_struct *part) | |||
322 | #define part_stat_sub(cpu, gendiskp, field, subnd) \ | 322 | #define part_stat_sub(cpu, gendiskp, field, subnd) \ |
323 | part_stat_add(cpu, gendiskp, field, -subnd) | 323 | part_stat_add(cpu, gendiskp, field, -subnd) |
324 | 324 | ||
325 | static inline void part_inc_in_flight(struct hd_struct *part) | 325 | static inline void part_inc_in_flight(struct hd_struct *part, int rw) |
326 | { | 326 | { |
327 | part->in_flight++; | 327 | part->in_flight[rw]++; |
328 | if (part->partno) | 328 | if (part->partno) |
329 | part_to_disk(part)->part0.in_flight++; | 329 | part_to_disk(part)->part0.in_flight[rw]++; |
330 | } | 330 | } |
331 | 331 | ||
332 | static inline void part_dec_in_flight(struct hd_struct *part) | 332 | static inline void part_dec_in_flight(struct hd_struct *part, int rw) |
333 | { | 333 | { |
334 | part->in_flight--; | 334 | part->in_flight[rw]--; |
335 | if (part->partno) | 335 | if (part->partno) |
336 | part_to_disk(part)->part0.in_flight--; | 336 | part_to_disk(part)->part0.in_flight[rw]--; |
337 | } | ||
338 | |||
339 | static inline int part_in_flight(struct hd_struct *part) | ||
340 | { | ||
341 | return part->in_flight[0] + part->in_flight[1]; | ||
337 | } | 342 | } |
338 | 343 | ||
339 | /* block/blk-core.c */ | 344 | /* block/blk-core.c */ |
@@ -546,6 +551,8 @@ extern ssize_t part_size_show(struct device *dev, | |||
546 | struct device_attribute *attr, char *buf); | 551 | struct device_attribute *attr, char *buf); |
547 | extern ssize_t part_stat_show(struct device *dev, | 552 | extern ssize_t part_stat_show(struct device *dev, |
548 | struct device_attribute *attr, char *buf); | 553 | struct device_attribute *attr, char *buf); |
554 | extern ssize_t part_inflight_show(struct device *dev, | ||
555 | struct device_attribute *attr, char *buf); | ||
549 | #ifdef CONFIG_FAIL_MAKE_REQUEST | 556 | #ifdef CONFIG_FAIL_MAKE_REQUEST |
550 | extern ssize_t part_fail_show(struct device *dev, | 557 | extern ssize_t part_fail_show(struct device *dev, |
551 | struct device_attribute *attr, char *buf); | 558 | struct device_attribute *attr, char *buf); |
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h index c56b4bce56d0..b80c88dedbbb 100644 --- a/include/linux/gfs2_ondisk.h +++ b/include/linux/gfs2_ondisk.h | |||
@@ -333,6 +333,28 @@ struct gfs2_leaf { | |||
333 | 333 | ||
334 | /* | 334 | /* |
335 | * Extended attribute header format | 335 | * Extended attribute header format |
336 | * | ||
337 | * This works in a similar way to dirents. There is a fixed size header | ||
338 | * followed by a variable length section made up of the name and the | ||
339 | * associated data. In the case of a "stuffed" entry, the value is | ||
340 | * inline directly after the name, the ea_num_ptrs entry will be | ||
341 | * zero in that case. For non-"stuffed" entries, there will be | ||
342 | * a set of pointers (aligned to 8 byte boundary) to the block(s) | ||
343 | * containing the value. | ||
344 | * | ||
345 | * The blocks containing the values and the blocks containing the | ||
346 | * extended attribute headers themselves all start with the common | ||
347 | * metadata header. Each inode, if it has extended attributes, will | ||
348 | * have either a single block containing the extended attribute headers | ||
349 | * or a single indirect block pointing to blocks containing the | ||
350 | * extended attribure headers. | ||
351 | * | ||
352 | * The maximim size of the data part of an extended attribute is 64k | ||
353 | * so the number of blocks required depends upon block size. Since the | ||
354 | * block size also determines the number of pointers in an indirect | ||
355 | * block, its a fairly complicated calculation to work out the maximum | ||
356 | * number of blocks that an inode may have relating to extended attributes. | ||
357 | * | ||
336 | */ | 358 | */ |
337 | 359 | ||
338 | #define GFS2_EA_MAX_NAME_LEN 255 | 360 | #define GFS2_EA_MAX_NAME_LEN 255 |
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 8246c697863d..6d527ee82b2b 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -64,6 +64,12 @@ | |||
64 | #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) | 64 | #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) |
65 | #define NMI_OFFSET (1UL << NMI_SHIFT) | 65 | #define NMI_OFFSET (1UL << NMI_SHIFT) |
66 | 66 | ||
67 | #ifndef PREEMPT_ACTIVE | ||
68 | #define PREEMPT_ACTIVE_BITS 1 | ||
69 | #define PREEMPT_ACTIVE_SHIFT (NMI_SHIFT + NMI_BITS) | ||
70 | #define PREEMPT_ACTIVE (__IRQ_MASK(PREEMPT_ACTIVE_BITS) << PREEMPT_ACTIVE_SHIFT) | ||
71 | #endif | ||
72 | |||
67 | #if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS)) | 73 | #if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS)) |
68 | #error PREEMPT_ACTIVE is too low! | 74 | #error PREEMPT_ACTIVE is too low! |
69 | #endif | 75 | #endif |
@@ -132,7 +138,7 @@ static inline void account_system_vtime(struct task_struct *tsk) | |||
132 | } | 138 | } |
133 | #endif | 139 | #endif |
134 | 140 | ||
135 | #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) | 141 | #if defined(CONFIG_NO_HZ) |
136 | extern void rcu_irq_enter(void); | 142 | extern void rcu_irq_enter(void); |
137 | extern void rcu_irq_exit(void); | 143 | extern void rcu_irq_exit(void); |
138 | extern void rcu_nmi_enter(void); | 144 | extern void rcu_nmi_enter(void); |
@@ -142,7 +148,7 @@ extern void rcu_nmi_exit(void); | |||
142 | # define rcu_irq_exit() do { } while (0) | 148 | # define rcu_irq_exit() do { } while (0) |
143 | # define rcu_nmi_enter() do { } while (0) | 149 | # define rcu_nmi_enter() do { } while (0) |
144 | # define rcu_nmi_exit() do { } while (0) | 150 | # define rcu_nmi_exit() do { } while (0) |
145 | #endif /* #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) */ | 151 | #endif /* #if defined(CONFIG_NO_HZ) */ |
146 | 152 | ||
147 | /* | 153 | /* |
148 | * It is safe to do non-atomic ops on ->hardirq_context, | 154 | * It is safe to do non-atomic ops on ->hardirq_context, |
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h index 6a6e701f1631..ee275c8b3df1 100644 --- a/include/linux/hdlc.h +++ b/include/linux/hdlc.h | |||
@@ -38,7 +38,7 @@ struct hdlc_proto { | |||
38 | int (*ioctl)(struct net_device *dev, struct ifreq *ifr); | 38 | int (*ioctl)(struct net_device *dev, struct ifreq *ifr); |
39 | __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); | 39 | __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); |
40 | int (*netif_rx)(struct sk_buff *skb); | 40 | int (*netif_rx)(struct sk_buff *skb); |
41 | int (*xmit)(struct sk_buff *skb, struct net_device *dev); | 41 | netdev_tx_t (*xmit)(struct sk_buff *skb, struct net_device *dev); |
42 | struct module *module; | 42 | struct module *module; |
43 | struct hdlc_proto *next; /* next protocol in the list */ | 43 | struct hdlc_proto *next; /* next protocol in the list */ |
44 | }; | 44 | }; |
@@ -51,7 +51,7 @@ typedef struct hdlc_device { | |||
51 | unsigned short encoding, unsigned short parity); | 51 | unsigned short encoding, unsigned short parity); |
52 | 52 | ||
53 | /* hardware driver must handle this instead of dev->hard_start_xmit */ | 53 | /* hardware driver must handle this instead of dev->hard_start_xmit */ |
54 | int (*xmit)(struct sk_buff *skb, struct net_device *dev); | 54 | netdev_tx_t (*xmit)(struct sk_buff *skb, struct net_device *dev); |
55 | 55 | ||
56 | /* Things below are for HDLC layer internal use only */ | 56 | /* Things below are for HDLC layer internal use only */ |
57 | const struct hdlc_proto *proto; | 57 | const struct hdlc_proto *proto; |
@@ -60,7 +60,7 @@ typedef struct hdlc_device { | |||
60 | spinlock_t state_lock; | 60 | spinlock_t state_lock; |
61 | void *state; | 61 | void *state; |
62 | void *priv; | 62 | void *priv; |
63 | }hdlc_device; | 63 | } hdlc_device; |
64 | 64 | ||
65 | 65 | ||
66 | 66 | ||
@@ -106,7 +106,7 @@ void hdlc_close(struct net_device *dev); | |||
106 | /* May be used by hardware driver */ | 106 | /* May be used by hardware driver */ |
107 | int hdlc_change_mtu(struct net_device *dev, int new_mtu); | 107 | int hdlc_change_mtu(struct net_device *dev, int new_mtu); |
108 | /* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */ | 108 | /* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */ |
109 | int hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); | 109 | netdev_tx_t hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); |
110 | 110 | ||
111 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, | 111 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, |
112 | size_t size); | 112 | size_t size); |
diff --git a/include/linux/hid-debug.h b/include/linux/hid-debug.h index 50d568ec178a..53744fa1c8b7 100644 --- a/include/linux/hid-debug.h +++ b/include/linux/hid-debug.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define __HID_DEBUG_H | 2 | #define __HID_DEBUG_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright (c) 2007 Jiri Kosina | 5 | * Copyright (c) 2007-2009 Jiri Kosina |
6 | */ | 6 | */ |
7 | 7 | ||
8 | /* | 8 | /* |
@@ -22,24 +22,44 @@ | |||
22 | * | 22 | * |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #ifdef CONFIG_HID_DEBUG | 25 | #define HID_DEBUG_BUFSIZE 512 |
26 | 26 | ||
27 | void hid_dump_input(struct hid_usage *, __s32); | 27 | #ifdef CONFIG_DEBUG_FS |
28 | void hid_dump_device(struct hid_device *); | 28 | |
29 | void hid_dump_field(struct hid_field *, int); | 29 | void hid_dump_input(struct hid_device *, struct hid_usage *, __s32); |
30 | void hid_resolv_usage(unsigned); | 30 | void hid_dump_device(struct hid_device *, struct seq_file *); |
31 | void hid_resolv_event(__u8, __u16); | 31 | void hid_dump_field(struct hid_field *, int, struct seq_file *); |
32 | char *hid_resolv_usage(unsigned, struct seq_file *); | ||
33 | void hid_debug_register(struct hid_device *, const char *); | ||
34 | void hid_debug_unregister(struct hid_device *); | ||
35 | void hid_debug_init(void); | ||
36 | void hid_debug_exit(void); | ||
37 | void hid_debug_event(struct hid_device *, char *); | ||
32 | 38 | ||
33 | #else | ||
34 | 39 | ||
35 | #define hid_dump_input(a,b) do { } while (0) | 40 | struct hid_debug_list { |
36 | #define hid_dump_device(c) do { } while (0) | 41 | char *hid_debug_buf; |
37 | #define hid_dump_field(a,b) do { } while (0) | 42 | int head; |
38 | #define hid_resolv_usage(a) do { } while (0) | 43 | int tail; |
39 | #define hid_resolv_event(a,b) do { } while (0) | 44 | struct fasync_struct *fasync; |
45 | struct hid_device *hdev; | ||
46 | struct list_head node; | ||
47 | struct mutex read_mutex; | ||
48 | }; | ||
40 | 49 | ||
41 | #endif /* CONFIG_HID_DEBUG */ | 50 | #else |
42 | 51 | ||
52 | #define hid_dump_input(a,b,c) do { } while (0) | ||
53 | #define hid_dump_device(a,b) do { } while (0) | ||
54 | #define hid_dump_field(a,b,c) do { } while (0) | ||
55 | #define hid_resolv_usage(a,b) do { } while (0) | ||
56 | #define hid_debug_register(a, b) do { } while (0) | ||
57 | #define hid_debug_unregister(a) do { } while (0) | ||
58 | #define hid_debug_init() do { } while (0) | ||
59 | #define hid_debug_exit() do { } while (0) | ||
60 | #define hid_debug_event(a,b) do { } while (0) | ||
61 | |||
62 | #endif | ||
43 | 63 | ||
44 | #endif | 64 | #endif |
45 | 65 | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index 53489fd4d700..a0ebdace7baa 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -500,6 +500,14 @@ struct hid_device { /* device report descriptor */ | |||
500 | 500 | ||
501 | /* handler for raw output data, used by hidraw */ | 501 | /* handler for raw output data, used by hidraw */ |
502 | int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); | 502 | int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); |
503 | |||
504 | /* debugging support via debugfs */ | ||
505 | unsigned short debug; | ||
506 | struct dentry *debug_dir; | ||
507 | struct dentry *debug_rdesc; | ||
508 | struct dentry *debug_events; | ||
509 | struct list_head debug_list; | ||
510 | wait_queue_head_t debug_wait; | ||
503 | }; | 511 | }; |
504 | 512 | ||
505 | static inline void *hid_get_drvdata(struct hid_device *hdev) | 513 | static inline void *hid_get_drvdata(struct hid_device *hdev) |
@@ -657,9 +665,7 @@ struct hid_ll_driver { | |||
657 | 665 | ||
658 | /* HID core API */ | 666 | /* HID core API */ |
659 | 667 | ||
660 | #ifdef CONFIG_HID_DEBUG | ||
661 | extern int hid_debug; | 668 | extern int hid_debug; |
662 | #endif | ||
663 | 669 | ||
664 | extern int hid_add_device(struct hid_device *); | 670 | extern int hid_add_device(struct hid_device *); |
665 | extern void hid_destroy_device(struct hid_device *); | 671 | extern void hid_destroy_device(struct hid_device *); |
@@ -815,21 +821,9 @@ int hid_pidff_init(struct hid_device *hid); | |||
815 | #define hid_pidff_init NULL | 821 | #define hid_pidff_init NULL |
816 | #endif | 822 | #endif |
817 | 823 | ||
818 | #ifdef CONFIG_HID_DEBUG | ||
819 | #define dbg_hid(format, arg...) if (hid_debug) \ | 824 | #define dbg_hid(format, arg...) if (hid_debug) \ |
820 | printk(KERN_DEBUG "%s: " format ,\ | 825 | printk(KERN_DEBUG "%s: " format ,\ |
821 | __FILE__ , ## arg) | 826 | __FILE__ , ## arg) |
822 | #define dbg_hid_line(format, arg...) if (hid_debug) \ | ||
823 | printk(format, ## arg) | ||
824 | #else | ||
825 | static inline int __attribute__((format(printf, 1, 2))) | ||
826 | dbg_hid(const char *fmt, ...) | ||
827 | { | ||
828 | return 0; | ||
829 | } | ||
830 | #define dbg_hid_line dbg_hid | ||
831 | #endif /* HID_DEBUG */ | ||
832 | |||
833 | #define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ | 827 | #define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ |
834 | __FILE__ , ## arg) | 828 | __FILE__ , ## arg) |
835 | #endif /* HID_FF */ | 829 | #endif /* HID_FF */ |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 2723513a5651..5cbc620bdfe0 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <asm/tlbflush.h> | 10 | #include <asm/tlbflush.h> |
11 | 11 | ||
12 | struct ctl_table; | 12 | struct ctl_table; |
13 | struct user_struct; | ||
13 | 14 | ||
14 | int PageHuge(struct page *page); | 15 | int PageHuge(struct page *page); |
15 | 16 | ||
@@ -146,7 +147,8 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) | |||
146 | 147 | ||
147 | extern const struct file_operations hugetlbfs_file_operations; | 148 | extern const struct file_operations hugetlbfs_file_operations; |
148 | extern struct vm_operations_struct hugetlb_vm_ops; | 149 | extern struct vm_operations_struct hugetlb_vm_ops; |
149 | struct file *hugetlb_file_setup(const char *name, size_t, int); | 150 | struct file *hugetlb_file_setup(const char *name, size_t size, int acct, |
151 | struct user_struct **user); | ||
150 | int hugetlb_get_quota(struct address_space *mapping, long delta); | 152 | int hugetlb_get_quota(struct address_space *mapping, long delta); |
151 | void hugetlb_put_quota(struct address_space *mapping, long delta); | 153 | void hugetlb_put_quota(struct address_space *mapping, long delta); |
152 | 154 | ||
@@ -168,7 +170,7 @@ static inline void set_file_hugepages(struct file *file) | |||
168 | 170 | ||
169 | #define is_file_hugepages(file) 0 | 171 | #define is_file_hugepages(file) 0 |
170 | #define set_file_hugepages(file) BUG() | 172 | #define set_file_hugepages(file) BUG() |
171 | #define hugetlb_file_setup(name,size,acctflag) ERR_PTR(-ENOSYS) | 173 | #define hugetlb_file_setup(name,size,acct,user) ERR_PTR(-ENOSYS) |
172 | 174 | ||
173 | #endif /* !CONFIG_HUGETLBFS */ | 175 | #endif /* !CONFIG_HUGETLBFS */ |
174 | 176 | ||
diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl4030.h index 0dc80ef24975..3fd21d7cb6bf 100644 --- a/include/linux/i2c/twl4030.h +++ b/include/linux/i2c/twl4030.h | |||
@@ -25,6 +25,9 @@ | |||
25 | #ifndef __TWL4030_H_ | 25 | #ifndef __TWL4030_H_ |
26 | #define __TWL4030_H_ | 26 | #define __TWL4030_H_ |
27 | 27 | ||
28 | #include <linux/types.h> | ||
29 | #include <linux/input/matrix_keypad.h> | ||
30 | |||
28 | /* | 31 | /* |
29 | * Using the twl4030 core we address registers using a pair | 32 | * Using the twl4030 core we address registers using a pair |
30 | * { module id, relative register offset } | 33 | * { module id, relative register offset } |
@@ -302,13 +305,17 @@ struct twl4030_madc_platform_data { | |||
302 | int irq_line; | 305 | int irq_line; |
303 | }; | 306 | }; |
304 | 307 | ||
308 | /* Boards have uniqe mappings of {col, row} --> keycode. | ||
309 | * Column and row are 4 bits, but range only from 0..7. | ||
310 | * a PERSISTENT_KEY is "always on" and never reported. | ||
311 | */ | ||
312 | #define PERSISTENT_KEY(c, r) KEY((c), (r), KEY_RESERVED) | ||
313 | |||
305 | struct twl4030_keypad_data { | 314 | struct twl4030_keypad_data { |
306 | int rows; | 315 | const struct matrix_keymap_data *keymap_data; |
307 | int cols; | 316 | unsigned rows; |
308 | int *keymap; | 317 | unsigned cols; |
309 | int irq; | 318 | bool rep; |
310 | unsigned int keymapsize; | ||
311 | unsigned int rep:1; | ||
312 | }; | 319 | }; |
313 | 320 | ||
314 | enum twl4030_usb_mode { | 321 | enum twl4030_usb_mode { |
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h index b6a85183c333..c0d8357917e2 100644 --- a/include/linux/icmpv6.h +++ b/include/linux/icmpv6.h | |||
@@ -171,8 +171,6 @@ struct icmp6_filter { | |||
171 | #ifdef __KERNEL__ | 171 | #ifdef __KERNEL__ |
172 | 172 | ||
173 | #include <linux/netdevice.h> | 173 | #include <linux/netdevice.h> |
174 | #include <linux/skbuff.h> | ||
175 | |||
176 | 174 | ||
177 | extern void icmpv6_send(struct sk_buff *skb, | 175 | extern void icmpv6_send(struct sk_buff *skb, |
178 | u8 type, u8 code, | 176 | u8 type, u8 code, |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index a9173d5434d1..52e15e079c61 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -115,7 +115,7 @@ | |||
115 | #define IEEE80211_MAX_SSID_LEN 32 | 115 | #define IEEE80211_MAX_SSID_LEN 32 |
116 | 116 | ||
117 | #define IEEE80211_MAX_MESH_ID_LEN 32 | 117 | #define IEEE80211_MAX_MESH_ID_LEN 32 |
118 | #define IEEE80211_MESH_CONFIG_LEN 19 | 118 | #define IEEE80211_MESH_CONFIG_LEN 24 |
119 | 119 | ||
120 | #define IEEE80211_QOS_CTL_LEN 2 | 120 | #define IEEE80211_QOS_CTL_LEN 2 |
121 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F | 121 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F |
@@ -802,6 +802,31 @@ struct ieee80211_ht_cap { | |||
802 | #define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 | 802 | #define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 |
803 | #define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C | 803 | #define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C |
804 | 804 | ||
805 | /* | ||
806 | * Maximum length of AMPDU that the STA can receive. | ||
807 | * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) | ||
808 | */ | ||
809 | enum ieee80211_max_ampdu_length_exp { | ||
810 | IEEE80211_HT_MAX_AMPDU_8K = 0, | ||
811 | IEEE80211_HT_MAX_AMPDU_16K = 1, | ||
812 | IEEE80211_HT_MAX_AMPDU_32K = 2, | ||
813 | IEEE80211_HT_MAX_AMPDU_64K = 3 | ||
814 | }; | ||
815 | |||
816 | #define IEEE80211_HT_MAX_AMPDU_FACTOR 13 | ||
817 | |||
818 | /* Minimum MPDU start spacing */ | ||
819 | enum ieee80211_min_mpdu_spacing { | ||
820 | IEEE80211_HT_MPDU_DENSITY_NONE = 0, /* No restriction */ | ||
821 | IEEE80211_HT_MPDU_DENSITY_0_25 = 1, /* 1/4 usec */ | ||
822 | IEEE80211_HT_MPDU_DENSITY_0_5 = 2, /* 1/2 usec */ | ||
823 | IEEE80211_HT_MPDU_DENSITY_1 = 3, /* 1 usec */ | ||
824 | IEEE80211_HT_MPDU_DENSITY_2 = 4, /* 2 usec */ | ||
825 | IEEE80211_HT_MPDU_DENSITY_4 = 5, /* 4 usec */ | ||
826 | IEEE80211_HT_MPDU_DENSITY_8 = 6, /* 8 usec */ | ||
827 | IEEE80211_HT_MPDU_DENSITY_16 = 7 /* 16 usec */ | ||
828 | }; | ||
829 | |||
805 | /** | 830 | /** |
806 | * struct ieee80211_ht_info - HT information | 831 | * struct ieee80211_ht_info - HT information |
807 | * | 832 | * |
@@ -1196,6 +1221,10 @@ enum ieee80211_sa_query_action { | |||
1196 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 | 1221 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 |
1197 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 | 1222 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 |
1198 | 1223 | ||
1224 | /* AKM suite selectors */ | ||
1225 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 | ||
1226 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 | ||
1227 | |||
1199 | #define WLAN_MAX_KEY_LEN 32 | 1228 | #define WLAN_MAX_KEY_LEN 32 |
1200 | 1229 | ||
1201 | /** | 1230 | /** |
diff --git a/include/linux/if_addr.h b/include/linux/if_addr.h index a60c821be44c..fd9740466757 100644 --- a/include/linux/if_addr.h +++ b/include/linux/if_addr.h | |||
@@ -41,6 +41,7 @@ enum | |||
41 | 41 | ||
42 | #define IFA_F_NODAD 0x02 | 42 | #define IFA_F_NODAD 0x02 |
43 | #define IFA_F_OPTIMISTIC 0x04 | 43 | #define IFA_F_OPTIMISTIC 0x04 |
44 | #define IFA_F_DADFAILED 0x08 | ||
44 | #define IFA_F_HOMEADDRESS 0x10 | 45 | #define IFA_F_HOMEADDRESS 0x10 |
45 | #define IFA_F_DEPRECATED 0x20 | 46 | #define IFA_F_DEPRECATED 0x20 |
46 | #define IFA_F_TENTATIVE 0x40 | 47 | #define IFA_F_TENTATIVE 0x40 |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index b554300ef8bf..282eb37e2dec 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
@@ -87,7 +87,6 @@ | |||
87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
89 | #define ARPHRD_IEEE802154 804 | 89 | #define ARPHRD_IEEE802154 804 |
90 | #define ARPHRD_IEEE802154_PHY 805 | ||
91 | 90 | ||
92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 91 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 92 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 70fdba2bbf71..580b6004d00e 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
@@ -139,10 +139,10 @@ extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); | |||
139 | /* | 139 | /* |
140 | * Display a 6 byte device address (MAC) in a readable format. | 140 | * Display a 6 byte device address (MAC) in a readable format. |
141 | */ | 141 | */ |
142 | extern char *print_mac(char *buf, const unsigned char *addr); | 142 | extern char *print_mac(char *buf, const unsigned char *addr) __deprecated; |
143 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" | 143 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" |
144 | #define MAC_BUF_SIZE 18 | 144 | #define MAC_BUF_SIZE 18 |
145 | #define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] __maybe_unused | 145 | #define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] |
146 | 146 | ||
147 | #endif | 147 | #endif |
148 | 148 | ||
diff --git a/include/linux/if_frad.h b/include/linux/if_frad.h index 673f2209453d..80b3a1056a5f 100644 --- a/include/linux/if_frad.h +++ b/include/linux/if_frad.h | |||
@@ -69,11 +69,6 @@ struct dlci_conf { | |||
69 | 69 | ||
70 | #define DLCI_VALID_FLAGS 0x000B | 70 | #define DLCI_VALID_FLAGS 0x000B |
71 | 71 | ||
72 | /* FRAD driver uses these to indicate what it did with packet */ | ||
73 | #define DLCI_RET_OK 0x00 | ||
74 | #define DLCI_RET_ERR 0x01 | ||
75 | #define DLCI_RET_DROP 0x02 | ||
76 | |||
77 | /* defines for the actual Frame Relay hardware */ | 72 | /* defines for the actual Frame Relay hardware */ |
78 | #define FRAD_GET_CONF (SIOCDEVPRIVATE) | 73 | #define FRAD_GET_CONF (SIOCDEVPRIVATE) |
79 | #define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) | 74 | #define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 915ba5789f0e..3f5fd523b49d 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
@@ -62,6 +62,7 @@ | |||
62 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ | 62 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ |
63 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ | 63 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ |
64 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ | 64 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ |
65 | #define TUN_F_UFO 0x10 /* I can handle UFO packets */ | ||
65 | 66 | ||
66 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ | 67 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ |
67 | #define TUN_PKT_STRIP 0x0001 | 68 | #define TUN_PKT_STRIP 0x0001 |
diff --git a/include/linux/init.h b/include/linux/init.h index 13b633ed695e..400adbb45414 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -103,8 +103,8 @@ | |||
103 | #define __INIT .section ".init.text","ax" | 103 | #define __INIT .section ".init.text","ax" |
104 | #define __FINIT .previous | 104 | #define __FINIT .previous |
105 | 105 | ||
106 | #define __INITDATA .section ".init.data","aw" | 106 | #define __INITDATA .section ".init.data","aw",%progbits |
107 | #define __INITRODATA .section ".init.rodata","a" | 107 | #define __INITRODATA .section ".init.rodata","a",%progbits |
108 | #define __FINITDATA .previous | 108 | #define __FINITDATA .previous |
109 | 109 | ||
110 | #define __DEVINIT .section ".devinit.text", "ax" | 110 | #define __DEVINIT .section ".devinit.text", "ax" |
@@ -305,9 +305,17 @@ void __init parse_early_options(char *cmdline); | |||
305 | #ifdef CONFIG_MODULES | 305 | #ifdef CONFIG_MODULES |
306 | #define __init_or_module | 306 | #define __init_or_module |
307 | #define __initdata_or_module | 307 | #define __initdata_or_module |
308 | #define __initconst_or_module | ||
309 | #define __INIT_OR_MODULE .text | ||
310 | #define __INITDATA_OR_MODULE .data | ||
311 | #define __INITRODATA_OR_MODULE .section ".rodata","a",%progbits | ||
308 | #else | 312 | #else |
309 | #define __init_or_module __init | 313 | #define __init_or_module __init |
310 | #define __initdata_or_module __initdata | 314 | #define __initdata_or_module __initdata |
315 | #define __initconst_or_module __initconst | ||
316 | #define __INIT_OR_MODULE __INIT | ||
317 | #define __INITDATA_OR_MODULE __INITDATA | ||
318 | #define __INITRODATA_OR_MODULE __INITRODATA | ||
311 | #endif /*CONFIG_MODULES*/ | 319 | #endif /*CONFIG_MODULES*/ |
312 | 320 | ||
313 | /* Functions marked as __devexit may be discarded at kernel link time, depending | 321 | /* Functions marked as __devexit may be discarded at kernel link time, depending |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 7fc01b13be43..9e7f2e8fc66e 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -94,6 +94,16 @@ extern struct group_info init_groups; | |||
94 | # define CAP_INIT_BSET CAP_INIT_EFF_SET | 94 | # define CAP_INIT_BSET CAP_INIT_EFF_SET |
95 | #endif | 95 | #endif |
96 | 96 | ||
97 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
98 | #define INIT_TASK_RCU_PREEMPT(tsk) \ | ||
99 | .rcu_read_lock_nesting = 0, \ | ||
100 | .rcu_read_unlock_special = 0, \ | ||
101 | .rcu_blocked_node = NULL, \ | ||
102 | .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), | ||
103 | #else | ||
104 | #define INIT_TASK_RCU_PREEMPT(tsk) | ||
105 | #endif | ||
106 | |||
97 | extern struct cred init_cred; | 107 | extern struct cred init_cred; |
98 | 108 | ||
99 | #ifdef CONFIG_PERF_COUNTERS | 109 | #ifdef CONFIG_PERF_COUNTERS |
@@ -173,6 +183,7 @@ extern struct cred init_cred; | |||
173 | INIT_LOCKDEP \ | 183 | INIT_LOCKDEP \ |
174 | INIT_FTRACE_GRAPH \ | 184 | INIT_FTRACE_GRAPH \ |
175 | INIT_TRACE_RECURSION \ | 185 | INIT_TRACE_RECURSION \ |
186 | INIT_TASK_RCU_PREEMPT(tsk) \ | ||
176 | } | 187 | } |
177 | 188 | ||
178 | 189 | ||
diff --git a/include/linux/input/eeti_ts.h b/include/linux/input/eeti_ts.h new file mode 100644 index 000000000000..f875b316249d --- /dev/null +++ b/include/linux/input/eeti_ts.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef LINUX_INPUT_EETI_TS_H | ||
2 | #define LINUX_INPUT_EETI_TS_H | ||
3 | |||
4 | struct eeti_ts_platform_data { | ||
5 | unsigned int irq_active_high; | ||
6 | }; | ||
7 | |||
8 | #endif /* LINUX_INPUT_EETI_TS_H */ | ||
9 | |||
diff --git a/include/linux/input/matrix_keypad.h b/include/linux/input/matrix_keypad.h index 7964516c6954..b3cd42d50e16 100644 --- a/include/linux/input/matrix_keypad.h +++ b/include/linux/input/matrix_keypad.h | |||
@@ -15,12 +15,13 @@ | |||
15 | #define KEY_COL(k) (((k) >> 16) & 0xff) | 15 | #define KEY_COL(k) (((k) >> 16) & 0xff) |
16 | #define KEY_VAL(k) ((k) & 0xffff) | 16 | #define KEY_VAL(k) ((k) & 0xffff) |
17 | 17 | ||
18 | #define MATRIX_SCAN_CODE(row, col, row_shift) (((row) << (row_shift)) + (col)) | ||
19 | |||
18 | /** | 20 | /** |
19 | * struct matrix_keymap_data - keymap for matrix keyboards | 21 | * struct matrix_keymap_data - keymap for matrix keyboards |
20 | * @keymap: pointer to array of uint32 values encoded with KEY() macro | 22 | * @keymap: pointer to array of uint32 values encoded with KEY() macro |
21 | * representing keymap | 23 | * representing keymap |
22 | * @keymap_size: number of entries (initialized) in this keymap | 24 | * @keymap_size: number of entries (initialized) in this keymap |
23 | * @max_keymap_size: maximum size of keymap supported by the device | ||
24 | * | 25 | * |
25 | * This structure is supposed to be used by platform code to supply | 26 | * This structure is supposed to be used by platform code to supply |
26 | * keymaps to drivers that implement matrix-like keypads/keyboards. | 27 | * keymaps to drivers that implement matrix-like keypads/keyboards. |
@@ -28,14 +29,13 @@ | |||
28 | struct matrix_keymap_data { | 29 | struct matrix_keymap_data { |
29 | const uint32_t *keymap; | 30 | const uint32_t *keymap; |
30 | unsigned int keymap_size; | 31 | unsigned int keymap_size; |
31 | unsigned int max_keymap_size; | ||
32 | }; | 32 | }; |
33 | 33 | ||
34 | /** | 34 | /** |
35 | * struct matrix_keypad_platform_data - platform-dependent keypad data | 35 | * struct matrix_keypad_platform_data - platform-dependent keypad data |
36 | * @keymap_data: pointer to &matrix_keymap_data | 36 | * @keymap_data: pointer to &matrix_keymap_data |
37 | * @row_gpios: array of gpio numbers reporesenting rows | 37 | * @row_gpios: pointer to array of gpio numbers representing rows |
38 | * @col_gpios: array of gpio numbers reporesenting colums | 38 | * @col_gpios: pointer to array of gpio numbers reporesenting colums |
39 | * @num_row_gpios: actual number of row gpios used by device | 39 | * @num_row_gpios: actual number of row gpios used by device |
40 | * @num_col_gpios: actual number of col gpios used by device | 40 | * @num_col_gpios: actual number of col gpios used by device |
41 | * @col_scan_delay_us: delay, measured in microseconds, that is | 41 | * @col_scan_delay_us: delay, measured in microseconds, that is |
@@ -48,8 +48,9 @@ struct matrix_keymap_data { | |||
48 | struct matrix_keypad_platform_data { | 48 | struct matrix_keypad_platform_data { |
49 | const struct matrix_keymap_data *keymap_data; | 49 | const struct matrix_keymap_data *keymap_data; |
50 | 50 | ||
51 | unsigned int row_gpios[MATRIX_MAX_ROWS]; | 51 | const unsigned int *row_gpios; |
52 | unsigned int col_gpios[MATRIX_MAX_COLS]; | 52 | const unsigned int *col_gpios; |
53 | |||
53 | unsigned int num_row_gpios; | 54 | unsigned int num_row_gpios; |
54 | unsigned int num_col_gpios; | 55 | unsigned int num_col_gpios; |
55 | 56 | ||
@@ -62,4 +63,36 @@ struct matrix_keypad_platform_data { | |||
62 | bool wakeup; | 63 | bool wakeup; |
63 | }; | 64 | }; |
64 | 65 | ||
66 | /** | ||
67 | * matrix_keypad_build_keymap - convert platform keymap into matrix keymap | ||
68 | * @keymap_data: keymap supplied by the platform code | ||
69 | * @row_shift: number of bits to shift row value by to advance to the next | ||
70 | * line in the keymap | ||
71 | * @keymap: expanded version of keymap that is suitable for use by | ||
72 | * matrix keyboad driver | ||
73 | * @keybit: pointer to bitmap of keys supported by input device | ||
74 | * | ||
75 | * This function converts platform keymap (encoded with KEY() macro) into | ||
76 | * an array of keycodes that is suitable for using in a standard matrix | ||
77 | * keyboard driver that uses row and col as indices. | ||
78 | */ | ||
79 | static inline void | ||
80 | matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data, | ||
81 | unsigned int row_shift, | ||
82 | unsigned short *keymap, unsigned long *keybit) | ||
83 | { | ||
84 | int i; | ||
85 | |||
86 | for (i = 0; i < keymap_data->keymap_size; i++) { | ||
87 | unsigned int key = keymap_data->keymap[i]; | ||
88 | unsigned int row = KEY_ROW(key); | ||
89 | unsigned int col = KEY_COL(key); | ||
90 | unsigned short code = KEY_VAL(key); | ||
91 | |||
92 | keymap[MATRIX_SCAN_CODE(row, col, row_shift)] = code; | ||
93 | __set_bit(code, keybit); | ||
94 | } | ||
95 | __clear_bit(KEY_RESERVED, keybit); | ||
96 | } | ||
97 | |||
65 | #endif /* _MATRIX_KEYPAD_H */ | 98 | #endif /* _MATRIX_KEYPAD_H */ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 35e7df1e9f30..8e9e151f811e 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -50,6 +50,9 @@ | |||
50 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is | 50 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is |
51 | * registered first in an shared interrupt is considered for | 51 | * registered first in an shared interrupt is considered for |
52 | * performance reasons) | 52 | * performance reasons) |
53 | * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished. | ||
54 | * Used by threaded interrupts which need to keep the | ||
55 | * irq line disabled until the threaded handler has been run. | ||
53 | */ | 56 | */ |
54 | #define IRQF_DISABLED 0x00000020 | 57 | #define IRQF_DISABLED 0x00000020 |
55 | #define IRQF_SAMPLE_RANDOM 0x00000040 | 58 | #define IRQF_SAMPLE_RANDOM 0x00000040 |
@@ -59,6 +62,7 @@ | |||
59 | #define IRQF_PERCPU 0x00000400 | 62 | #define IRQF_PERCPU 0x00000400 |
60 | #define IRQF_NOBALANCING 0x00000800 | 63 | #define IRQF_NOBALANCING 0x00000800 |
61 | #define IRQF_IRQPOLL 0x00001000 | 64 | #define IRQF_IRQPOLL 0x00001000 |
65 | #define IRQF_ONESHOT 0x00002000 | ||
62 | 66 | ||
63 | /* | 67 | /* |
64 | * Bits used by threaded handlers: | 68 | * Bits used by threaded handlers: |
@@ -344,6 +348,7 @@ enum | |||
344 | NET_TX_SOFTIRQ, | 348 | NET_TX_SOFTIRQ, |
345 | NET_RX_SOFTIRQ, | 349 | NET_RX_SOFTIRQ, |
346 | BLOCK_SOFTIRQ, | 350 | BLOCK_SOFTIRQ, |
351 | BLOCK_IOPOLL_SOFTIRQ, | ||
347 | TASKLET_SOFTIRQ, | 352 | TASKLET_SOFTIRQ, |
348 | SCHED_SOFTIRQ, | 353 | SCHED_SOFTIRQ, |
349 | HRTIMER_SOFTIRQ, | 354 | HRTIMER_SOFTIRQ, |
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index 0adb0f91568c..97eb928b4924 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h | |||
@@ -49,23 +49,30 @@ static inline struct io_mapping * | |||
49 | io_mapping_create_wc(resource_size_t base, unsigned long size) | 49 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
50 | { | 50 | { |
51 | struct io_mapping *iomap; | 51 | struct io_mapping *iomap; |
52 | 52 | pgprot_t prot; | |
53 | if (!is_io_mapping_possible(base, size)) | ||
54 | return NULL; | ||
55 | 53 | ||
56 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); | 54 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); |
57 | if (!iomap) | 55 | if (!iomap) |
58 | return NULL; | 56 | goto out_err; |
57 | |||
58 | if (iomap_create_wc(base, size, &prot)) | ||
59 | goto out_free; | ||
59 | 60 | ||
60 | iomap->base = base; | 61 | iomap->base = base; |
61 | iomap->size = size; | 62 | iomap->size = size; |
62 | iomap->prot = pgprot_writecombine(__pgprot(__PAGE_KERNEL)); | 63 | iomap->prot = prot; |
63 | return iomap; | 64 | return iomap; |
65 | |||
66 | out_free: | ||
67 | kfree(iomap); | ||
68 | out_err: | ||
69 | return NULL; | ||
64 | } | 70 | } |
65 | 71 | ||
66 | static inline void | 72 | static inline void |
67 | io_mapping_free(struct io_mapping *mapping) | 73 | io_mapping_free(struct io_mapping *mapping) |
68 | { | 74 | { |
75 | iomap_free(mapping->base, mapping->size); | ||
69 | kfree(mapping); | 76 | kfree(mapping); |
70 | } | 77 | } |
71 | 78 | ||
diff --git a/include/linux/irq.h b/include/linux/irq.h index cb2e77a3f7f7..ae9653dbcd78 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -69,6 +69,8 @@ typedef void (*irq_flow_handler_t)(unsigned int irq, | |||
69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ | 69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ |
70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ | 70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ |
71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ | 71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ |
72 | #define IRQ_ONESHOT 0x08000000 /* IRQ is not unmasked after hardirq */ | ||
73 | #define IRQ_NESTED_THREAD 0x10000000 /* IRQ is nested into another, no own handler thread */ | ||
72 | 74 | ||
73 | #ifdef CONFIG_IRQ_PER_CPU | 75 | #ifdef CONFIG_IRQ_PER_CPU |
74 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 76 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
@@ -100,6 +102,9 @@ struct msi_desc; | |||
100 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ | 102 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ |
101 | * @set_wake: enable/disable power-management wake-on of an IRQ | 103 | * @set_wake: enable/disable power-management wake-on of an IRQ |
102 | * | 104 | * |
105 | * @bus_lock: function to lock access to slow bus (i2c) chips | ||
106 | * @bus_sync_unlock: function to sync and unlock slow bus (i2c) chips | ||
107 | * | ||
103 | * @release: release function solely used by UML | 108 | * @release: release function solely used by UML |
104 | * @typename: obsoleted by name, kept as migration helper | 109 | * @typename: obsoleted by name, kept as migration helper |
105 | */ | 110 | */ |
@@ -123,6 +128,9 @@ struct irq_chip { | |||
123 | int (*set_type)(unsigned int irq, unsigned int flow_type); | 128 | int (*set_type)(unsigned int irq, unsigned int flow_type); |
124 | int (*set_wake)(unsigned int irq, unsigned int on); | 129 | int (*set_wake)(unsigned int irq, unsigned int on); |
125 | 130 | ||
131 | void (*bus_lock)(unsigned int irq); | ||
132 | void (*bus_sync_unlock)(unsigned int irq); | ||
133 | |||
126 | /* Currently used only by UML, might disappear one day.*/ | 134 | /* Currently used only by UML, might disappear one day.*/ |
127 | #ifdef CONFIG_IRQ_RELEASE_METHOD | 135 | #ifdef CONFIG_IRQ_RELEASE_METHOD |
128 | void (*release)(unsigned int irq, void *dev_id); | 136 | void (*release)(unsigned int irq, void *dev_id); |
@@ -220,13 +228,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node) | |||
220 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); | 228 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); |
221 | 229 | ||
222 | /* | 230 | /* |
223 | * Migration helpers for obsolete names, they will go away: | ||
224 | */ | ||
225 | #define hw_interrupt_type irq_chip | ||
226 | #define no_irq_type no_irq_chip | ||
227 | typedef struct irq_desc irq_desc_t; | ||
228 | |||
229 | /* | ||
230 | * Pick up the arch-dependent methods: | 231 | * Pick up the arch-dependent methods: |
231 | */ | 232 | */ |
232 | #include <asm/hw_irq.h> | 233 | #include <asm/hw_irq.h> |
@@ -289,6 +290,7 @@ extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc); | |||
289 | extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc); | 290 | extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc); |
290 | extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc); | 291 | extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc); |
291 | extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc); | 292 | extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc); |
293 | extern void handle_nested_irq(unsigned int irq); | ||
292 | 294 | ||
293 | /* | 295 | /* |
294 | * Monolithic do_IRQ implementation. | 296 | * Monolithic do_IRQ implementation. |
@@ -379,6 +381,8 @@ set_irq_chained_handler(unsigned int irq, | |||
379 | __set_irq_handler(irq, handle, 1, NULL); | 381 | __set_irq_handler(irq, handle, 1, NULL); |
380 | } | 382 | } |
381 | 383 | ||
384 | extern void set_irq_nested_thread(unsigned int irq, int nest); | ||
385 | |||
382 | extern void set_irq_noprobe(unsigned int irq); | 386 | extern void set_irq_noprobe(unsigned int irq); |
383 | extern void set_irq_probe(unsigned int irq); | 387 | extern void set_irq_probe(unsigned int irq); |
384 | 388 | ||
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index ec87b212ff7d..7bf89bc8cbca 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
@@ -41,6 +41,12 @@ extern struct irq_desc *irq_to_desc(unsigned int irq); | |||
41 | ; \ | 41 | ; \ |
42 | else | 42 | else |
43 | 43 | ||
44 | #ifdef CONFIG_SMP | ||
45 | #define irq_node(irq) (irq_to_desc(irq)->node) | ||
46 | #else | ||
47 | #define irq_node(irq) 0 | ||
48 | #endif | ||
49 | |||
44 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 50 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
45 | 51 | ||
46 | #define for_each_irq_nr(irq) \ | 52 | #define for_each_irq_nr(irq) \ |
diff --git a/include/linux/isdn/hdlc.h b/include/linux/isdn/hdlc.h new file mode 100644 index 000000000000..4b3ecc40889a --- /dev/null +++ b/include/linux/isdn/hdlc.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * hdlc.h -- General purpose ISDN HDLC decoder. | ||
3 | * | ||
4 | * Implementation of a HDLC decoder/encoder in software. | ||
5 | * Neccessary because some ISDN devices don't have HDLC | ||
6 | * controllers. | ||
7 | * | ||
8 | * Copyright (C) | ||
9 | * 2009 Karsten Keil <keil@b1-systems.de> | ||
10 | * 2002 Wolfgang Mües <wolfgang@iksw-muees.de> | ||
11 | * 2001 Frode Isaksen <fisaksen@bewan.com> | ||
12 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | ||
15 | * it under the terms of the GNU General Public License as published by | ||
16 | * the Free Software Foundation; either version 2 of the License, or | ||
17 | * (at your option) any later version. | ||
18 | * | ||
19 | * This program is distributed in the hope that it will be useful, | ||
20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
22 | * GNU General Public License for more details. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License | ||
25 | * along with this program; if not, write to the Free Software | ||
26 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #ifndef __ISDNHDLC_H__ | ||
30 | #define __ISDNHDLC_H__ | ||
31 | |||
32 | struct isdnhdlc_vars { | ||
33 | int bit_shift; | ||
34 | int hdlc_bits1; | ||
35 | int data_bits; | ||
36 | int ffbit_shift; /* encoding only */ | ||
37 | int state; | ||
38 | int dstpos; | ||
39 | |||
40 | u16 crc; | ||
41 | |||
42 | u8 cbin; | ||
43 | u8 shift_reg; | ||
44 | u8 ffvalue; | ||
45 | |||
46 | /* set if transferring data */ | ||
47 | u32 data_received:1; | ||
48 | /* set if D channel (send idle instead of flags) */ | ||
49 | u32 dchannel:1; | ||
50 | /* set if 56K adaptation */ | ||
51 | u32 do_adapt56:1; | ||
52 | /* set if in closing phase (need to send CRC + flag) */ | ||
53 | u32 do_closing:1; | ||
54 | /* set if data is bitreverse */ | ||
55 | u32 do_bitreverse:1; | ||
56 | }; | ||
57 | |||
58 | /* Feature Flags */ | ||
59 | #define HDLC_56KBIT 0x01 | ||
60 | #define HDLC_DCHANNEL 0x02 | ||
61 | #define HDLC_BITREVERSE 0x04 | ||
62 | |||
63 | /* | ||
64 | The return value from isdnhdlc_decode is | ||
65 | the frame length, 0 if no complete frame was decoded, | ||
66 | or a negative error number | ||
67 | */ | ||
68 | #define HDLC_FRAMING_ERROR 1 | ||
69 | #define HDLC_CRC_ERROR 2 | ||
70 | #define HDLC_LENGTH_ERROR 3 | ||
71 | |||
72 | extern void isdnhdlc_rcv_init(struct isdnhdlc_vars *hdlc, u32 features); | ||
73 | |||
74 | extern int isdnhdlc_decode(struct isdnhdlc_vars *hdlc, const u8 *src, | ||
75 | int slen, int *count, u8 *dst, int dsize); | ||
76 | |||
77 | extern void isdnhdlc_out_init(struct isdnhdlc_vars *hdlc, u32 features); | ||
78 | |||
79 | extern int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const u8 *src, | ||
80 | u16 slen, int *count, u8 *dst, int dsize); | ||
81 | |||
82 | #endif /* __ISDNHDLC_H__ */ | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index d6320a3e8def..2b5b1e0899a8 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -125,7 +125,7 @@ extern int _cond_resched(void); | |||
125 | #endif | 125 | #endif |
126 | 126 | ||
127 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP | 127 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |
128 | void __might_sleep(char *file, int line); | 128 | void __might_sleep(char *file, int line, int preempt_offset); |
129 | /** | 129 | /** |
130 | * might_sleep - annotation for functions that can sleep | 130 | * might_sleep - annotation for functions that can sleep |
131 | * | 131 | * |
@@ -137,8 +137,9 @@ extern int _cond_resched(void); | |||
137 | * supposed to. | 137 | * supposed to. |
138 | */ | 138 | */ |
139 | # define might_sleep() \ | 139 | # define might_sleep() \ |
140 | do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0) | 140 | do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) |
141 | #else | 141 | #else |
142 | static inline void __might_sleep(char *file, int line, int preempt_offset) { } | ||
142 | # define might_sleep() do { might_resched(); } while (0) | 143 | # define might_sleep() do { might_resched(); } while (0) |
143 | #endif | 144 | #endif |
144 | 145 | ||
diff --git a/include/linux/key.h b/include/linux/key.h index e544f466d69a..cd50dfa1d4c2 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -129,7 +129,10 @@ struct key { | |||
129 | struct rw_semaphore sem; /* change vs change sem */ | 129 | struct rw_semaphore sem; /* change vs change sem */ |
130 | struct key_user *user; /* owner of this key */ | 130 | struct key_user *user; /* owner of this key */ |
131 | void *security; /* security data for this key */ | 131 | void *security; /* security data for this key */ |
132 | time_t expiry; /* time at which key expires (or 0) */ | 132 | union { |
133 | time_t expiry; /* time at which key expires (or 0) */ | ||
134 | time_t revoked_at; /* time at which key was revoked */ | ||
135 | }; | ||
133 | uid_t uid; | 136 | uid_t uid; |
134 | gid_t gid; | 137 | gid_t gid; |
135 | key_perm_t perm; /* access permissions */ | 138 | key_perm_t perm; /* access permissions */ |
@@ -275,6 +278,8 @@ static inline key_serial_t key_serial(struct key *key) | |||
275 | extern ctl_table key_sysctls[]; | 278 | extern ctl_table key_sysctls[]; |
276 | #endif | 279 | #endif |
277 | 280 | ||
281 | extern void key_replace_session_keyring(void); | ||
282 | |||
278 | /* | 283 | /* |
279 | * the userspace interface | 284 | * the userspace interface |
280 | */ | 285 | */ |
@@ -297,6 +302,7 @@ extern void key_init(void); | |||
297 | #define key_fsuid_changed(t) do { } while(0) | 302 | #define key_fsuid_changed(t) do { } while(0) |
298 | #define key_fsgid_changed(t) do { } while(0) | 303 | #define key_fsgid_changed(t) do { } while(0) |
299 | #define key_init() do { } while(0) | 304 | #define key_init() do { } while(0) |
305 | #define key_replace_session_keyring() do { } while(0) | ||
300 | 306 | ||
301 | #endif /* CONFIG_KEYS */ | 307 | #endif /* CONFIG_KEYS */ |
302 | #endif /* __KERNEL__ */ | 308 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/keyctl.h b/include/linux/keyctl.h index c0688eb72093..bd383f1944fb 100644 --- a/include/linux/keyctl.h +++ b/include/linux/keyctl.h | |||
@@ -52,5 +52,6 @@ | |||
52 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ | 52 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ |
53 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ | 53 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ |
54 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ | 54 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ |
55 | #define KEYCTL_SESSION_TO_PARENT 18 /* apply session keyring to parent process */ | ||
55 | 56 | ||
56 | #endif /* _LINUX_KEYCTL_H */ | 57 | #endif /* _LINUX_KEYCTL_H */ |
diff --git a/include/linux/kmemcheck.h b/include/linux/kmemcheck.h index 47b39b7c7e84..dc2fd545db00 100644 --- a/include/linux/kmemcheck.h +++ b/include/linux/kmemcheck.h | |||
@@ -34,6 +34,8 @@ void kmemcheck_mark_initialized_pages(struct page *p, unsigned int n); | |||
34 | int kmemcheck_show_addr(unsigned long address); | 34 | int kmemcheck_show_addr(unsigned long address); |
35 | int kmemcheck_hide_addr(unsigned long address); | 35 | int kmemcheck_hide_addr(unsigned long address); |
36 | 36 | ||
37 | bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size); | ||
38 | |||
37 | #else | 39 | #else |
38 | #define kmemcheck_enabled 0 | 40 | #define kmemcheck_enabled 0 |
39 | 41 | ||
@@ -99,6 +101,11 @@ static inline void kmemcheck_mark_initialized_pages(struct page *p, | |||
99 | { | 101 | { |
100 | } | 102 | } |
101 | 103 | ||
104 | static inline bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size) | ||
105 | { | ||
106 | return true; | ||
107 | } | ||
108 | |||
102 | #endif /* CONFIG_KMEMCHECK */ | 109 | #endif /* CONFIG_KMEMCHECK */ |
103 | 110 | ||
104 | /* | 111 | /* |
diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h index 6a63807f714e..3c7497d46ee9 100644 --- a/include/linux/kmemleak.h +++ b/include/linux/kmemleak.h | |||
@@ -23,18 +23,18 @@ | |||
23 | 23 | ||
24 | #ifdef CONFIG_DEBUG_KMEMLEAK | 24 | #ifdef CONFIG_DEBUG_KMEMLEAK |
25 | 25 | ||
26 | extern void kmemleak_init(void); | 26 | extern void kmemleak_init(void) __ref; |
27 | extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, | 27 | extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, |
28 | gfp_t gfp); | 28 | gfp_t gfp) __ref; |
29 | extern void kmemleak_free(const void *ptr); | 29 | extern void kmemleak_free(const void *ptr) __ref; |
30 | extern void kmemleak_free_part(const void *ptr, size_t size); | 30 | extern void kmemleak_free_part(const void *ptr, size_t size) __ref; |
31 | extern void kmemleak_padding(const void *ptr, unsigned long offset, | 31 | extern void kmemleak_padding(const void *ptr, unsigned long offset, |
32 | size_t size); | 32 | size_t size) __ref; |
33 | extern void kmemleak_not_leak(const void *ptr); | 33 | extern void kmemleak_not_leak(const void *ptr) __ref; |
34 | extern void kmemleak_ignore(const void *ptr); | 34 | extern void kmemleak_ignore(const void *ptr) __ref; |
35 | extern void kmemleak_scan_area(const void *ptr, unsigned long offset, | 35 | extern void kmemleak_scan_area(const void *ptr, unsigned long offset, |
36 | size_t length, gfp_t gfp); | 36 | size_t length, gfp_t gfp) __ref; |
37 | extern void kmemleak_no_scan(const void *ptr); | 37 | extern void kmemleak_no_scan(const void *ptr) __ref; |
38 | 38 | ||
39 | static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, | 39 | static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, |
40 | int min_count, unsigned long flags, | 40 | int min_count, unsigned long flags, |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 3db5d8d37485..f8f8900fc5ec 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #define KVM_API_VERSION 12 | 15 | #define KVM_API_VERSION 12 |
16 | 16 | ||
17 | /* for KVM_TRACE_ENABLE */ | 17 | /* for KVM_TRACE_ENABLE, deprecated */ |
18 | struct kvm_user_trace_setup { | 18 | struct kvm_user_trace_setup { |
19 | __u32 buf_size; /* sub_buffer size of each per-cpu */ | 19 | __u32 buf_size; /* sub_buffer size of each per-cpu */ |
20 | __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ | 20 | __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ |
@@ -70,6 +70,14 @@ struct kvm_irqchip { | |||
70 | } chip; | 70 | } chip; |
71 | }; | 71 | }; |
72 | 72 | ||
73 | /* for KVM_CREATE_PIT2 */ | ||
74 | struct kvm_pit_config { | ||
75 | __u32 flags; | ||
76 | __u32 pad[15]; | ||
77 | }; | ||
78 | |||
79 | #define KVM_PIT_SPEAKER_DUMMY 1 | ||
80 | |||
73 | #define KVM_EXIT_UNKNOWN 0 | 81 | #define KVM_EXIT_UNKNOWN 0 |
74 | #define KVM_EXIT_EXCEPTION 1 | 82 | #define KVM_EXIT_EXCEPTION 1 |
75 | #define KVM_EXIT_IO 2 | 83 | #define KVM_EXIT_IO 2 |
@@ -87,6 +95,10 @@ struct kvm_irqchip { | |||
87 | #define KVM_EXIT_S390_RESET 14 | 95 | #define KVM_EXIT_S390_RESET 14 |
88 | #define KVM_EXIT_DCR 15 | 96 | #define KVM_EXIT_DCR 15 |
89 | #define KVM_EXIT_NMI 16 | 97 | #define KVM_EXIT_NMI 16 |
98 | #define KVM_EXIT_INTERNAL_ERROR 17 | ||
99 | |||
100 | /* For KVM_EXIT_INTERNAL_ERROR */ | ||
101 | #define KVM_INTERNAL_ERROR_EMULATION 1 | ||
90 | 102 | ||
91 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ | 103 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ |
92 | struct kvm_run { | 104 | struct kvm_run { |
@@ -173,6 +185,9 @@ struct kvm_run { | |||
173 | __u32 data; | 185 | __u32 data; |
174 | __u8 is_write; | 186 | __u8 is_write; |
175 | } dcr; | 187 | } dcr; |
188 | struct { | ||
189 | __u32 suberror; | ||
190 | } internal; | ||
176 | /* Fix the size of the union. */ | 191 | /* Fix the size of the union. */ |
177 | char padding[256]; | 192 | char padding[256]; |
178 | }; | 193 | }; |
@@ -292,6 +307,28 @@ struct kvm_guest_debug { | |||
292 | struct kvm_guest_debug_arch arch; | 307 | struct kvm_guest_debug_arch arch; |
293 | }; | 308 | }; |
294 | 309 | ||
310 | enum { | ||
311 | kvm_ioeventfd_flag_nr_datamatch, | ||
312 | kvm_ioeventfd_flag_nr_pio, | ||
313 | kvm_ioeventfd_flag_nr_deassign, | ||
314 | kvm_ioeventfd_flag_nr_max, | ||
315 | }; | ||
316 | |||
317 | #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch) | ||
318 | #define KVM_IOEVENTFD_FLAG_PIO (1 << kvm_ioeventfd_flag_nr_pio) | ||
319 | #define KVM_IOEVENTFD_FLAG_DEASSIGN (1 << kvm_ioeventfd_flag_nr_deassign) | ||
320 | |||
321 | #define KVM_IOEVENTFD_VALID_FLAG_MASK ((1 << kvm_ioeventfd_flag_nr_max) - 1) | ||
322 | |||
323 | struct kvm_ioeventfd { | ||
324 | __u64 datamatch; | ||
325 | __u64 addr; /* legal pio/mmio address */ | ||
326 | __u32 len; /* 1, 2, 4, or 8 bytes */ | ||
327 | __s32 fd; | ||
328 | __u32 flags; | ||
329 | __u8 pad[36]; | ||
330 | }; | ||
331 | |||
295 | #define KVM_TRC_SHIFT 16 | 332 | #define KVM_TRC_SHIFT 16 |
296 | /* | 333 | /* |
297 | * kvm trace categories | 334 | * kvm trace categories |
@@ -310,35 +347,6 @@ struct kvm_guest_debug { | |||
310 | #define KVM_TRC_CYCLE_SIZE 8 | 347 | #define KVM_TRC_CYCLE_SIZE 8 |
311 | #define KVM_TRC_EXTRA_MAX 7 | 348 | #define KVM_TRC_EXTRA_MAX 7 |
312 | 349 | ||
313 | /* This structure represents a single trace buffer record. */ | ||
314 | struct kvm_trace_rec { | ||
315 | /* variable rec_val | ||
316 | * is split into: | ||
317 | * bits 0 - 27 -> event id | ||
318 | * bits 28 -30 -> number of extra data args of size u32 | ||
319 | * bits 31 -> binary indicator for if tsc is in record | ||
320 | */ | ||
321 | __u32 rec_val; | ||
322 | __u32 pid; | ||
323 | __u32 vcpu_id; | ||
324 | union { | ||
325 | struct { | ||
326 | __u64 timestamp; | ||
327 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
328 | } __attribute__((packed)) timestamp; | ||
329 | struct { | ||
330 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
331 | } notimestamp; | ||
332 | } u; | ||
333 | }; | ||
334 | |||
335 | #define TRACE_REC_EVENT_ID(val) \ | ||
336 | (0x0fffffff & (val)) | ||
337 | #define TRACE_REC_NUM_DATA_ARGS(val) \ | ||
338 | (0x70000000 & ((val) << 28)) | ||
339 | #define TRACE_REC_TCS(val) \ | ||
340 | (0x80000000 & ((val) << 31)) | ||
341 | |||
342 | #define KVMIO 0xAE | 350 | #define KVMIO 0xAE |
343 | 351 | ||
344 | /* | 352 | /* |
@@ -415,6 +423,19 @@ struct kvm_trace_rec { | |||
415 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 | 423 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 |
416 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ | 424 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ |
417 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 | 425 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 |
426 | #ifdef __KVM_HAVE_MCE | ||
427 | #define KVM_CAP_MCE 31 | ||
428 | #endif | ||
429 | #define KVM_CAP_IRQFD 32 | ||
430 | #ifdef __KVM_HAVE_PIT | ||
431 | #define KVM_CAP_PIT2 33 | ||
432 | #endif | ||
433 | #define KVM_CAP_SET_BOOT_CPU_ID 34 | ||
434 | #ifdef __KVM_HAVE_PIT_STATE2 | ||
435 | #define KVM_CAP_PIT_STATE2 35 | ||
436 | #endif | ||
437 | #define KVM_CAP_IOEVENTFD 36 | ||
438 | #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 | ||
418 | 439 | ||
419 | #ifdef KVM_CAP_IRQ_ROUTING | 440 | #ifdef KVM_CAP_IRQ_ROUTING |
420 | 441 | ||
@@ -454,15 +475,32 @@ struct kvm_irq_routing { | |||
454 | 475 | ||
455 | #endif | 476 | #endif |
456 | 477 | ||
478 | #ifdef KVM_CAP_MCE | ||
479 | /* x86 MCE */ | ||
480 | struct kvm_x86_mce { | ||
481 | __u64 status; | ||
482 | __u64 addr; | ||
483 | __u64 misc; | ||
484 | __u64 mcg_status; | ||
485 | __u8 bank; | ||
486 | __u8 pad1[7]; | ||
487 | __u64 pad2[3]; | ||
488 | }; | ||
489 | #endif | ||
490 | |||
491 | #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0) | ||
492 | |||
493 | struct kvm_irqfd { | ||
494 | __u32 fd; | ||
495 | __u32 gsi; | ||
496 | __u32 flags; | ||
497 | __u8 pad[20]; | ||
498 | }; | ||
499 | |||
457 | /* | 500 | /* |
458 | * ioctls for VM fds | 501 | * ioctls for VM fds |
459 | */ | 502 | */ |
460 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) | 503 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) |
461 | #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) | ||
462 | #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) | ||
463 | #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ | ||
464 | struct kvm_userspace_memory_region) | ||
465 | #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) | ||
466 | /* | 504 | /* |
467 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns | 505 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns |
468 | * a vcpu fd. | 506 | * a vcpu fd. |
@@ -470,6 +508,12 @@ struct kvm_irq_routing { | |||
470 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) | 508 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) |
471 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) | 509 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) |
472 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) | 510 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) |
511 | #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) | ||
512 | #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) | ||
513 | #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ | ||
514 | struct kvm_userspace_memory_region) | ||
515 | #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) | ||
516 | #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64) | ||
473 | /* Device model IOC */ | 517 | /* Device model IOC */ |
474 | #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) | 518 | #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) |
475 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) | 519 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) |
@@ -498,6 +542,10 @@ struct kvm_irq_routing { | |||
498 | #define KVM_ASSIGN_SET_MSIX_ENTRY \ | 542 | #define KVM_ASSIGN_SET_MSIX_ENTRY \ |
499 | _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) | 543 | _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) |
500 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) | 544 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) |
545 | #define KVM_IRQFD _IOW(KVMIO, 0x76, struct kvm_irqfd) | ||
546 | #define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config) | ||
547 | #define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78) | ||
548 | #define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd) | ||
501 | 549 | ||
502 | /* | 550 | /* |
503 | * ioctls for vcpu fds | 551 | * ioctls for vcpu fds |
@@ -541,6 +589,10 @@ struct kvm_irq_routing { | |||
541 | #define KVM_NMI _IO(KVMIO, 0x9a) | 589 | #define KVM_NMI _IO(KVMIO, 0x9a) |
542 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ | 590 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ |
543 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) | 591 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) |
592 | /* MCE for x86 */ | ||
593 | #define KVM_X86_SETUP_MCE _IOW(KVMIO, 0x9c, __u64) | ||
594 | #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO, 0x9d, __u64) | ||
595 | #define KVM_X86_SET_MCE _IOW(KVMIO, 0x9e, struct kvm_x86_mce) | ||
544 | 596 | ||
545 | /* | 597 | /* |
546 | * Deprecated interfaces | 598 | * Deprecated interfaces |
@@ -563,6 +615,9 @@ struct kvm_debug_guest { | |||
563 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) | 615 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) |
564 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) | 616 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) |
565 | 617 | ||
618 | #define KVM_GET_PIT2 _IOR(KVMIO, 0x9f, struct kvm_pit_state2) | ||
619 | #define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2) | ||
620 | |||
566 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | 621 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) |
567 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | 622 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) |
568 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) | 623 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) |
@@ -633,7 +688,7 @@ struct kvm_assigned_msix_nr { | |||
633 | __u16 padding; | 688 | __u16 padding; |
634 | }; | 689 | }; |
635 | 690 | ||
636 | #define KVM_MAX_MSIX_PER_DEV 512 | 691 | #define KVM_MAX_MSIX_PER_DEV 256 |
637 | struct kvm_assigned_msix_entry { | 692 | struct kvm_assigned_msix_entry { |
638 | __u32 assigned_dev_id; | 693 | __u32 assigned_dev_id; |
639 | __u32 gsi; | 694 | __u32 gsi; |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 16713dc672e4..4af56036a6bf 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -42,6 +42,7 @@ | |||
42 | 42 | ||
43 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 | 43 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 |
44 | 44 | ||
45 | struct kvm; | ||
45 | struct kvm_vcpu; | 46 | struct kvm_vcpu; |
46 | extern struct kmem_cache *kvm_vcpu_cache; | 47 | extern struct kmem_cache *kvm_vcpu_cache; |
47 | 48 | ||
@@ -59,10 +60,18 @@ struct kvm_io_bus { | |||
59 | 60 | ||
60 | void kvm_io_bus_init(struct kvm_io_bus *bus); | 61 | void kvm_io_bus_init(struct kvm_io_bus *bus); |
61 | void kvm_io_bus_destroy(struct kvm_io_bus *bus); | 62 | void kvm_io_bus_destroy(struct kvm_io_bus *bus); |
62 | struct kvm_io_device *kvm_io_bus_find_dev(struct kvm_io_bus *bus, | 63 | int kvm_io_bus_write(struct kvm_io_bus *bus, gpa_t addr, int len, |
63 | gpa_t addr, int len, int is_write); | 64 | const void *val); |
64 | void kvm_io_bus_register_dev(struct kvm_io_bus *bus, | 65 | int kvm_io_bus_read(struct kvm_io_bus *bus, gpa_t addr, int len, |
65 | struct kvm_io_device *dev); | 66 | void *val); |
67 | int __kvm_io_bus_register_dev(struct kvm_io_bus *bus, | ||
68 | struct kvm_io_device *dev); | ||
69 | int kvm_io_bus_register_dev(struct kvm *kvm, struct kvm_io_bus *bus, | ||
70 | struct kvm_io_device *dev); | ||
71 | void __kvm_io_bus_unregister_dev(struct kvm_io_bus *bus, | ||
72 | struct kvm_io_device *dev); | ||
73 | void kvm_io_bus_unregister_dev(struct kvm *kvm, struct kvm_io_bus *bus, | ||
74 | struct kvm_io_device *dev); | ||
66 | 75 | ||
67 | struct kvm_vcpu { | 76 | struct kvm_vcpu { |
68 | struct kvm *kvm; | 77 | struct kvm *kvm; |
@@ -103,13 +112,14 @@ struct kvm_memory_slot { | |||
103 | struct { | 112 | struct { |
104 | unsigned long rmap_pde; | 113 | unsigned long rmap_pde; |
105 | int write_count; | 114 | int write_count; |
106 | } *lpage_info; | 115 | } *lpage_info[KVM_NR_PAGE_SIZES - 1]; |
107 | unsigned long userspace_addr; | 116 | unsigned long userspace_addr; |
108 | int user_alloc; | 117 | int user_alloc; |
109 | }; | 118 | }; |
110 | 119 | ||
111 | struct kvm_kernel_irq_routing_entry { | 120 | struct kvm_kernel_irq_routing_entry { |
112 | u32 gsi; | 121 | u32 gsi; |
122 | u32 type; | ||
113 | int (*set)(struct kvm_kernel_irq_routing_entry *e, | 123 | int (*set)(struct kvm_kernel_irq_routing_entry *e, |
114 | struct kvm *kvm, int level); | 124 | struct kvm *kvm, int level); |
115 | union { | 125 | union { |
@@ -123,7 +133,6 @@ struct kvm_kernel_irq_routing_entry { | |||
123 | }; | 133 | }; |
124 | 134 | ||
125 | struct kvm { | 135 | struct kvm { |
126 | struct mutex lock; /* protects the vcpus array and APIC accesses */ | ||
127 | spinlock_t mmu_lock; | 136 | spinlock_t mmu_lock; |
128 | spinlock_t requests_lock; | 137 | spinlock_t requests_lock; |
129 | struct rw_semaphore slots_lock; | 138 | struct rw_semaphore slots_lock; |
@@ -131,10 +140,23 @@ struct kvm { | |||
131 | int nmemslots; | 140 | int nmemslots; |
132 | struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + | 141 | struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + |
133 | KVM_PRIVATE_MEM_SLOTS]; | 142 | KVM_PRIVATE_MEM_SLOTS]; |
143 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | ||
144 | u32 bsp_vcpu_id; | ||
145 | struct kvm_vcpu *bsp_vcpu; | ||
146 | #endif | ||
134 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; | 147 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; |
148 | atomic_t online_vcpus; | ||
135 | struct list_head vm_list; | 149 | struct list_head vm_list; |
150 | struct mutex lock; | ||
136 | struct kvm_io_bus mmio_bus; | 151 | struct kvm_io_bus mmio_bus; |
137 | struct kvm_io_bus pio_bus; | 152 | struct kvm_io_bus pio_bus; |
153 | #ifdef CONFIG_HAVE_KVM_EVENTFD | ||
154 | struct { | ||
155 | spinlock_t lock; | ||
156 | struct list_head items; | ||
157 | } irqfds; | ||
158 | struct list_head ioeventfds; | ||
159 | #endif | ||
138 | struct kvm_vm_stat stat; | 160 | struct kvm_vm_stat stat; |
139 | struct kvm_arch arch; | 161 | struct kvm_arch arch; |
140 | atomic_t users_count; | 162 | atomic_t users_count; |
@@ -143,6 +165,7 @@ struct kvm { | |||
143 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; | 165 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; |
144 | #endif | 166 | #endif |
145 | 167 | ||
168 | struct mutex irq_lock; | ||
146 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | 169 | #ifdef CONFIG_HAVE_KVM_IRQCHIP |
147 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ | 170 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ |
148 | struct hlist_head mask_notifier_list; | 171 | struct hlist_head mask_notifier_list; |
@@ -166,6 +189,17 @@ struct kvm { | |||
166 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) | 189 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) |
167 | #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) | 190 | #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) |
168 | 191 | ||
192 | static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i) | ||
193 | { | ||
194 | smp_rmb(); | ||
195 | return kvm->vcpus[i]; | ||
196 | } | ||
197 | |||
198 | #define kvm_for_each_vcpu(idx, vcpup, kvm) \ | ||
199 | for (idx = 0, vcpup = kvm_get_vcpu(kvm, idx); \ | ||
200 | idx < atomic_read(&kvm->online_vcpus) && vcpup; \ | ||
201 | vcpup = kvm_get_vcpu(kvm, ++idx)) | ||
202 | |||
169 | int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); | 203 | int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); |
170 | void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); | 204 | void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); |
171 | 205 | ||
@@ -200,6 +234,7 @@ int kvm_arch_set_memory_region(struct kvm *kvm, | |||
200 | struct kvm_userspace_memory_region *mem, | 234 | struct kvm_userspace_memory_region *mem, |
201 | struct kvm_memory_slot old, | 235 | struct kvm_memory_slot old, |
202 | int user_alloc); | 236 | int user_alloc); |
237 | void kvm_disable_largepages(void); | ||
203 | void kvm_arch_flush_shadow(struct kvm *kvm); | 238 | void kvm_arch_flush_shadow(struct kvm *kvm); |
204 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); | 239 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); |
205 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); | 240 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); |
@@ -242,8 +277,6 @@ long kvm_arch_dev_ioctl(struct file *filp, | |||
242 | unsigned int ioctl, unsigned long arg); | 277 | unsigned int ioctl, unsigned long arg); |
243 | long kvm_arch_vcpu_ioctl(struct file *filp, | 278 | long kvm_arch_vcpu_ioctl(struct file *filp, |
244 | unsigned int ioctl, unsigned long arg); | 279 | unsigned int ioctl, unsigned long arg); |
245 | void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu); | ||
246 | void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu); | ||
247 | 280 | ||
248 | int kvm_dev_ioctl_check_extension(long ext); | 281 | int kvm_dev_ioctl_check_extension(long ext); |
249 | 282 | ||
@@ -299,7 +332,6 @@ int kvm_arch_hardware_setup(void); | |||
299 | void kvm_arch_hardware_unsetup(void); | 332 | void kvm_arch_hardware_unsetup(void); |
300 | void kvm_arch_check_processor_compat(void *rtn); | 333 | void kvm_arch_check_processor_compat(void *rtn); |
301 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); | 334 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); |
302 | int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu); | ||
303 | 335 | ||
304 | void kvm_free_physmem(struct kvm *kvm); | 336 | void kvm_free_physmem(struct kvm *kvm); |
305 | 337 | ||
@@ -308,8 +340,6 @@ void kvm_arch_destroy_vm(struct kvm *kvm); | |||
308 | void kvm_free_all_assigned_devices(struct kvm *kvm); | 340 | void kvm_free_all_assigned_devices(struct kvm *kvm); |
309 | void kvm_arch_sync_events(struct kvm *kvm); | 341 | void kvm_arch_sync_events(struct kvm *kvm); |
310 | 342 | ||
311 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); | ||
312 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); | ||
313 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); | 343 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); |
314 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); | 344 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); |
315 | 345 | ||
@@ -365,7 +395,8 @@ int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | |||
365 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); | 395 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); |
366 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 396 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
367 | struct kvm_irq_ack_notifier *kian); | 397 | struct kvm_irq_ack_notifier *kian); |
368 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); | 398 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, |
399 | struct kvm_irq_ack_notifier *kian); | ||
369 | int kvm_request_irq_source_id(struct kvm *kvm); | 400 | int kvm_request_irq_source_id(struct kvm *kvm); |
370 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); | 401 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); |
371 | 402 | ||
@@ -458,37 +489,6 @@ struct kvm_stats_debugfs_item { | |||
458 | extern struct kvm_stats_debugfs_item debugfs_entries[]; | 489 | extern struct kvm_stats_debugfs_item debugfs_entries[]; |
459 | extern struct dentry *kvm_debugfs_dir; | 490 | extern struct dentry *kvm_debugfs_dir; |
460 | 491 | ||
461 | #define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ | ||
462 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
463 | vcpu, 5, d1, d2, d3, d4, d5) | ||
464 | #define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ | ||
465 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
466 | vcpu, 4, d1, d2, d3, d4, 0) | ||
467 | #define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ | ||
468 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
469 | vcpu, 3, d1, d2, d3, 0, 0) | ||
470 | #define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ | ||
471 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
472 | vcpu, 2, d1, d2, 0, 0, 0) | ||
473 | #define KVMTRACE_1D(evt, vcpu, d1, name) \ | ||
474 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
475 | vcpu, 1, d1, 0, 0, 0, 0) | ||
476 | #define KVMTRACE_0D(evt, vcpu, name) \ | ||
477 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
478 | vcpu, 0, 0, 0, 0, 0, 0) | ||
479 | |||
480 | #ifdef CONFIG_KVM_TRACE | ||
481 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); | ||
482 | void kvm_trace_cleanup(void); | ||
483 | #else | ||
484 | static inline | ||
485 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) | ||
486 | { | ||
487 | return -EINVAL; | ||
488 | } | ||
489 | #define kvm_trace_cleanup() ((void)0) | ||
490 | #endif | ||
491 | |||
492 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER | 492 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER |
493 | static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) | 493 | static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) |
494 | { | 494 | { |
@@ -524,4 +524,33 @@ static inline void kvm_free_irq_routing(struct kvm *kvm) {} | |||
524 | 524 | ||
525 | #endif | 525 | #endif |
526 | 526 | ||
527 | #ifdef CONFIG_HAVE_KVM_EVENTFD | ||
528 | |||
529 | void kvm_eventfd_init(struct kvm *kvm); | ||
530 | int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags); | ||
531 | void kvm_irqfd_release(struct kvm *kvm); | ||
532 | int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args); | ||
533 | |||
534 | #else | ||
535 | |||
536 | static inline void kvm_eventfd_init(struct kvm *kvm) {} | ||
537 | static inline int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags) | ||
538 | { | ||
539 | return -EINVAL; | ||
540 | } | ||
541 | |||
542 | static inline void kvm_irqfd_release(struct kvm *kvm) {} | ||
543 | static inline int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) | ||
544 | { | ||
545 | return -ENOSYS; | ||
546 | } | ||
547 | |||
548 | #endif /* CONFIG_HAVE_KVM_EVENTFD */ | ||
549 | |||
550 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | ||
551 | static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) | ||
552 | { | ||
553 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; | ||
554 | } | ||
555 | #endif | ||
527 | #endif | 556 | #endif |
diff --git a/include/linux/kvm_para.h b/include/linux/kvm_para.h index 3ddce03766ca..d73109243fda 100644 --- a/include/linux/kvm_para.h +++ b/include/linux/kvm_para.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define KVM_ENOSYS 1000 | 13 | #define KVM_ENOSYS 1000 |
14 | #define KVM_EFAULT EFAULT | 14 | #define KVM_EFAULT EFAULT |
15 | #define KVM_E2BIG E2BIG | 15 | #define KVM_E2BIG E2BIG |
16 | #define KVM_EPERM EPERM | ||
16 | 17 | ||
17 | #define KVM_HC_VAPIC_POLL_IRQ 1 | 18 | #define KVM_HC_VAPIC_POLL_IRQ 1 |
18 | #define KVM_HC_MMU_OP 2 | 19 | #define KVM_HC_MMU_OP 2 |
diff --git a/include/linux/libata.h b/include/linux/libata.h index e5b6e33c6571..76319bf03e37 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -143,7 +143,6 @@ enum { | |||
143 | 143 | ||
144 | ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ | 144 | ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ |
145 | ATA_DFLAG_NCQ_OFF = (1 << 13), /* device limited to non-NCQ mode */ | 145 | ATA_DFLAG_NCQ_OFF = (1 << 13), /* device limited to non-NCQ mode */ |
146 | ATA_DFLAG_SPUNDOWN = (1 << 14), /* XXX: for spindown_compat */ | ||
147 | ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ | 146 | ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ |
148 | ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ | 147 | ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ |
149 | ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ | 148 | ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ |
@@ -190,6 +189,7 @@ enum { | |||
190 | ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */ | 189 | ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */ |
191 | ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */ | 190 | ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */ |
192 | ATA_FLAG_DEBUGMSG = (1 << 13), | 191 | ATA_FLAG_DEBUGMSG = (1 << 13), |
192 | ATA_FLAG_FPDMA_AA = (1 << 14), /* driver supports Auto-Activate */ | ||
193 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ | 193 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ |
194 | ATA_FLAG_NO_IORDY = (1 << 16), /* controller lacks iordy */ | 194 | ATA_FLAG_NO_IORDY = (1 << 16), /* controller lacks iordy */ |
195 | ATA_FLAG_ACPI_SATA = (1 << 17), /* need native SATA ACPI layout */ | 195 | ATA_FLAG_ACPI_SATA = (1 << 17), /* need native SATA ACPI layout */ |
@@ -386,6 +386,7 @@ enum { | |||
386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ | 386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ |
387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ | 387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ |
388 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | 388 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ |
389 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | ||
389 | 390 | ||
390 | /* DMA mask for user DMA control: User visible values; DO NOT | 391 | /* DMA mask for user DMA control: User visible values; DO NOT |
391 | renumber */ | 392 | renumber */ |
diff --git a/include/linux/libps2.h b/include/linux/libps2.h index b94534b7e266..fcf5fbe6a50c 100644 --- a/include/linux/libps2.h +++ b/include/linux/libps2.h | |||
@@ -44,6 +44,7 @@ struct ps2dev { | |||
44 | void ps2_init(struct ps2dev *ps2dev, struct serio *serio); | 44 | void ps2_init(struct ps2dev *ps2dev, struct serio *serio); |
45 | int ps2_sendbyte(struct ps2dev *ps2dev, unsigned char byte, int timeout); | 45 | int ps2_sendbyte(struct ps2dev *ps2dev, unsigned char byte, int timeout); |
46 | void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout); | 46 | void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout); |
47 | int __ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); | ||
47 | int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); | 48 | int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); |
48 | int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data); | 49 | int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data); |
49 | int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data); | 50 | int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data); |
diff --git a/include/linux/lmb.h b/include/linux/lmb.h index c46c89505dac..2442e3f3d033 100644 --- a/include/linux/lmb.h +++ b/include/linux/lmb.h | |||
@@ -51,7 +51,7 @@ extern u64 __init lmb_alloc_base(u64 size, | |||
51 | extern u64 __init __lmb_alloc_base(u64 size, | 51 | extern u64 __init __lmb_alloc_base(u64 size, |
52 | u64 align, u64 max_addr); | 52 | u64 align, u64 max_addr); |
53 | extern u64 __init lmb_phys_mem_size(void); | 53 | extern u64 __init lmb_phys_mem_size(void); |
54 | extern u64 __init lmb_end_of_DRAM(void); | 54 | extern u64 lmb_end_of_DRAM(void); |
55 | extern void __init lmb_enforce_memory_limit(u64 memory_limit); | 55 | extern void __init lmb_enforce_memory_limit(u64 memory_limit); |
56 | extern int __init lmb_is_reserved(u64 addr); | 56 | extern int __init lmb_is_reserved(u64 addr); |
57 | extern int lmb_find(struct lmb_property *res); | 57 | extern int lmb_find(struct lmb_property *res); |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index b25d1b53df0d..9ccf0e286b2a 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -149,6 +149,12 @@ struct lock_list { | |||
149 | struct lock_class *class; | 149 | struct lock_class *class; |
150 | struct stack_trace trace; | 150 | struct stack_trace trace; |
151 | int distance; | 151 | int distance; |
152 | |||
153 | /* | ||
154 | * The parent field is used to implement breadth-first search, and the | ||
155 | * bit 0 is reused to indicate if the lock has been accessed in BFS. | ||
156 | */ | ||
157 | struct lock_list *parent; | ||
152 | }; | 158 | }; |
153 | 159 | ||
154 | /* | 160 | /* |
@@ -208,10 +214,12 @@ struct held_lock { | |||
208 | * interrupt context: | 214 | * interrupt context: |
209 | */ | 215 | */ |
210 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ | 216 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ |
211 | unsigned int trylock:1; | 217 | unsigned int trylock:1; /* 16 bits */ |
218 | |||
212 | unsigned int read:2; /* see lock_acquire() comment */ | 219 | unsigned int read:2; /* see lock_acquire() comment */ |
213 | unsigned int check:2; /* see lock_acquire() comment */ | 220 | unsigned int check:2; /* see lock_acquire() comment */ |
214 | unsigned int hardirqs_off:1; | 221 | unsigned int hardirqs_off:1; |
222 | unsigned int references:11; /* 32 bits */ | ||
215 | }; | 223 | }; |
216 | 224 | ||
217 | /* | 225 | /* |
@@ -291,6 +299,10 @@ extern void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
291 | extern void lock_release(struct lockdep_map *lock, int nested, | 299 | extern void lock_release(struct lockdep_map *lock, int nested, |
292 | unsigned long ip); | 300 | unsigned long ip); |
293 | 301 | ||
302 | #define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map) | ||
303 | |||
304 | extern int lock_is_held(struct lockdep_map *lock); | ||
305 | |||
294 | extern void lock_set_class(struct lockdep_map *lock, const char *name, | 306 | extern void lock_set_class(struct lockdep_map *lock, const char *name, |
295 | struct lock_class_key *key, unsigned int subclass, | 307 | struct lock_class_key *key, unsigned int subclass, |
296 | unsigned long ip); | 308 | unsigned long ip); |
@@ -309,6 +321,8 @@ extern void lockdep_trace_alloc(gfp_t mask); | |||
309 | 321 | ||
310 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) | 322 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) |
311 | 323 | ||
324 | #define lockdep_assert_held(l) WARN_ON(debug_locks && !lockdep_is_held(l)) | ||
325 | |||
312 | #else /* !LOCKDEP */ | 326 | #else /* !LOCKDEP */ |
313 | 327 | ||
314 | static inline void lockdep_off(void) | 328 | static inline void lockdep_off(void) |
@@ -353,6 +367,8 @@ struct lock_class_key { }; | |||
353 | 367 | ||
354 | #define lockdep_depth(tsk) (0) | 368 | #define lockdep_depth(tsk) (0) |
355 | 369 | ||
370 | #define lockdep_assert_held(l) do { } while (0) | ||
371 | |||
356 | #endif /* !LOCKDEP */ | 372 | #endif /* !LOCKDEP */ |
357 | 373 | ||
358 | #ifdef CONFIG_LOCK_STAT | 374 | #ifdef CONFIG_LOCK_STAT |
diff --git a/include/linux/lsm_audit.h b/include/linux/lsm_audit.h index e461b2c3d711..190c37854870 100644 --- a/include/linux/lsm_audit.h +++ b/include/linux/lsm_audit.h | |||
@@ -33,6 +33,7 @@ struct common_audit_data { | |||
33 | #define LSM_AUDIT_DATA_IPC 4 | 33 | #define LSM_AUDIT_DATA_IPC 4 |
34 | #define LSM_AUDIT_DATA_TASK 5 | 34 | #define LSM_AUDIT_DATA_TASK 5 |
35 | #define LSM_AUDIT_DATA_KEY 6 | 35 | #define LSM_AUDIT_DATA_KEY 6 |
36 | #define LSM_AUDIT_NO_AUDIT 7 | ||
36 | struct task_struct *tsk; | 37 | struct task_struct *tsk; |
37 | union { | 38 | union { |
38 | struct { | 39 | struct { |
@@ -66,16 +67,19 @@ struct common_audit_data { | |||
66 | } key_struct; | 67 | } key_struct; |
67 | #endif | 68 | #endif |
68 | } u; | 69 | } u; |
69 | const char *function; | ||
70 | /* this union contains LSM specific data */ | 70 | /* this union contains LSM specific data */ |
71 | union { | 71 | union { |
72 | #ifdef CONFIG_SECURITY_SMACK | ||
72 | /* SMACK data */ | 73 | /* SMACK data */ |
73 | struct smack_audit_data { | 74 | struct smack_audit_data { |
75 | const char *function; | ||
74 | char *subject; | 76 | char *subject; |
75 | char *object; | 77 | char *object; |
76 | char *request; | 78 | char *request; |
77 | int result; | 79 | int result; |
78 | } smack_audit_data; | 80 | } smack_audit_data; |
81 | #endif | ||
82 | #ifdef CONFIG_SECURITY_SELINUX | ||
79 | /* SELinux data */ | 83 | /* SELinux data */ |
80 | struct { | 84 | struct { |
81 | u32 ssid; | 85 | u32 ssid; |
@@ -83,10 +87,12 @@ struct common_audit_data { | |||
83 | u16 tclass; | 87 | u16 tclass; |
84 | u32 requested; | 88 | u32 requested; |
85 | u32 audited; | 89 | u32 audited; |
90 | u32 denied; | ||
86 | struct av_decision *avd; | 91 | struct av_decision *avd; |
87 | int result; | 92 | int result; |
88 | } selinux_audit_data; | 93 | } selinux_audit_data; |
89 | } lsm_priv; | 94 | #endif |
95 | }; | ||
90 | /* these callback will be implemented by a specific LSM */ | 96 | /* these callback will be implemented by a specific LSM */ |
91 | void (*lsm_pre_audit)(struct audit_buffer *, void *); | 97 | void (*lsm_pre_audit)(struct audit_buffer *, void *); |
92 | void (*lsm_post_audit)(struct audit_buffer *, void *); | 98 | void (*lsm_post_audit)(struct audit_buffer *, void *); |
@@ -104,7 +110,7 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb, | |||
104 | /* Initialize an LSM audit data structure. */ | 110 | /* Initialize an LSM audit data structure. */ |
105 | #define COMMON_AUDIT_DATA_INIT(_d, _t) \ | 111 | #define COMMON_AUDIT_DATA_INIT(_d, _t) \ |
106 | { memset((_d), 0, sizeof(struct common_audit_data)); \ | 112 | { memset((_d), 0, sizeof(struct common_audit_data)); \ |
107 | (_d)->type = LSM_AUDIT_DATA_##_t; (_d)->function = __func__; } | 113 | (_d)->type = LSM_AUDIT_DATA_##_t; } |
108 | 114 | ||
109 | void common_lsm_audit(struct common_audit_data *a); | 115 | void common_lsm_audit(struct common_audit_data *a); |
110 | 116 | ||
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 7f9831da847f..4af841408fb5 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
@@ -168,6 +168,7 @@ struct bchannel { | |||
168 | extern int mISDN_initdchannel(struct dchannel *, int, void *); | 168 | extern int mISDN_initdchannel(struct dchannel *, int, void *); |
169 | extern int mISDN_initbchannel(struct bchannel *, int); | 169 | extern int mISDN_initbchannel(struct bchannel *, int); |
170 | extern int mISDN_freedchannel(struct dchannel *); | 170 | extern int mISDN_freedchannel(struct dchannel *); |
171 | extern void mISDN_clear_bchannel(struct bchannel *); | ||
171 | extern int mISDN_freebchannel(struct bchannel *); | 172 | extern int mISDN_freebchannel(struct bchannel *); |
172 | extern void queue_ch_frame(struct mISDNchannel *, u_int, | 173 | extern void queue_ch_frame(struct mISDNchannel *, u_int, |
173 | int, struct sk_buff *); | 174 | int, struct sk_buff *); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 45100b39a7cf..536ca12442ca 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
@@ -37,7 +37,7 @@ | |||
37 | */ | 37 | */ |
38 | #define MISDN_MAJOR_VERSION 1 | 38 | #define MISDN_MAJOR_VERSION 1 |
39 | #define MISDN_MINOR_VERSION 1 | 39 | #define MISDN_MINOR_VERSION 1 |
40 | #define MISDN_RELEASE 20 | 40 | #define MISDN_RELEASE 21 |
41 | 41 | ||
42 | /* primitives for information exchange | 42 | /* primitives for information exchange |
43 | * generell format | 43 | * generell format |
@@ -153,6 +153,18 @@ | |||
153 | #define HFC_VOL_CHANGE_RX 0x2602 | 153 | #define HFC_VOL_CHANGE_RX 0x2602 |
154 | #define HFC_SPL_LOOP_ON 0x2603 | 154 | #define HFC_SPL_LOOP_ON 0x2603 |
155 | #define HFC_SPL_LOOP_OFF 0x2604 | 155 | #define HFC_SPL_LOOP_OFF 0x2604 |
156 | /* for T30 FAX and analog modem */ | ||
157 | #define HW_MOD_FRM 0x4000 | ||
158 | #define HW_MOD_FRH 0x4001 | ||
159 | #define HW_MOD_FTM 0x4002 | ||
160 | #define HW_MOD_FTH 0x4003 | ||
161 | #define HW_MOD_FTS 0x4004 | ||
162 | #define HW_MOD_CONNECT 0x4010 | ||
163 | #define HW_MOD_OK 0x4011 | ||
164 | #define HW_MOD_NOCARR 0x4012 | ||
165 | #define HW_MOD_FCERROR 0x4013 | ||
166 | #define HW_MOD_READY 0x4014 | ||
167 | #define HW_MOD_LASTDATA 0x4015 | ||
156 | 168 | ||
157 | /* DSP_TONE_PATT_ON parameter */ | 169 | /* DSP_TONE_PATT_ON parameter */ |
158 | #define TONE_OFF 0x0000 | 170 | #define TONE_OFF 0x0000 |
@@ -224,6 +236,8 @@ | |||
224 | #define ISDN_P_B_L2DTMF 0x24 | 236 | #define ISDN_P_B_L2DTMF 0x24 |
225 | #define ISDN_P_B_L2DSP 0x25 | 237 | #define ISDN_P_B_L2DSP 0x25 |
226 | #define ISDN_P_B_L2DSPHDLC 0x26 | 238 | #define ISDN_P_B_L2DSPHDLC 0x26 |
239 | #define ISDN_P_B_T30_FAX 0x27 | ||
240 | #define ISDN_P_B_MODEM_ASYNC 0x28 | ||
227 | 241 | ||
228 | #define OPTION_L2_PMX 1 | 242 | #define OPTION_L2_PMX 1 |
229 | #define OPTION_L2_PTP 2 | 243 | #define OPTION_L2_PTP 2 |
diff --git a/include/linux/mdio.h b/include/linux/mdio.h index cfdf1df2875e..c779b49a1fda 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h | |||
@@ -304,7 +304,7 @@ static inline __u16 mdio_phy_id_devad(int phy_id) | |||
304 | */ | 304 | */ |
305 | struct mdio_if_info { | 305 | struct mdio_if_info { |
306 | int prtad; | 306 | int prtad; |
307 | u32 __bitwise mmds; | 307 | u32 mmds; |
308 | unsigned mode_support; | 308 | unsigned mode_support; |
309 | 309 | ||
310 | struct net_device *dev; | 310 | struct net_device *dev; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index ba3a7cb1eaa0..9a72cc78e6b8 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -34,8 +34,6 @@ extern int sysctl_legacy_va_layout; | |||
34 | #define sysctl_legacy_va_layout 0 | 34 | #define sysctl_legacy_va_layout 0 |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | extern unsigned long mmap_min_addr; | ||
38 | |||
39 | #include <asm/page.h> | 37 | #include <asm/page.h> |
40 | #include <asm/pgtable.h> | 38 | #include <asm/pgtable.h> |
41 | #include <asm/processor.h> | 39 | #include <asm/processor.h> |
@@ -575,19 +573,6 @@ static inline void set_page_links(struct page *page, enum zone_type zone, | |||
575 | } | 573 | } |
576 | 574 | ||
577 | /* | 575 | /* |
578 | * If a hint addr is less than mmap_min_addr change hint to be as | ||
579 | * low as possible but still greater than mmap_min_addr | ||
580 | */ | ||
581 | static inline unsigned long round_hint_to_min(unsigned long hint) | ||
582 | { | ||
583 | hint &= PAGE_MASK; | ||
584 | if (((void *)hint != NULL) && | ||
585 | (hint < mmap_min_addr)) | ||
586 | return PAGE_ALIGN(mmap_min_addr); | ||
587 | return hint; | ||
588 | } | ||
589 | |||
590 | /* | ||
591 | * Some inline functions in vmstat.h depend on page_zone() | 576 | * Some inline functions in vmstat.h depend on page_zone() |
592 | */ | 577 | */ |
593 | #include <linux/vmstat.h> | 578 | #include <linux/vmstat.h> |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 7acc8439d9b3..0042090a4d70 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
@@ -240,8 +240,6 @@ struct mm_struct { | |||
240 | 240 | ||
241 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ | 241 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ |
242 | 242 | ||
243 | s8 oom_adj; /* OOM kill score adjustment (bit shift) */ | ||
244 | |||
245 | cpumask_t cpu_vm_mask; | 243 | cpumask_t cpu_vm_mask; |
246 | 244 | ||
247 | /* Architecture-specific MM context */ | 245 | /* Architecture-specific MM context */ |
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index 39751c8cde9c..2dbfb5a05994 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h | |||
@@ -22,6 +22,12 @@ | |||
22 | /* | 22 | /* |
23 | * Vendors and devices. Sort key: vendor first, device next. | 23 | * Vendors and devices. Sort key: vendor first, device next. |
24 | */ | 24 | */ |
25 | #define SDIO_VENDOR_ID_INTEL 0x0089 | ||
26 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402 | ||
27 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIFI 0x1403 | ||
28 | #define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404 | ||
29 | #define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405 | ||
30 | #define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406 | ||
25 | 31 | ||
26 | #define SDIO_VENDOR_ID_MARVELL 0x02df | 32 | #define SDIO_VENDOR_ID_MARVELL 0x02df |
27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 | 33 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 |
diff --git a/include/linux/module.h b/include/linux/module.h index 098bdb7bfacf..f8f92d015efe 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -17,10 +17,12 @@ | |||
17 | #include <linux/moduleparam.h> | 17 | #include <linux/moduleparam.h> |
18 | #include <linux/marker.h> | 18 | #include <linux/marker.h> |
19 | #include <linux/tracepoint.h> | 19 | #include <linux/tracepoint.h> |
20 | #include <asm/local.h> | ||
21 | 20 | ||
21 | #include <asm/local.h> | ||
22 | #include <asm/module.h> | 22 | #include <asm/module.h> |
23 | 23 | ||
24 | #include <trace/events/module.h> | ||
25 | |||
24 | /* Not Yet Implemented */ | 26 | /* Not Yet Implemented */ |
25 | #define MODULE_SUPPORTED_DEVICE(name) | 27 | #define MODULE_SUPPORTED_DEVICE(name) |
26 | 28 | ||
@@ -462,7 +464,10 @@ static inline local_t *__module_ref_addr(struct module *mod, int cpu) | |||
462 | static inline void __module_get(struct module *module) | 464 | static inline void __module_get(struct module *module) |
463 | { | 465 | { |
464 | if (module) { | 466 | if (module) { |
465 | local_inc(__module_ref_addr(module, get_cpu())); | 467 | unsigned int cpu = get_cpu(); |
468 | local_inc(__module_ref_addr(module, cpu)); | ||
469 | trace_module_get(module, _THIS_IP_, | ||
470 | local_read(__module_ref_addr(module, cpu))); | ||
466 | put_cpu(); | 471 | put_cpu(); |
467 | } | 472 | } |
468 | } | 473 | } |
@@ -473,8 +478,11 @@ static inline int try_module_get(struct module *module) | |||
473 | 478 | ||
474 | if (module) { | 479 | if (module) { |
475 | unsigned int cpu = get_cpu(); | 480 | unsigned int cpu = get_cpu(); |
476 | if (likely(module_is_live(module))) | 481 | if (likely(module_is_live(module))) { |
477 | local_inc(__module_ref_addr(module, cpu)); | 482 | local_inc(__module_ref_addr(module, cpu)); |
483 | trace_module_get(module, _THIS_IP_, | ||
484 | local_read(__module_ref_addr(module, cpu))); | ||
485 | } | ||
478 | else | 486 | else |
479 | ret = 0; | 487 | ret = 0; |
480 | put_cpu(); | 488 | put_cpu(); |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 5675b63a0631..0f32a9b6ff55 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -251,7 +251,7 @@ struct mtd_info { | |||
251 | 251 | ||
252 | static inline struct mtd_info *dev_to_mtd(struct device *dev) | 252 | static inline struct mtd_info *dev_to_mtd(struct device *dev) |
253 | { | 253 | { |
254 | return dev ? container_of(dev, struct mtd_info, dev) : NULL; | 254 | return dev ? dev_get_drvdata(dev) : NULL; |
255 | } | 255 | } |
256 | 256 | ||
257 | static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) | 257 | static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd) |
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h index af6dcb992bc3..274b6196091d 100644 --- a/include/linux/mtd/partitions.h +++ b/include/linux/mtd/partitions.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * MTD partitioning layer definitions | 2 | * MTD partitioning layer definitions |
3 | * | 3 | * |
4 | * (C) 2000 Nicolas Pitre <nico@cam.org> | 4 | * (C) 2000 Nicolas Pitre <nico@fluxnic.net> |
5 | * | 5 | * |
6 | * This code is GPL | 6 | * This code is GPL |
7 | */ | 7 | */ |
@@ -47,6 +47,8 @@ struct mtd_partition { | |||
47 | #define MTDPART_SIZ_FULL (0) | 47 | #define MTDPART_SIZ_FULL (0) |
48 | 48 | ||
49 | 49 | ||
50 | struct mtd_info; | ||
51 | |||
50 | int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); | 52 | int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int); |
51 | int del_mtd_partitions(struct mtd_info *); | 53 | int del_mtd_partitions(struct mtd_info *); |
52 | 54 | ||
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h index 3ceb0cc1bc78..2a739462caeb 100644 --- a/include/linux/net_dropmon.h +++ b/include/linux/net_dropmon.h | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
6 | #include <linux/types.h> | ||
7 | 6 | ||
8 | struct net_dm_drop_point { | 7 | struct net_dm_drop_point { |
9 | __u8 pc[8]; | 8 | __u8 pc[8]; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index d4a4d9867794..65ee1929b2b1 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -72,10 +72,6 @@ struct wireless_dev; | |||
72 | /* Backlog congestion levels */ | 72 | /* Backlog congestion levels */ |
73 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ | 73 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
74 | #define NET_RX_DROP 1 /* packet dropped */ | 74 | #define NET_RX_DROP 1 /* packet dropped */ |
75 | #define NET_RX_CN_LOW 2 /* storm alert, just in case */ | ||
76 | #define NET_RX_CN_MOD 3 /* Storm on its way! */ | ||
77 | #define NET_RX_CN_HIGH 4 /* The storm is here */ | ||
78 | #define NET_RX_BAD 5 /* packet dropped due to kernel error */ | ||
79 | 75 | ||
80 | /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It | 76 | /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It |
81 | * indicates that the device will soon be dropping packets, or already drops | 77 | * indicates that the device will soon be dropping packets, or already drops |
@@ -83,17 +79,19 @@ struct wireless_dev; | |||
83 | #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) | 79 | #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) |
84 | #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) | 80 | #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) |
85 | 81 | ||
82 | /* Driver transmit return codes */ | ||
83 | enum netdev_tx { | ||
84 | NETDEV_TX_OK = 0, /* driver took care of packet */ | ||
85 | NETDEV_TX_BUSY, /* driver tx path was busy*/ | ||
86 | NETDEV_TX_LOCKED = -1, /* driver tx lock was already taken */ | ||
87 | }; | ||
88 | typedef enum netdev_tx netdev_tx_t; | ||
89 | |||
86 | #endif | 90 | #endif |
87 | 91 | ||
88 | #define MAX_ADDR_LEN 32 /* Largest hardware address length */ | 92 | #define MAX_ADDR_LEN 32 /* Largest hardware address length */ |
89 | 93 | ||
90 | /* Driver transmit return codes */ | ||
91 | #define NETDEV_TX_OK 0 /* driver took care of packet */ | ||
92 | #define NETDEV_TX_BUSY 1 /* driver tx path was busy*/ | ||
93 | #define NETDEV_TX_LOCKED -1 /* driver tx lock was already taken */ | ||
94 | |||
95 | #ifdef __KERNEL__ | 94 | #ifdef __KERNEL__ |
96 | |||
97 | /* | 95 | /* |
98 | * Compute the worst case header length according to the protocols | 96 | * Compute the worst case header length according to the protocols |
99 | * used. | 97 | * used. |
@@ -511,9 +509,11 @@ struct netdev_queue { | |||
511 | * This function is called when network device transistions to the down | 509 | * This function is called when network device transistions to the down |
512 | * state. | 510 | * state. |
513 | * | 511 | * |
514 | * int (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev); | 512 | * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, |
513 | * struct net_device *dev); | ||
515 | * Called when a packet needs to be transmitted. | 514 | * Called when a packet needs to be transmitted. |
516 | * Must return NETDEV_TX_OK , NETDEV_TX_BUSY, or NETDEV_TX_LOCKED, | 515 | * Must return NETDEV_TX_OK , NETDEV_TX_BUSY. |
516 | * (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX) | ||
517 | * Required can not be NULL. | 517 | * Required can not be NULL. |
518 | * | 518 | * |
519 | * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); | 519 | * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); |
@@ -584,7 +584,7 @@ struct net_device_ops { | |||
584 | void (*ndo_uninit)(struct net_device *dev); | 584 | void (*ndo_uninit)(struct net_device *dev); |
585 | int (*ndo_open)(struct net_device *dev); | 585 | int (*ndo_open)(struct net_device *dev); |
586 | int (*ndo_stop)(struct net_device *dev); | 586 | int (*ndo_stop)(struct net_device *dev); |
587 | int (*ndo_start_xmit) (struct sk_buff *skb, | 587 | netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb, |
588 | struct net_device *dev); | 588 | struct net_device *dev); |
589 | u16 (*ndo_select_queue)(struct net_device *dev, | 589 | u16 (*ndo_select_queue)(struct net_device *dev, |
590 | struct sk_buff *skb); | 590 | struct sk_buff *skb); |
@@ -627,6 +627,8 @@ struct net_device_ops { | |||
627 | void (*ndo_poll_controller)(struct net_device *dev); | 627 | void (*ndo_poll_controller)(struct net_device *dev); |
628 | #endif | 628 | #endif |
629 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | 629 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) |
630 | int (*ndo_fcoe_enable)(struct net_device *dev); | ||
631 | int (*ndo_fcoe_disable)(struct net_device *dev); | ||
630 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, | 632 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, |
631 | u16 xid, | 633 | u16 xid, |
632 | struct scatterlist *sgl, | 634 | struct scatterlist *sgl, |
@@ -705,6 +707,7 @@ struct net_device | |||
705 | /* the GSO_MASK reserves bits 16 through 23 */ | 707 | /* the GSO_MASK reserves bits 16 through 23 */ |
706 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | 708 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ |
707 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | 709 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ |
710 | #define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ | ||
708 | 711 | ||
709 | /* Segmentation offload features */ | 712 | /* Segmentation offload features */ |
710 | #define NETIF_F_GSO_SHIFT 16 | 713 | #define NETIF_F_GSO_SHIFT 16 |
@@ -829,6 +832,9 @@ struct net_device | |||
829 | /* Number of TX queues currently active in device */ | 832 | /* Number of TX queues currently active in device */ |
830 | unsigned int real_num_tx_queues; | 833 | unsigned int real_num_tx_queues; |
831 | 834 | ||
835 | /* root qdisc from userspace point of view */ | ||
836 | struct Qdisc *qdisc; | ||
837 | |||
832 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | 838 | unsigned long tx_queue_len; /* Max frames per queue allowed */ |
833 | spinlock_t tx_global_lock; | 839 | spinlock_t tx_global_lock; |
834 | /* | 840 | /* |
@@ -992,6 +998,12 @@ static inline void *netdev_priv(const struct net_device *dev) | |||
992 | */ | 998 | */ |
993 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) | 999 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) |
994 | 1000 | ||
1001 | /* Set the sysfs device type for the network logical device to allow | ||
1002 | * fin grained indentification of different network device types. For | ||
1003 | * example Ethernet, Wirelss LAN, Bluetooth, WiMAX etc. | ||
1004 | */ | ||
1005 | #define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype)) | ||
1006 | |||
995 | /** | 1007 | /** |
996 | * netif_napi_add - initialize a napi context | 1008 | * netif_napi_add - initialize a napi context |
997 | * @dev: network device | 1009 | * @dev: network device |
@@ -1260,7 +1272,7 @@ static inline void netif_tx_wake_queue(struct netdev_queue *dev_queue) | |||
1260 | { | 1272 | { |
1261 | #ifdef CONFIG_NETPOLL_TRAP | 1273 | #ifdef CONFIG_NETPOLL_TRAP |
1262 | if (netpoll_trap()) { | 1274 | if (netpoll_trap()) { |
1263 | clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state); | 1275 | netif_tx_start_queue(dev_queue); |
1264 | return; | 1276 | return; |
1265 | } | 1277 | } |
1266 | #endif | 1278 | #endif |
@@ -1366,7 +1378,8 @@ static inline int netif_running(const struct net_device *dev) | |||
1366 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) | 1378 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) |
1367 | { | 1379 | { |
1368 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); | 1380 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
1369 | clear_bit(__QUEUE_STATE_XOFF, &txq->state); | 1381 | |
1382 | netif_tx_start_queue(txq); | ||
1370 | } | 1383 | } |
1371 | 1384 | ||
1372 | /** | 1385 | /** |
@@ -1383,7 +1396,7 @@ static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) | |||
1383 | if (netpoll_trap()) | 1396 | if (netpoll_trap()) |
1384 | return; | 1397 | return; |
1385 | #endif | 1398 | #endif |
1386 | set_bit(__QUEUE_STATE_XOFF, &txq->state); | 1399 | netif_tx_stop_queue(txq); |
1387 | } | 1400 | } |
1388 | 1401 | ||
1389 | /** | 1402 | /** |
@@ -1397,7 +1410,8 @@ static inline int __netif_subqueue_stopped(const struct net_device *dev, | |||
1397 | u16 queue_index) | 1410 | u16 queue_index) |
1398 | { | 1411 | { |
1399 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); | 1412 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
1400 | return test_bit(__QUEUE_STATE_XOFF, &txq->state); | 1413 | |
1414 | return netif_tx_queue_stopped(txq); | ||
1401 | } | 1415 | } |
1402 | 1416 | ||
1403 | static inline int netif_subqueue_stopped(const struct net_device *dev, | 1417 | static inline int netif_subqueue_stopped(const struct net_device *dev, |
@@ -1749,8 +1763,7 @@ static inline void netif_tx_unlock(struct net_device *dev) | |||
1749 | * force a schedule. | 1763 | * force a schedule. |
1750 | */ | 1764 | */ |
1751 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); | 1765 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); |
1752 | if (!test_bit(__QUEUE_STATE_XOFF, &txq->state)) | 1766 | netif_schedule_queue(txq); |
1753 | __netif_schedule(txq->qdisc); | ||
1754 | } | 1767 | } |
1755 | spin_unlock(&dev->tx_global_lock); | 1768 | spin_unlock(&dev->tx_global_lock); |
1756 | } | 1769 | } |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index bff4d5741d98..9f00da287f2c 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
@@ -58,7 +58,8 @@ struct nfgenmsg { | |||
58 | struct nfnl_callback | 58 | struct nfnl_callback |
59 | { | 59 | { |
60 | int (*call)(struct sock *nl, struct sk_buff *skb, | 60 | int (*call)(struct sock *nl, struct sk_buff *skb, |
61 | struct nlmsghdr *nlh, struct nlattr *cda[]); | 61 | const struct nlmsghdr *nlh, |
62 | const struct nlattr * const cda[]); | ||
62 | const struct nla_policy *policy; /* netlink attribute policy */ | 63 | const struct nla_policy *policy; /* netlink attribute policy */ |
63 | const u_int16_t attr_count; /* number of nlattr's */ | 64 | const u_int16_t attr_count; /* number of nlattr's */ |
64 | }; | 65 | }; |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 1030b7593898..812cb153cabb 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
@@ -238,9 +238,9 @@ struct xt_mtdtor_param { | |||
238 | */ | 238 | */ |
239 | struct xt_target_param { | 239 | struct xt_target_param { |
240 | const struct net_device *in, *out; | 240 | const struct net_device *in, *out; |
241 | unsigned int hooknum; | ||
242 | const struct xt_target *target; | 241 | const struct xt_target *target; |
243 | const void *targinfo; | 242 | const void *targinfo; |
243 | unsigned int hooknum; | ||
244 | u_int8_t family; | 244 | u_int8_t family; |
245 | }; | 245 | }; |
246 | 246 | ||
@@ -407,7 +407,7 @@ extern int xt_check_target(struct xt_tgchk_param *, | |||
407 | unsigned int size, u_int8_t proto, bool inv_proto); | 407 | unsigned int size, u_int8_t proto, bool inv_proto); |
408 | 408 | ||
409 | extern struct xt_table *xt_register_table(struct net *net, | 409 | extern struct xt_table *xt_register_table(struct net *net, |
410 | struct xt_table *table, | 410 | const struct xt_table *table, |
411 | struct xt_table_info *bootstrap, | 411 | struct xt_table_info *bootstrap, |
412 | struct xt_table_info *newinfo); | 412 | struct xt_table_info *newinfo); |
413 | extern void *xt_unregister_table(struct xt_table *table); | 413 | extern void *xt_unregister_table(struct xt_table *table); |
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h index 7635c8ffdadb..0a8545866752 100644 --- a/include/linux/netfilter/xt_CONNMARK.h +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
@@ -18,12 +18,6 @@ enum { | |||
18 | XT_CONNMARK_RESTORE | 18 | XT_CONNMARK_RESTORE |
19 | }; | 19 | }; |
20 | 20 | ||
21 | struct xt_connmark_target_info { | ||
22 | unsigned long mark; | ||
23 | unsigned long mask; | ||
24 | __u8 mode; | ||
25 | }; | ||
26 | |||
27 | struct xt_connmark_tginfo1 { | 21 | struct xt_connmark_tginfo1 { |
28 | __u32 ctmark, ctmask, nfmask; | 22 | __u32 ctmark, ctmask, nfmask; |
29 | __u8 mode; | 23 | __u8 mode; |
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h index 028304bcc0b1..bc9561bdef79 100644 --- a/include/linux/netfilter/xt_MARK.h +++ b/include/linux/netfilter/xt_MARK.h | |||
@@ -3,23 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | /* Version 0 */ | ||
7 | struct xt_mark_target_info { | ||
8 | unsigned long mark; | ||
9 | }; | ||
10 | |||
11 | /* Version 1 */ | ||
12 | enum { | ||
13 | XT_MARK_SET=0, | ||
14 | XT_MARK_AND, | ||
15 | XT_MARK_OR, | ||
16 | }; | ||
17 | |||
18 | struct xt_mark_target_info_v1 { | ||
19 | unsigned long mark; | ||
20 | __u8 mode; | ||
21 | }; | ||
22 | |||
23 | struct xt_mark_tginfo2 { | 6 | struct xt_mark_tginfo2 { |
24 | __u32 mark, mask; | 7 | __u32 mark, mask; |
25 | }; | 8 | }; |
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h index 571e266d004c..619e47cde01a 100644 --- a/include/linux/netfilter/xt_connmark.h +++ b/include/linux/netfilter/xt_connmark.h | |||
@@ -12,11 +12,6 @@ | |||
12 | * (at your option) any later version. | 12 | * (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | struct xt_connmark_info { | ||
16 | unsigned long mark, mask; | ||
17 | __u8 invert; | ||
18 | }; | ||
19 | |||
20 | struct xt_connmark_mtinfo1 { | 15 | struct xt_connmark_mtinfo1 { |
21 | __u32 mark, mask; | 16 | __u32 mark, mask; |
22 | __u8 invert; | 17 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h index 7ae05338e94c..54f47a2f6152 100644 --- a/include/linux/netfilter/xt_conntrack.h +++ b/include/linux/netfilter/xt_conntrack.h | |||
@@ -32,42 +32,6 @@ enum { | |||
32 | XT_CONNTRACK_DIRECTION = 1 << 12, | 32 | XT_CONNTRACK_DIRECTION = 1 << 12, |
33 | }; | 33 | }; |
34 | 34 | ||
35 | /* This is exposed to userspace, so remains frozen in time. */ | ||
36 | struct ip_conntrack_old_tuple | ||
37 | { | ||
38 | struct { | ||
39 | __be32 ip; | ||
40 | union { | ||
41 | __u16 all; | ||
42 | } u; | ||
43 | } src; | ||
44 | |||
45 | struct { | ||
46 | __be32 ip; | ||
47 | union { | ||
48 | __u16 all; | ||
49 | } u; | ||
50 | |||
51 | /* The protocol. */ | ||
52 | __u16 protonum; | ||
53 | } dst; | ||
54 | }; | ||
55 | |||
56 | struct xt_conntrack_info | ||
57 | { | ||
58 | unsigned int statemask, statusmask; | ||
59 | |||
60 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | ||
61 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | ||
62 | |||
63 | unsigned long expires_min, expires_max; | ||
64 | |||
65 | /* Flags word */ | ||
66 | __u8 flags; | ||
67 | /* Inverse flags */ | ||
68 | __u8 invflags; | ||
69 | }; | ||
70 | |||
71 | struct xt_conntrack_mtinfo1 { | 35 | struct xt_conntrack_mtinfo1 { |
72 | union nf_inet_addr origsrc_addr, origsrc_mask; | 36 | union nf_inet_addr origsrc_addr, origsrc_mask; |
73 | union nf_inet_addr origdst_addr, origdst_mask; | 37 | union nf_inet_addr origdst_addr, origdst_mask; |
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h index 6fa460a3cc29..6607c8f38ea5 100644 --- a/include/linux/netfilter/xt_mark.h +++ b/include/linux/netfilter/xt_mark.h | |||
@@ -3,11 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | struct xt_mark_info { | ||
7 | unsigned long mark, mask; | ||
8 | __u8 invert; | ||
9 | }; | ||
10 | |||
11 | struct xt_mark_mtinfo1 { | 6 | struct xt_mark_mtinfo1 { |
12 | __u32 mark, mask; | 7 | __u32 mark, mask; |
13 | __u8 invert; | 8 | __u8 invert; |
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h index 590ac3d6d5d6..6fe3e6aa10db 100644 --- a/include/linux/netfilter_arp/arp_tables.h +++ b/include/linux/netfilter_arp/arp_tables.h | |||
@@ -265,7 +265,7 @@ struct arpt_error | |||
265 | } | 265 | } |
266 | 266 | ||
267 | extern struct xt_table *arpt_register_table(struct net *net, | 267 | extern struct xt_table *arpt_register_table(struct net *net, |
268 | struct xt_table *table, | 268 | const struct xt_table *table, |
269 | const struct arpt_replace *repl); | 269 | const struct arpt_replace *repl); |
270 | extern void arpt_unregister_table(struct xt_table *table); | 270 | extern void arpt_unregister_table(struct xt_table *table); |
271 | extern unsigned int arpt_do_table(struct sk_buff *skb, | 271 | extern unsigned int arpt_do_table(struct sk_buff *skb, |
diff --git a/include/linux/netfilter_bridge/ebtables.h b/include/linux/netfilter_bridge/ebtables.h index e40ddb94b1af..ea281e6a2048 100644 --- a/include/linux/netfilter_bridge/ebtables.h +++ b/include/linux/netfilter_bridge/ebtables.h | |||
@@ -301,7 +301,7 @@ struct ebt_table | |||
301 | #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \ | 301 | #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \ |
302 | ~(__alignof__(struct ebt_replace)-1)) | 302 | ~(__alignof__(struct ebt_replace)-1)) |
303 | extern struct ebt_table *ebt_register_table(struct net *net, | 303 | extern struct ebt_table *ebt_register_table(struct net *net, |
304 | struct ebt_table *table); | 304 | const struct ebt_table *table); |
305 | extern void ebt_unregister_table(struct ebt_table *table); | 305 | extern void ebt_unregister_table(struct ebt_table *table); |
306 | extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, | 306 | extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, |
307 | const struct net_device *in, const struct net_device *out, | 307 | const struct net_device *in, const struct net_device *out, |
diff --git a/include/linux/netfilter_ipv4/Kbuild b/include/linux/netfilter_ipv4/Kbuild index 3a7105bb8f33..431b40761920 100644 --- a/include/linux/netfilter_ipv4/Kbuild +++ b/include/linux/netfilter_ipv4/Kbuild | |||
@@ -1,46 +1,14 @@ | |||
1 | header-y += ipt_CLASSIFY.h | ||
2 | header-y += ipt_CLUSTERIP.h | 1 | header-y += ipt_CLUSTERIP.h |
3 | header-y += ipt_CONNMARK.h | ||
4 | header-y += ipt_DSCP.h | ||
5 | header-y += ipt_ECN.h | 2 | header-y += ipt_ECN.h |
6 | header-y += ipt_LOG.h | 3 | header-y += ipt_LOG.h |
7 | header-y += ipt_MARK.h | ||
8 | header-y += ipt_NFQUEUE.h | ||
9 | header-y += ipt_REJECT.h | 4 | header-y += ipt_REJECT.h |
10 | header-y += ipt_SAME.h | 5 | header-y += ipt_SAME.h |
11 | header-y += ipt_TCPMSS.h | ||
12 | header-y += ipt_TOS.h | ||
13 | header-y += ipt_TTL.h | 6 | header-y += ipt_TTL.h |
14 | header-y += ipt_ULOG.h | 7 | header-y += ipt_ULOG.h |
15 | header-y += ipt_addrtype.h | 8 | header-y += ipt_addrtype.h |
16 | header-y += ipt_ah.h | 9 | header-y += ipt_ah.h |
17 | header-y += ipt_comment.h | ||
18 | header-y += ipt_connbytes.h | ||
19 | header-y += ipt_connmark.h | ||
20 | header-y += ipt_conntrack.h | ||
21 | header-y += ipt_dccp.h | ||
22 | header-y += ipt_dscp.h | ||
23 | header-y += ipt_ecn.h | 10 | header-y += ipt_ecn.h |
24 | header-y += ipt_esp.h | ||
25 | header-y += ipt_hashlimit.h | ||
26 | header-y += ipt_helper.h | ||
27 | header-y += ipt_iprange.h | ||
28 | header-y += ipt_length.h | ||
29 | header-y += ipt_limit.h | ||
30 | header-y += ipt_mac.h | ||
31 | header-y += ipt_mark.h | ||
32 | header-y += ipt_multiport.h | ||
33 | header-y += ipt_owner.h | ||
34 | header-y += ipt_physdev.h | ||
35 | header-y += ipt_pkttype.h | ||
36 | header-y += ipt_policy.h | ||
37 | header-y += ipt_realm.h | 11 | header-y += ipt_realm.h |
38 | header-y += ipt_recent.h | ||
39 | header-y += ipt_sctp.h | ||
40 | header-y += ipt_state.h | ||
41 | header-y += ipt_string.h | ||
42 | header-y += ipt_tcpmss.h | ||
43 | header-y += ipt_tos.h | ||
44 | header-y += ipt_ttl.h | 12 | header-y += ipt_ttl.h |
45 | 13 | ||
46 | unifdef-y += ip_queue.h | 14 | unifdef-y += ip_queue.h |
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index 092bd50581a9..61fafc868a7b 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h | |||
@@ -245,7 +245,7 @@ ipt_get_target(struct ipt_entry *e) | |||
245 | extern void ipt_init(void) __init; | 245 | extern void ipt_init(void) __init; |
246 | 246 | ||
247 | extern struct xt_table *ipt_register_table(struct net *net, | 247 | extern struct xt_table *ipt_register_table(struct net *net, |
248 | struct xt_table *table, | 248 | const struct xt_table *table, |
249 | const struct ipt_replace *repl); | 249 | const struct ipt_replace *repl); |
250 | extern void ipt_unregister_table(struct xt_table *table); | 250 | extern void ipt_unregister_table(struct xt_table *table); |
251 | 251 | ||
diff --git a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h deleted file mode 100644 index a46d511b5c36..000000000000 --- a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_CLASSIFY_H | ||
2 | #define _IPT_CLASSIFY_H | ||
3 | |||
4 | #include <linux/netfilter/xt_CLASSIFY.h> | ||
5 | #define ipt_classify_target_info xt_classify_target_info | ||
6 | |||
7 | #endif /*_IPT_CLASSIFY_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_CONNMARK.h b/include/linux/netfilter_ipv4/ipt_CONNMARK.h deleted file mode 100644 index 9ecfee0a9e33..000000000000 --- a/include/linux/netfilter_ipv4/ipt_CONNMARK.h +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | #ifndef _IPT_CONNMARK_H_target | ||
2 | #define _IPT_CONNMARK_H_target | ||
3 | |||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | #include <linux/netfilter/xt_CONNMARK.h> | ||
13 | #define IPT_CONNMARK_SET XT_CONNMARK_SET | ||
14 | #define IPT_CONNMARK_SAVE XT_CONNMARK_SAVE | ||
15 | #define IPT_CONNMARK_RESTORE XT_CONNMARK_RESTORE | ||
16 | |||
17 | #define ipt_connmark_target_info xt_connmark_target_info | ||
18 | |||
19 | #endif /*_IPT_CONNMARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_DSCP.h b/include/linux/netfilter_ipv4/ipt_DSCP.h deleted file mode 100644 index 3491e524d5ea..000000000000 --- a/include/linux/netfilter_ipv4/ipt_DSCP.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | /* iptables module for setting the IPv4 DSCP field | ||
2 | * | ||
3 | * (C) 2002 Harald Welte <laforge@gnumonks.org> | ||
4 | * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com> | ||
5 | * This software is distributed under GNU GPL v2, 1991 | ||
6 | * | ||
7 | * See RFC2474 for a description of the DSCP field within the IP Header. | ||
8 | * | ||
9 | * ipt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp | ||
10 | */ | ||
11 | #ifndef _IPT_DSCP_TARGET_H | ||
12 | #define _IPT_DSCP_TARGET_H | ||
13 | #include <linux/netfilter_ipv4/ipt_dscp.h> | ||
14 | #include <linux/netfilter/xt_DSCP.h> | ||
15 | |||
16 | #define ipt_DSCP_info xt_DSCP_info | ||
17 | |||
18 | #endif /* _IPT_DSCP_TARGET_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ECN.h b/include/linux/netfilter_ipv4/ipt_ECN.h index 94e0d9866469..7ca45918ab8e 100644 --- a/include/linux/netfilter_ipv4/ipt_ECN.h +++ b/include/linux/netfilter_ipv4/ipt_ECN.h | |||
@@ -8,9 +8,9 @@ | |||
8 | */ | 8 | */ |
9 | #ifndef _IPT_ECN_TARGET_H | 9 | #ifndef _IPT_ECN_TARGET_H |
10 | #define _IPT_ECN_TARGET_H | 10 | #define _IPT_ECN_TARGET_H |
11 | #include <linux/netfilter_ipv4/ipt_DSCP.h> | 11 | #include <linux/netfilter/xt_DSCP.h> |
12 | 12 | ||
13 | #define IPT_ECN_IP_MASK (~IPT_DSCP_MASK) | 13 | #define IPT_ECN_IP_MASK (~XT_DSCP_MASK) |
14 | 14 | ||
15 | #define IPT_ECN_OP_SET_IP 0x01 /* set ECN bits of IPv4 header */ | 15 | #define IPT_ECN_OP_SET_IP 0x01 /* set ECN bits of IPv4 header */ |
16 | #define IPT_ECN_OP_SET_ECE 0x10 /* set ECE bit of TCP header */ | 16 | #define IPT_ECN_OP_SET_ECE 0x10 /* set ECE bit of TCP header */ |
diff --git a/include/linux/netfilter_ipv4/ipt_MARK.h b/include/linux/netfilter_ipv4/ipt_MARK.h deleted file mode 100644 index 697a486a96d3..000000000000 --- a/include/linux/netfilter_ipv4/ipt_MARK.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _IPT_MARK_H_target | ||
2 | #define _IPT_MARK_H_target | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_MARK.h> | ||
7 | |||
8 | /* Version 0 */ | ||
9 | #define ipt_mark_target_info xt_mark_target_info | ||
10 | |||
11 | /* Version 1 */ | ||
12 | #define IPT_MARK_SET XT_MARK_SET | ||
13 | #define IPT_MARK_AND XT_MARK_AND | ||
14 | #define IPT_MARK_OR XT_MARK_OR | ||
15 | |||
16 | #define ipt_mark_target_info_v1 xt_mark_target_info_v1 | ||
17 | |||
18 | #endif /*_IPT_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h deleted file mode 100644 index 97a2a7557cb9..000000000000 --- a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | /* iptables module for using NFQUEUE mechanism | ||
2 | * | ||
3 | * (C) 2005 Harald Welte <laforge@netfilter.org> | ||
4 | * | ||
5 | * This software is distributed under GNU GPL v2, 1991 | ||
6 | * | ||
7 | */ | ||
8 | #ifndef _IPT_NFQ_TARGET_H | ||
9 | #define _IPT_NFQ_TARGET_H | ||
10 | |||
11 | /* Backwards compatibility for old userspace */ | ||
12 | #include <linux/netfilter/xt_NFQUEUE.h> | ||
13 | |||
14 | #define ipt_NFQ_info xt_NFQ_info | ||
15 | |||
16 | #endif /* _IPT_DSCP_TARGET_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_TCPMSS.h b/include/linux/netfilter_ipv4/ipt_TCPMSS.h deleted file mode 100644 index 7a850f945824..000000000000 --- a/include/linux/netfilter_ipv4/ipt_TCPMSS.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IPT_TCPMSS_H | ||
2 | #define _IPT_TCPMSS_H | ||
3 | |||
4 | #include <linux/netfilter/xt_TCPMSS.h> | ||
5 | |||
6 | #define ipt_tcpmss_info xt_tcpmss_info | ||
7 | #define IPT_TCPMSS_CLAMP_PMTU XT_TCPMSS_CLAMP_PMTU | ||
8 | |||
9 | #endif /*_IPT_TCPMSS_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_TOS.h b/include/linux/netfilter_ipv4/ipt_TOS.h deleted file mode 100644 index 6bf9e1fdfd88..000000000000 --- a/include/linux/netfilter_ipv4/ipt_TOS.h +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #ifndef _IPT_TOS_H_target | ||
2 | #define _IPT_TOS_H_target | ||
3 | |||
4 | #ifndef IPTOS_NORMALSVC | ||
5 | #define IPTOS_NORMALSVC 0 | ||
6 | #endif | ||
7 | |||
8 | struct ipt_tos_target_info { | ||
9 | u_int8_t tos; | ||
10 | }; | ||
11 | |||
12 | #endif /*_IPT_TOS_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_comment.h b/include/linux/netfilter_ipv4/ipt_comment.h deleted file mode 100644 index ae2afc2f7481..000000000000 --- a/include/linux/netfilter_ipv4/ipt_comment.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IPT_COMMENT_H | ||
2 | #define _IPT_COMMENT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_comment.h> | ||
5 | |||
6 | #define IPT_MAX_COMMENT_LEN XT_MAX_COMMENT_LEN | ||
7 | |||
8 | #define ipt_comment_info xt_comment_info | ||
9 | |||
10 | #endif /* _IPT_COMMENT_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_connbytes.h b/include/linux/netfilter_ipv4/ipt_connbytes.h deleted file mode 100644 index f63e6ee91113..000000000000 --- a/include/linux/netfilter_ipv4/ipt_connbytes.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _IPT_CONNBYTES_H | ||
2 | #define _IPT_CONNBYTES_H | ||
3 | |||
4 | #include <linux/netfilter/xt_connbytes.h> | ||
5 | #define ipt_connbytes_what xt_connbytes_what | ||
6 | |||
7 | #define IPT_CONNBYTES_PKTS XT_CONNBYTES_PKTS | ||
8 | #define IPT_CONNBYTES_BYTES XT_CONNBYTES_BYTES | ||
9 | #define IPT_CONNBYTES_AVGPKT XT_CONNBYTES_AVGPKT | ||
10 | |||
11 | #define ipt_connbytes_direction xt_connbytes_direction | ||
12 | #define IPT_CONNBYTES_DIR_ORIGINAL XT_CONNBYTES_DIR_ORIGINAL | ||
13 | #define IPT_CONNBYTES_DIR_REPLY XT_CONNBYTES_DIR_REPLY | ||
14 | #define IPT_CONNBYTES_DIR_BOTH XT_CONNBYTES_DIR_BOTH | ||
15 | |||
16 | #define ipt_connbytes_info xt_connbytes_info | ||
17 | |||
18 | #endif | ||
diff --git a/include/linux/netfilter_ipv4/ipt_connmark.h b/include/linux/netfilter_ipv4/ipt_connmark.h deleted file mode 100644 index c7ba6560d44c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_connmark.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_CONNMARK_H | ||
2 | #define _IPT_CONNMARK_H | ||
3 | |||
4 | #include <linux/netfilter/xt_connmark.h> | ||
5 | #define ipt_connmark_info xt_connmark_info | ||
6 | |||
7 | #endif /*_IPT_CONNMARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_conntrack.h b/include/linux/netfilter_ipv4/ipt_conntrack.h deleted file mode 100644 index cde6762949c5..000000000000 --- a/include/linux/netfilter_ipv4/ipt_conntrack.h +++ /dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | /* Header file for kernel module to match connection tracking information. | ||
2 | * GPL (C) 2001 Marc Boucher (marc@mbsi.ca). | ||
3 | */ | ||
4 | |||
5 | #ifndef _IPT_CONNTRACK_H | ||
6 | #define _IPT_CONNTRACK_H | ||
7 | |||
8 | #include <linux/netfilter/xt_conntrack.h> | ||
9 | |||
10 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) XT_CONNTRACK_STATE_BIT(ctinfo) | ||
11 | #define IPT_CONNTRACK_STATE_INVALID XT_CONNTRACK_STATE_INVALID | ||
12 | |||
13 | #define IPT_CONNTRACK_STATE_SNAT XT_CONNTRACK_STATE_SNAT | ||
14 | #define IPT_CONNTRACK_STATE_DNAT XT_CONNTRACK_STATE_DNAT | ||
15 | #define IPT_CONNTRACK_STATE_UNTRACKED XT_CONNTRACK_STATE_UNTRACKED | ||
16 | |||
17 | /* flags, invflags: */ | ||
18 | #define IPT_CONNTRACK_STATE XT_CONNTRACK_STATE | ||
19 | #define IPT_CONNTRACK_PROTO XT_CONNTRACK_PROTO | ||
20 | #define IPT_CONNTRACK_ORIGSRC XT_CONNTRACK_ORIGSRC | ||
21 | #define IPT_CONNTRACK_ORIGDST XT_CONNTRACK_ORIGDST | ||
22 | #define IPT_CONNTRACK_REPLSRC XT_CONNTRACK_REPLSRC | ||
23 | #define IPT_CONNTRACK_REPLDST XT_CONNTRACK_REPLDST | ||
24 | #define IPT_CONNTRACK_STATUS XT_CONNTRACK_STATUS | ||
25 | #define IPT_CONNTRACK_EXPIRES XT_CONNTRACK_EXPIRES | ||
26 | |||
27 | #define ipt_conntrack_info xt_conntrack_info | ||
28 | #endif /*_IPT_CONNTRACK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_dccp.h b/include/linux/netfilter_ipv4/ipt_dccp.h deleted file mode 100644 index e70d11e1f53c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_dccp.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _IPT_DCCP_H_ | ||
2 | #define _IPT_DCCP_H_ | ||
3 | |||
4 | #include <linux/netfilter/xt_dccp.h> | ||
5 | #define IPT_DCCP_SRC_PORTS XT_DCCP_SRC_PORTS | ||
6 | #define IPT_DCCP_DEST_PORTS XT_DCCP_DEST_PORTS | ||
7 | #define IPT_DCCP_TYPE XT_DCCP_TYPE | ||
8 | #define IPT_DCCP_OPTION XT_DCCP_OPTION | ||
9 | |||
10 | #define IPT_DCCP_VALID_FLAGS XT_DCCP_VALID_FLAGS | ||
11 | |||
12 | #define ipt_dccp_info xt_dccp_info | ||
13 | |||
14 | #endif /* _IPT_DCCP_H_ */ | ||
15 | |||
diff --git a/include/linux/netfilter_ipv4/ipt_dscp.h b/include/linux/netfilter_ipv4/ipt_dscp.h deleted file mode 100644 index 4b82ca912b0e..000000000000 --- a/include/linux/netfilter_ipv4/ipt_dscp.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | /* iptables module for matching the IPv4 DSCP field | ||
2 | * | ||
3 | * (C) 2002 Harald Welte <laforge@gnumonks.org> | ||
4 | * This software is distributed under GNU GPL v2, 1991 | ||
5 | * | ||
6 | * See RFC2474 for a description of the DSCP field within the IP Header. | ||
7 | * | ||
8 | * ipt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp | ||
9 | */ | ||
10 | #ifndef _IPT_DSCP_H | ||
11 | #define _IPT_DSCP_H | ||
12 | |||
13 | #include <linux/netfilter/xt_dscp.h> | ||
14 | |||
15 | #define IPT_DSCP_MASK XT_DSCP_MASK | ||
16 | #define IPT_DSCP_SHIFT XT_DSCP_SHIFT | ||
17 | #define IPT_DSCP_MAX XT_DSCP_MAX | ||
18 | |||
19 | #define ipt_dscp_info xt_dscp_info | ||
20 | |||
21 | #endif /* _IPT_DSCP_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ecn.h b/include/linux/netfilter_ipv4/ipt_ecn.h index 1f0d9a4d3378..9945baa4ccd7 100644 --- a/include/linux/netfilter_ipv4/ipt_ecn.h +++ b/include/linux/netfilter_ipv4/ipt_ecn.h | |||
@@ -8,9 +8,9 @@ | |||
8 | */ | 8 | */ |
9 | #ifndef _IPT_ECN_H | 9 | #ifndef _IPT_ECN_H |
10 | #define _IPT_ECN_H | 10 | #define _IPT_ECN_H |
11 | #include <linux/netfilter_ipv4/ipt_dscp.h> | 11 | #include <linux/netfilter/xt_dscp.h> |
12 | 12 | ||
13 | #define IPT_ECN_IP_MASK (~IPT_DSCP_MASK) | 13 | #define IPT_ECN_IP_MASK (~XT_DSCP_MASK) |
14 | 14 | ||
15 | #define IPT_ECN_OP_MATCH_IP 0x01 | 15 | #define IPT_ECN_OP_MATCH_IP 0x01 |
16 | #define IPT_ECN_OP_MATCH_ECE 0x10 | 16 | #define IPT_ECN_OP_MATCH_ECE 0x10 |
diff --git a/include/linux/netfilter_ipv4/ipt_esp.h b/include/linux/netfilter_ipv4/ipt_esp.h deleted file mode 100644 index 78296e7eeff9..000000000000 --- a/include/linux/netfilter_ipv4/ipt_esp.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IPT_ESP_H | ||
2 | #define _IPT_ESP_H | ||
3 | |||
4 | #include <linux/netfilter/xt_esp.h> | ||
5 | |||
6 | #define ipt_esp xt_esp | ||
7 | #define IPT_ESP_INV_SPI XT_ESP_INV_SPI | ||
8 | #define IPT_ESP_INV_MASK XT_ESP_INV_MASK | ||
9 | |||
10 | #endif /*_IPT_ESP_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_hashlimit.h b/include/linux/netfilter_ipv4/ipt_hashlimit.h deleted file mode 100644 index 5662120a3d7b..000000000000 --- a/include/linux/netfilter_ipv4/ipt_hashlimit.h +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | #ifndef _IPT_HASHLIMIT_H | ||
2 | #define _IPT_HASHLIMIT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_hashlimit.h> | ||
5 | |||
6 | #define IPT_HASHLIMIT_SCALE XT_HASHLIMIT_SCALE | ||
7 | #define IPT_HASHLIMIT_HASH_DIP XT_HASHLIMIT_HASH_DIP | ||
8 | #define IPT_HASHLIMIT_HASH_DPT XT_HASHLIMIT_HASH_DPT | ||
9 | #define IPT_HASHLIMIT_HASH_SIP XT_HASHLIMIT_HASH_SIP | ||
10 | #define IPT_HASHLIMIT_HASH_SPT XT_HASHLIMIT_HASH_SPT | ||
11 | |||
12 | #define ipt_hashlimit_info xt_hashlimit_info | ||
13 | |||
14 | #endif /* _IPT_HASHLIMIT_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_helper.h b/include/linux/netfilter_ipv4/ipt_helper.h deleted file mode 100644 index 80452c218551..000000000000 --- a/include/linux/netfilter_ipv4/ipt_helper.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_HELPER_H | ||
2 | #define _IPT_HELPER_H | ||
3 | |||
4 | #include <linux/netfilter/xt_helper.h> | ||
5 | #define ipt_helper_info xt_helper_info | ||
6 | |||
7 | #endif /* _IPT_HELPER_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_iprange.h b/include/linux/netfilter_ipv4/ipt_iprange.h deleted file mode 100644 index 5f1aebde4d2f..000000000000 --- a/include/linux/netfilter_ipv4/ipt_iprange.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef _IPT_IPRANGE_H | ||
2 | #define _IPT_IPRANGE_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/netfilter/xt_iprange.h> | ||
6 | |||
7 | struct ipt_iprange { | ||
8 | /* Inclusive: network order. */ | ||
9 | __be32 min_ip, max_ip; | ||
10 | }; | ||
11 | |||
12 | struct ipt_iprange_info | ||
13 | { | ||
14 | struct ipt_iprange src; | ||
15 | struct ipt_iprange dst; | ||
16 | |||
17 | /* Flags from above */ | ||
18 | u_int8_t flags; | ||
19 | }; | ||
20 | |||
21 | #endif /* _IPT_IPRANGE_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_length.h b/include/linux/netfilter_ipv4/ipt_length.h deleted file mode 100644 index 9b45206ffcef..000000000000 --- a/include/linux/netfilter_ipv4/ipt_length.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_LENGTH_H | ||
2 | #define _IPT_LENGTH_H | ||
3 | |||
4 | #include <linux/netfilter/xt_length.h> | ||
5 | #define ipt_length_info xt_length_info | ||
6 | |||
7 | #endif /*_IPT_LENGTH_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_limit.h b/include/linux/netfilter_ipv4/ipt_limit.h deleted file mode 100644 index 92f5cd07bbc4..000000000000 --- a/include/linux/netfilter_ipv4/ipt_limit.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _IPT_RATE_H | ||
2 | #define _IPT_RATE_H | ||
3 | |||
4 | #include <linux/netfilter/xt_limit.h> | ||
5 | #define IPT_LIMIT_SCALE XT_LIMIT_SCALE | ||
6 | #define ipt_rateinfo xt_rateinfo | ||
7 | |||
8 | #endif /*_IPT_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_mac.h b/include/linux/netfilter_ipv4/ipt_mac.h deleted file mode 100644 index b186008a3c47..000000000000 --- a/include/linux/netfilter_ipv4/ipt_mac.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_MAC_H | ||
2 | #define _IPT_MAC_H | ||
3 | |||
4 | #include <linux/netfilter/xt_mac.h> | ||
5 | #define ipt_mac_info xt_mac_info | ||
6 | |||
7 | #endif /*_IPT_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_mark.h b/include/linux/netfilter_ipv4/ipt_mark.h deleted file mode 100644 index bfde67c61224..000000000000 --- a/include/linux/netfilter_ipv4/ipt_mark.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IPT_MARK_H | ||
2 | #define _IPT_MARK_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | #include <linux/netfilter/xt_mark.h> | ||
6 | |||
7 | #define ipt_mark_info xt_mark_info | ||
8 | |||
9 | #endif /*_IPT_MARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_multiport.h b/include/linux/netfilter_ipv4/ipt_multiport.h deleted file mode 100644 index 55fe85eca88c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_multiport.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _IPT_MULTIPORT_H | ||
2 | #define _IPT_MULTIPORT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_multiport.h> | ||
5 | |||
6 | #define IPT_MULTIPORT_SOURCE XT_MULTIPORT_SOURCE | ||
7 | #define IPT_MULTIPORT_DESTINATION XT_MULTIPORT_DESTINATION | ||
8 | #define IPT_MULTIPORT_EITHER XT_MULTIPORT_EITHER | ||
9 | |||
10 | #define IPT_MULTI_PORTS XT_MULTI_PORTS | ||
11 | |||
12 | #define ipt_multiport xt_multiport | ||
13 | #define ipt_multiport_v1 xt_multiport_v1 | ||
14 | |||
15 | #endif /*_IPT_MULTIPORT_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_owner.h b/include/linux/netfilter_ipv4/ipt_owner.h deleted file mode 100644 index a78445be9992..000000000000 --- a/include/linux/netfilter_ipv4/ipt_owner.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef _IPT_OWNER_H | ||
2 | #define _IPT_OWNER_H | ||
3 | |||
4 | /* match and invert flags */ | ||
5 | #define IPT_OWNER_UID 0x01 | ||
6 | #define IPT_OWNER_GID 0x02 | ||
7 | #define IPT_OWNER_PID 0x04 | ||
8 | #define IPT_OWNER_SID 0x08 | ||
9 | #define IPT_OWNER_COMM 0x10 | ||
10 | |||
11 | struct ipt_owner_info { | ||
12 | __kernel_uid32_t uid; | ||
13 | __kernel_gid32_t gid; | ||
14 | __kernel_pid_t pid; | ||
15 | __kernel_pid_t sid; | ||
16 | char comm[16]; | ||
17 | u_int8_t match, invert; /* flags */ | ||
18 | }; | ||
19 | |||
20 | #endif /*_IPT_OWNER_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_physdev.h b/include/linux/netfilter_ipv4/ipt_physdev.h deleted file mode 100644 index 2400e7140f26..000000000000 --- a/include/linux/netfilter_ipv4/ipt_physdev.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | #ifndef _IPT_PHYSDEV_H | ||
2 | #define _IPT_PHYSDEV_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_physdev.h> | ||
7 | |||
8 | #define IPT_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN | ||
9 | #define IPT_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT | ||
10 | #define IPT_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED | ||
11 | #define IPT_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN | ||
12 | #define IPT_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT | ||
13 | #define IPT_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK | ||
14 | |||
15 | #define ipt_physdev_info xt_physdev_info | ||
16 | |||
17 | #endif /*_IPT_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_pkttype.h b/include/linux/netfilter_ipv4/ipt_pkttype.h deleted file mode 100644 index ff1fbc949a0c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_pkttype.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_PKTTYPE_H | ||
2 | #define _IPT_PKTTYPE_H | ||
3 | |||
4 | #include <linux/netfilter/xt_pkttype.h> | ||
5 | #define ipt_pkttype_info xt_pkttype_info | ||
6 | |||
7 | #endif /*_IPT_PKTTYPE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_policy.h b/include/linux/netfilter_ipv4/ipt_policy.h deleted file mode 100644 index 1037fb2cd206..000000000000 --- a/include/linux/netfilter_ipv4/ipt_policy.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | #ifndef _IPT_POLICY_H | ||
2 | #define _IPT_POLICY_H | ||
3 | |||
4 | #include <linux/netfilter/xt_policy.h> | ||
5 | |||
6 | #define IPT_POLICY_MAX_ELEM XT_POLICY_MAX_ELEM | ||
7 | |||
8 | /* ipt_policy_flags */ | ||
9 | #define IPT_POLICY_MATCH_IN XT_POLICY_MATCH_IN | ||
10 | #define IPT_POLICY_MATCH_OUT XT_POLICY_MATCH_OUT | ||
11 | #define IPT_POLICY_MATCH_NONE XT_POLICY_MATCH_NONE | ||
12 | #define IPT_POLICY_MATCH_STRICT XT_POLICY_MATCH_STRICT | ||
13 | |||
14 | /* ipt_policy_modes */ | ||
15 | #define IPT_POLICY_MODE_TRANSPORT XT_POLICY_MODE_TRANSPORT | ||
16 | #define IPT_POLICY_MODE_TUNNEL XT_POLICY_MODE_TUNNEL | ||
17 | |||
18 | #define ipt_policy_spec xt_policy_spec | ||
19 | #define ipt_policy_addr xt_policy_addr | ||
20 | #define ipt_policy_elem xt_policy_elem | ||
21 | #define ipt_policy_info xt_policy_info | ||
22 | |||
23 | #endif /* _IPT_POLICY_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_recent.h b/include/linux/netfilter_ipv4/ipt_recent.h deleted file mode 100644 index d636cca133c2..000000000000 --- a/include/linux/netfilter_ipv4/ipt_recent.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef _IPT_RECENT_H | ||
2 | #define _IPT_RECENT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_recent.h> | ||
5 | |||
6 | #define ipt_recent_info xt_recent_mtinfo | ||
7 | |||
8 | enum { | ||
9 | IPT_RECENT_CHECK = XT_RECENT_CHECK, | ||
10 | IPT_RECENT_SET = XT_RECENT_SET, | ||
11 | IPT_RECENT_UPDATE = XT_RECENT_UPDATE, | ||
12 | IPT_RECENT_REMOVE = XT_RECENT_REMOVE, | ||
13 | IPT_RECENT_TTL = XT_RECENT_TTL, | ||
14 | |||
15 | IPT_RECENT_SOURCE = XT_RECENT_SOURCE, | ||
16 | IPT_RECENT_DEST = XT_RECENT_DEST, | ||
17 | |||
18 | IPT_RECENT_NAME_LEN = XT_RECENT_NAME_LEN, | ||
19 | }; | ||
20 | |||
21 | #endif /*_IPT_RECENT_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_sctp.h b/include/linux/netfilter_ipv4/ipt_sctp.h deleted file mode 100644 index 80b3dbacd193..000000000000 --- a/include/linux/netfilter_ipv4/ipt_sctp.h +++ /dev/null | |||
@@ -1,105 +0,0 @@ | |||
1 | #ifndef _IPT_SCTP_H_ | ||
2 | #define _IPT_SCTP_H_ | ||
3 | |||
4 | #define IPT_SCTP_SRC_PORTS 0x01 | ||
5 | #define IPT_SCTP_DEST_PORTS 0x02 | ||
6 | #define IPT_SCTP_CHUNK_TYPES 0x04 | ||
7 | |||
8 | #define IPT_SCTP_VALID_FLAGS 0x07 | ||
9 | |||
10 | |||
11 | struct ipt_sctp_flag_info { | ||
12 | u_int8_t chunktype; | ||
13 | u_int8_t flag; | ||
14 | u_int8_t flag_mask; | ||
15 | }; | ||
16 | |||
17 | #define IPT_NUM_SCTP_FLAGS 4 | ||
18 | |||
19 | struct ipt_sctp_info { | ||
20 | u_int16_t dpts[2]; /* Min, Max */ | ||
21 | u_int16_t spts[2]; /* Min, Max */ | ||
22 | |||
23 | u_int32_t chunkmap[256 / sizeof (u_int32_t)]; /* Bit mask of chunks to be matched according to RFC 2960 */ | ||
24 | |||
25 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ | ||
26 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ | ||
27 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ | ||
28 | |||
29 | u_int32_t chunk_match_type; | ||
30 | struct ipt_sctp_flag_info flag_info[IPT_NUM_SCTP_FLAGS]; | ||
31 | int flag_count; | ||
32 | |||
33 | u_int32_t flags; | ||
34 | u_int32_t invflags; | ||
35 | }; | ||
36 | |||
37 | #define bytes(type) (sizeof(type) * 8) | ||
38 | |||
39 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ | ||
40 | do { \ | ||
41 | chunkmap[type / bytes(u_int32_t)] |= \ | ||
42 | 1 << (type % bytes(u_int32_t)); \ | ||
43 | } while (0) | ||
44 | |||
45 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ | ||
46 | do { \ | ||
47 | chunkmap[type / bytes(u_int32_t)] &= \ | ||
48 | ~(1 << (type % bytes(u_int32_t))); \ | ||
49 | } while (0) | ||
50 | |||
51 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ | ||
52 | ({ \ | ||
53 | (chunkmap[type / bytes (u_int32_t)] & \ | ||
54 | (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ | ||
55 | }) | ||
56 | |||
57 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ | ||
58 | do { \ | ||
59 | int i; \ | ||
60 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
61 | chunkmap[i] = 0; \ | ||
62 | } while (0) | ||
63 | |||
64 | #define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ | ||
65 | do { \ | ||
66 | int i; \ | ||
67 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
68 | chunkmap[i] = ~0; \ | ||
69 | } while (0) | ||
70 | |||
71 | #define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ | ||
72 | do { \ | ||
73 | int i; \ | ||
74 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
75 | destmap[i] = srcmap[i]; \ | ||
76 | } while (0) | ||
77 | |||
78 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ | ||
79 | ({ \ | ||
80 | int i; \ | ||
81 | int flag = 1; \ | ||
82 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ | ||
83 | if (chunkmap[i]) { \ | ||
84 | flag = 0; \ | ||
85 | break; \ | ||
86 | } \ | ||
87 | } \ | ||
88 | flag; \ | ||
89 | }) | ||
90 | |||
91 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ | ||
92 | ({ \ | ||
93 | int i; \ | ||
94 | int flag = 1; \ | ||
95 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ | ||
96 | if (chunkmap[i] != ~0) { \ | ||
97 | flag = 0; \ | ||
98 | break; \ | ||
99 | } \ | ||
100 | } \ | ||
101 | flag; \ | ||
102 | }) | ||
103 | |||
104 | #endif /* _IPT_SCTP_H_ */ | ||
105 | |||
diff --git a/include/linux/netfilter_ipv4/ipt_state.h b/include/linux/netfilter_ipv4/ipt_state.h deleted file mode 100644 index a44a99cc28cc..000000000000 --- a/include/linux/netfilter_ipv4/ipt_state.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #ifndef _IPT_STATE_H | ||
2 | #define _IPT_STATE_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_state.h> | ||
7 | |||
8 | #define IPT_STATE_BIT XT_STATE_BIT | ||
9 | #define IPT_STATE_INVALID XT_STATE_INVALID | ||
10 | |||
11 | #define IPT_STATE_UNTRACKED XT_STATE_UNTRACKED | ||
12 | |||
13 | #define ipt_state_info xt_state_info | ||
14 | |||
15 | #endif /*_IPT_STATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_string.h b/include/linux/netfilter_ipv4/ipt_string.h deleted file mode 100644 index c26de3059903..000000000000 --- a/include/linux/netfilter_ipv4/ipt_string.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IPT_STRING_H | ||
2 | #define _IPT_STRING_H | ||
3 | |||
4 | #include <linux/netfilter/xt_string.h> | ||
5 | |||
6 | #define IPT_STRING_MAX_PATTERN_SIZE XT_STRING_MAX_PATTERN_SIZE | ||
7 | #define IPT_STRING_MAX_ALGO_NAME_SIZE XT_STRING_MAX_ALGO_NAME_SIZE | ||
8 | #define ipt_string_info xt_string_info | ||
9 | |||
10 | #endif /*_IPT_STRING_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_tcpmss.h b/include/linux/netfilter_ipv4/ipt_tcpmss.h deleted file mode 100644 index 18bbc8e8e009..000000000000 --- a/include/linux/netfilter_ipv4/ipt_tcpmss.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IPT_TCPMSS_MATCH_H | ||
2 | #define _IPT_TCPMSS_MATCH_H | ||
3 | |||
4 | #include <linux/netfilter/xt_tcpmss.h> | ||
5 | #define ipt_tcpmss_match_info xt_tcpmss_match_info | ||
6 | |||
7 | #endif /*_IPT_TCPMSS_MATCH_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_tos.h b/include/linux/netfilter_ipv4/ipt_tos.h deleted file mode 100644 index a21f5df23c50..000000000000 --- a/include/linux/netfilter_ipv4/ipt_tos.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | #ifndef _IPT_TOS_H | ||
2 | #define _IPT_TOS_H | ||
3 | |||
4 | struct ipt_tos_info { | ||
5 | u_int8_t tos; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #ifndef IPTOS_NORMALSVC | ||
10 | #define IPTOS_NORMALSVC 0 | ||
11 | #endif | ||
12 | |||
13 | #endif /*_IPT_TOS_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/Kbuild b/include/linux/netfilter_ipv6/Kbuild index aca4bd1f6d7c..e864eaee9e5e 100644 --- a/include/linux/netfilter_ipv6/Kbuild +++ b/include/linux/netfilter_ipv6/Kbuild | |||
@@ -1,22 +1,12 @@ | |||
1 | header-y += ip6t_HL.h | 1 | header-y += ip6t_HL.h |
2 | header-y += ip6t_LOG.h | 2 | header-y += ip6t_LOG.h |
3 | header-y += ip6t_MARK.h | ||
4 | header-y += ip6t_REJECT.h | 3 | header-y += ip6t_REJECT.h |
5 | header-y += ip6t_ah.h | 4 | header-y += ip6t_ah.h |
6 | header-y += ip6t_esp.h | ||
7 | header-y += ip6t_frag.h | 5 | header-y += ip6t_frag.h |
8 | header-y += ip6t_hl.h | ||
9 | header-y += ip6t_ipv6header.h | 6 | header-y += ip6t_ipv6header.h |
10 | header-y += ip6t_length.h | 7 | header-y += ip6t_hl.h |
11 | header-y += ip6t_limit.h | ||
12 | header-y += ip6t_mac.h | ||
13 | header-y += ip6t_mark.h | ||
14 | header-y += ip6t_mh.h | 8 | header-y += ip6t_mh.h |
15 | header-y += ip6t_multiport.h | ||
16 | header-y += ip6t_opts.h | 9 | header-y += ip6t_opts.h |
17 | header-y += ip6t_owner.h | ||
18 | header-y += ip6t_physdev.h | ||
19 | header-y += ip6t_policy.h | ||
20 | header-y += ip6t_rt.h | 10 | header-y += ip6t_rt.h |
21 | 11 | ||
22 | unifdef-y += ip6_tables.h | 12 | unifdef-y += ip6_tables.h |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 1089e33cf633..a64e1451ac38 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -306,7 +306,7 @@ ip6t_get_target(struct ip6t_entry *e) | |||
306 | extern void ip6t_init(void) __init; | 306 | extern void ip6t_init(void) __init; |
307 | 307 | ||
308 | extern struct xt_table *ip6t_register_table(struct net *net, | 308 | extern struct xt_table *ip6t_register_table(struct net *net, |
309 | struct xt_table *table, | 309 | const struct xt_table *table, |
310 | const struct ip6t_replace *repl); | 310 | const struct ip6t_replace *repl); |
311 | extern void ip6t_unregister_table(struct xt_table *table); | 311 | extern void ip6t_unregister_table(struct xt_table *table); |
312 | extern unsigned int ip6t_do_table(struct sk_buff *skb, | 312 | extern unsigned int ip6t_do_table(struct sk_buff *skb, |
diff --git a/include/linux/netfilter_ipv6/ip6t_MARK.h b/include/linux/netfilter_ipv6/ip6t_MARK.h deleted file mode 100644 index 7cf629a8ab92..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_MARK.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IP6T_MARK_H_target | ||
2 | #define _IP6T_MARK_H_target | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | #include <linux/netfilter/xt_MARK.h> | ||
6 | |||
7 | #define ip6t_mark_target_info xt_mark_target_info | ||
8 | |||
9 | #endif /*_IP6T_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_esp.h b/include/linux/netfilter_ipv6/ip6t_esp.h deleted file mode 100644 index f62eaf53c16c..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_esp.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef _IP6T_ESP_H | ||
2 | #define _IP6T_ESP_H | ||
3 | |||
4 | #include <linux/netfilter/xt_esp.h> | ||
5 | |||
6 | #define ip6t_esp xt_esp | ||
7 | #define IP6T_ESP_INV_SPI XT_ESP_INV_SPI | ||
8 | #define IP6T_ESP_INV_MASK XT_ESP_INV_MASK | ||
9 | |||
10 | #endif /*_IP6T_ESP_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_length.h b/include/linux/netfilter_ipv6/ip6t_length.h deleted file mode 100644 index 9e9689d03ed7..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_length.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _IP6T_LENGTH_H | ||
2 | #define _IP6T_LENGTH_H | ||
3 | |||
4 | #include <linux/netfilter/xt_length.h> | ||
5 | #define ip6t_length_info xt_length_info | ||
6 | |||
7 | #endif /*_IP6T_LENGTH_H*/ | ||
8 | |||
diff --git a/include/linux/netfilter_ipv6/ip6t_limit.h b/include/linux/netfilter_ipv6/ip6t_limit.h deleted file mode 100644 index 487e5ea342c6..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_limit.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef _IP6T_RATE_H | ||
2 | #define _IP6T_RATE_H | ||
3 | |||
4 | #include <linux/netfilter/xt_limit.h> | ||
5 | #define IP6T_LIMIT_SCALE XT_LIMIT_SCALE | ||
6 | #define ip6t_rateinfo xt_rateinfo | ||
7 | |||
8 | #endif /*_IP6T_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mac.h b/include/linux/netfilter_ipv6/ip6t_mac.h deleted file mode 100644 index ac58e83e9423..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_mac.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _IP6T_MAC_H | ||
2 | #define _IP6T_MAC_H | ||
3 | |||
4 | #include <linux/netfilter/xt_mac.h> | ||
5 | #define ip6t_mac_info xt_mac_info | ||
6 | |||
7 | #endif /*_IP6T_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mark.h b/include/linux/netfilter_ipv6/ip6t_mark.h deleted file mode 100644 index ff204951ddc3..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_mark.h +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | #ifndef _IP6T_MARK_H | ||
2 | #define _IP6T_MARK_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | #include <linux/netfilter/xt_mark.h> | ||
6 | |||
7 | #define ip6t_mark_info xt_mark_info | ||
8 | |||
9 | #endif /*_IPT_MARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_multiport.h b/include/linux/netfilter_ipv6/ip6t_multiport.h deleted file mode 100644 index 042c92661cee..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_multiport.h +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | #ifndef _IP6T_MULTIPORT_H | ||
2 | #define _IP6T_MULTIPORT_H | ||
3 | |||
4 | #include <linux/netfilter/xt_multiport.h> | ||
5 | |||
6 | #define IP6T_MULTIPORT_SOURCE XT_MULTIPORT_SOURCE | ||
7 | #define IP6T_MULTIPORT_DESTINATION XT_MULTIPORT_DESTINATION | ||
8 | #define IP6T_MULTIPORT_EITHER XT_MULTIPORT_EITHER | ||
9 | |||
10 | #define IP6T_MULTI_PORTS XT_MULTI_PORTS | ||
11 | |||
12 | #define ip6t_multiport xt_multiport | ||
13 | |||
14 | #endif /*_IP6T_MULTIPORT_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_owner.h b/include/linux/netfilter_ipv6/ip6t_owner.h deleted file mode 100644 index ec5cc7a38c42..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_owner.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _IP6T_OWNER_H | ||
2 | #define _IP6T_OWNER_H | ||
3 | |||
4 | /* match and invert flags */ | ||
5 | #define IP6T_OWNER_UID 0x01 | ||
6 | #define IP6T_OWNER_GID 0x02 | ||
7 | #define IP6T_OWNER_PID 0x04 | ||
8 | #define IP6T_OWNER_SID 0x08 | ||
9 | |||
10 | struct ip6t_owner_info { | ||
11 | __kernel_uid32_t uid; | ||
12 | __kernel_gid32_t gid; | ||
13 | __kernel_pid_t pid; | ||
14 | __kernel_pid_t sid; | ||
15 | u_int8_t match, invert; /* flags */ | ||
16 | }; | ||
17 | |||
18 | #endif /*_IPT_OWNER_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_physdev.h b/include/linux/netfilter_ipv6/ip6t_physdev.h deleted file mode 100644 index c161c0a81b55..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_physdev.h +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | #ifndef _IP6T_PHYSDEV_H | ||
2 | #define _IP6T_PHYSDEV_H | ||
3 | |||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_physdev.h> | ||
7 | |||
8 | #define IP6T_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN | ||
9 | #define IP6T_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT | ||
10 | #define IP6T_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED | ||
11 | #define IP6T_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN | ||
12 | #define IP6T_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT | ||
13 | #define IP6T_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK | ||
14 | |||
15 | #define ip6t_physdev_info xt_physdev_info | ||
16 | |||
17 | #endif /*_IP6T_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_policy.h b/include/linux/netfilter_ipv6/ip6t_policy.h deleted file mode 100644 index b1c449d7ec89..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_policy.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | #ifndef _IP6T_POLICY_H | ||
2 | #define _IP6T_POLICY_H | ||
3 | |||
4 | #include <linux/netfilter/xt_policy.h> | ||
5 | |||
6 | #define IP6T_POLICY_MAX_ELEM XT_POLICY_MAX_ELEM | ||
7 | |||
8 | /* ip6t_policy_flags */ | ||
9 | #define IP6T_POLICY_MATCH_IN XT_POLICY_MATCH_IN | ||
10 | #define IP6T_POLICY_MATCH_OUT XT_POLICY_MATCH_OUT | ||
11 | #define IP6T_POLICY_MATCH_NONE XT_POLICY_MATCH_NONE | ||
12 | #define IP6T_POLICY_MATCH_STRICT XT_POLICY_MATCH_STRICT | ||
13 | |||
14 | /* ip6t_policy_modes */ | ||
15 | #define IP6T_POLICY_MODE_TRANSPORT XT_POLICY_MODE_TRANSPORT | ||
16 | #define IP6T_POLICY_MODE_TUNNEL XT_POLICY_MODE_TUNNEL | ||
17 | |||
18 | #define ip6t_policy_spec xt_policy_spec | ||
19 | #define ip6t_policy_addr xt_policy_addr | ||
20 | #define ip6t_policy_elem xt_policy_elem | ||
21 | #define ip6t_policy_info xt_policy_info | ||
22 | |||
23 | #endif /* _IP6T_POLICY_H */ | ||
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 5ba398e90304..0fbecbbe8e9e 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
@@ -217,12 +217,13 @@ int netlink_sendskb(struct sock *sk, struct sk_buff *skb); | |||
217 | 217 | ||
218 | struct netlink_callback | 218 | struct netlink_callback |
219 | { | 219 | { |
220 | struct sk_buff *skb; | 220 | struct sk_buff *skb; |
221 | struct nlmsghdr *nlh; | 221 | const struct nlmsghdr *nlh; |
222 | int (*dump)(struct sk_buff * skb, struct netlink_callback *cb); | 222 | int (*dump)(struct sk_buff * skb, |
223 | int (*done)(struct netlink_callback *cb); | 223 | struct netlink_callback *cb); |
224 | int family; | 224 | int (*done)(struct netlink_callback *cb); |
225 | long args[6]; | 225 | int family; |
226 | long args[6]; | ||
226 | }; | 227 | }; |
227 | 228 | ||
228 | struct netlink_notify | 229 | struct netlink_notify |
@@ -258,7 +259,7 @@ __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags) | |||
258 | NLMSG_NEW(skb, pid, seq, type, len, 0) | 259 | NLMSG_NEW(skb, pid, seq, type, len, 0) |
259 | 260 | ||
260 | extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | 261 | extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, |
261 | struct nlmsghdr *nlh, | 262 | const struct nlmsghdr *nlh, |
262 | int (*dump)(struct sk_buff *skb, struct netlink_callback*), | 263 | int (*dump)(struct sk_buff *skb, struct netlink_callback*), |
263 | int (*done)(struct netlink_callback*)); | 264 | int (*done)(struct netlink_callback*)); |
264 | 265 | ||
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index bd2eba530667..33b283601f62 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
@@ -472,6 +472,7 @@ enum lock_type4 { | |||
472 | 472 | ||
473 | #define NFSPROC4_NULL 0 | 473 | #define NFSPROC4_NULL 0 |
474 | #define NFSPROC4_COMPOUND 1 | 474 | #define NFSPROC4_COMPOUND 1 |
475 | #define NFS4_VERSION 4 | ||
475 | #define NFS4_MINOR_VERSION 0 | 476 | #define NFS4_MINOR_VERSION 0 |
476 | 477 | ||
477 | #if defined(CONFIG_NFS_V4_1) | 478 | #if defined(CONFIG_NFS_V4_1) |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index fdffb413b192..f6b90240dd41 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -473,7 +473,6 @@ extern int nfs_writepages(struct address_space *, struct writeback_control *); | |||
473 | extern int nfs_flush_incompatible(struct file *file, struct page *page); | 473 | extern int nfs_flush_incompatible(struct file *file, struct page *page); |
474 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); | 474 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); |
475 | extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *); | 475 | extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *); |
476 | extern void nfs_writedata_release(void *); | ||
477 | 476 | ||
478 | /* | 477 | /* |
479 | * Try to write back everything synchronously (but check the | 478 | * Try to write back everything synchronously (but check the |
@@ -488,7 +487,6 @@ extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); | |||
488 | extern int nfs_commit_inode(struct inode *, int); | 487 | extern int nfs_commit_inode(struct inode *, int); |
489 | extern struct nfs_write_data *nfs_commitdata_alloc(void); | 488 | extern struct nfs_write_data *nfs_commitdata_alloc(void); |
490 | extern void nfs_commit_free(struct nfs_write_data *wdata); | 489 | extern void nfs_commit_free(struct nfs_write_data *wdata); |
491 | extern void nfs_commitdata_release(void *wdata); | ||
492 | #else | 490 | #else |
493 | static inline int | 491 | static inline int |
494 | nfs_commit_inode(struct inode *inode, int how) | 492 | nfs_commit_inode(struct inode *inode, int how) |
@@ -507,6 +505,7 @@ nfs_have_writebacks(struct inode *inode) | |||
507 | * Allocate nfs_write_data structures | 505 | * Allocate nfs_write_data structures |
508 | */ | 506 | */ |
509 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); | 507 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); |
508 | extern void nfs_writedata_free(struct nfs_write_data *); | ||
510 | 509 | ||
511 | /* | 510 | /* |
512 | * linux/fs/nfs/read.c | 511 | * linux/fs/nfs/read.c |
@@ -515,7 +514,6 @@ extern int nfs_readpage(struct file *, struct page *); | |||
515 | extern int nfs_readpages(struct file *, struct address_space *, | 514 | extern int nfs_readpages(struct file *, struct address_space *, |
516 | struct list_head *, unsigned); | 515 | struct list_head *, unsigned); |
517 | extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); | 516 | extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); |
518 | extern void nfs_readdata_release(void *data); | ||
519 | extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, | 517 | extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, |
520 | struct page *); | 518 | struct page *); |
521 | 519 | ||
@@ -523,6 +521,7 @@ extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, | |||
523 | * Allocate nfs_read_data structures | 521 | * Allocate nfs_read_data structures |
524 | */ | 522 | */ |
525 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); | 523 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); |
524 | extern void nfs_readdata_free(struct nfs_read_data *); | ||
526 | 525 | ||
527 | /* | 526 | /* |
528 | * linux/fs/nfs3proc.c | 527 | * linux/fs/nfs3proc.c |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 19fe15d12042..320569eabe3b 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -167,6 +167,15 @@ struct nfs_server { | |||
167 | #define NFS_CAP_SYMLINKS (1U << 2) | 167 | #define NFS_CAP_SYMLINKS (1U << 2) |
168 | #define NFS_CAP_ACLS (1U << 3) | 168 | #define NFS_CAP_ACLS (1U << 3) |
169 | #define NFS_CAP_ATOMIC_OPEN (1U << 4) | 169 | #define NFS_CAP_ATOMIC_OPEN (1U << 4) |
170 | #define NFS_CAP_CHANGE_ATTR (1U << 5) | ||
171 | #define NFS_CAP_FILEID (1U << 6) | ||
172 | #define NFS_CAP_MODE (1U << 7) | ||
173 | #define NFS_CAP_NLINK (1U << 8) | ||
174 | #define NFS_CAP_OWNER (1U << 9) | ||
175 | #define NFS_CAP_OWNER_GROUP (1U << 10) | ||
176 | #define NFS_CAP_ATIME (1U << 11) | ||
177 | #define NFS_CAP_CTIME (1U << 12) | ||
178 | #define NFS_CAP_MTIME (1U << 13) | ||
170 | 179 | ||
171 | 180 | ||
172 | /* maximum number of slots to use */ | 181 | /* maximum number of slots to use */ |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index dbea93b694e5..a8d71ed43a0e 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -242,6 +242,29 @@ | |||
242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is | 242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is |
243 | * determined by the network interface. | 243 | * determined by the network interface. |
244 | * | 244 | * |
245 | * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute | ||
246 | * to identify the device, and the TESTDATA blob attribute to pass through | ||
247 | * to the driver. | ||
248 | * | ||
249 | * @NL80211_CMD_CONNECT: connection request and notification; this command | ||
250 | * requests to connect to a specified network but without separating | ||
251 | * auth and assoc steps. For this, you need to specify the SSID in a | ||
252 | * %NL80211_ATTR_SSID attribute, and can optionally specify the association | ||
253 | * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, | ||
254 | * %NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_CONTROL_PORT. | ||
255 | * It is also sent as an event, with the BSSID and response IEs when the | ||
256 | * connection is established or failed to be established. This can be | ||
257 | * determined by the STATUS_CODE attribute. | ||
258 | * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), | ||
259 | * sent as an event when the card/driver roamed by itself. | ||
260 | * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify | ||
261 | * userspace that a connection was dropped by the AP or due to other | ||
262 | * reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and | ||
263 | * %NL80211_ATTR_REASON_CODE attributes are used. | ||
264 | * | ||
265 | * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices | ||
266 | * associated with this wiphy must be down and will follow. | ||
267 | * | ||
245 | * @NL80211_CMD_MAX: highest used command number | 268 | * @NL80211_CMD_MAX: highest used command number |
246 | * @__NL80211_CMD_AFTER_LAST: internal use | 269 | * @__NL80211_CMD_AFTER_LAST: internal use |
247 | */ | 270 | */ |
@@ -310,6 +333,14 @@ enum nl80211_commands { | |||
310 | NL80211_CMD_JOIN_IBSS, | 333 | NL80211_CMD_JOIN_IBSS, |
311 | NL80211_CMD_LEAVE_IBSS, | 334 | NL80211_CMD_LEAVE_IBSS, |
312 | 335 | ||
336 | NL80211_CMD_TESTMODE, | ||
337 | |||
338 | NL80211_CMD_CONNECT, | ||
339 | NL80211_CMD_ROAM, | ||
340 | NL80211_CMD_DISCONNECT, | ||
341 | |||
342 | NL80211_CMD_SET_WIPHY_NETNS, | ||
343 | |||
313 | /* add new commands above here */ | 344 | /* add new commands above here */ |
314 | 345 | ||
315 | /* used to define NL80211_CMD_MAX below */ | 346 | /* used to define NL80211_CMD_MAX below */ |
@@ -449,10 +480,6 @@ enum nl80211_commands { | |||
449 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | 480 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) |
450 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | 481 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive |
451 | * scanning and include a zero-length SSID (wildcard) for wildcard scan | 482 | * scanning and include a zero-length SSID (wildcard) for wildcard scan |
452 | * @NL80211_ATTR_SCAN_GENERATION: the scan generation increases whenever the | ||
453 | * scan result list changes (BSS expired or added) so that applications | ||
454 | * can verify that they got a single, consistent snapshot (when all dump | ||
455 | * messages carried the same generation number) | ||
456 | * @NL80211_ATTR_BSS: scan result BSS | 483 | * @NL80211_ATTR_BSS: scan result BSS |
457 | * | 484 | * |
458 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain | 485 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain |
@@ -511,6 +538,52 @@ enum nl80211_commands { | |||
511 | * authorized by user space. Otherwise, port is marked authorized by | 538 | * authorized by user space. Otherwise, port is marked authorized by |
512 | * default in station mode. | 539 | * default in station mode. |
513 | * | 540 | * |
541 | * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. | ||
542 | * We recommend using nested, driver-specific attributes within this. | ||
543 | * | ||
544 | * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT | ||
545 | * event was due to the AP disconnecting the station, and not due to | ||
546 | * a local disconnect request. | ||
547 | * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT | ||
548 | * event (u16) | ||
549 | * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating | ||
550 | * that protected APs should be used. | ||
551 | * | ||
552 | * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT and ASSOCIATE to | ||
553 | * indicate which unicast key ciphers will be used with the connection | ||
554 | * (an array of u32). | ||
555 | * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT and ASSOCIATE to indicate | ||
556 | * which group key cipher will be used with the connection (a u32). | ||
557 | * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT and ASSOCIATE to indicate | ||
558 | * which WPA version(s) the AP we want to associate with is using | ||
559 | * (a u32 with flags from &enum nl80211_wpa_versions). | ||
560 | * @NL80211_ATTR_AKM_SUITES: Used with CONNECT and ASSOCIATE to indicate | ||
561 | * which key management algorithm(s) to use (an array of u32). | ||
562 | * | ||
563 | * @NL80211_ATTR_REQ_IE: (Re)association request information elements as | ||
564 | * sent out by the card, for ROAM and successful CONNECT events. | ||
565 | * @NL80211_ATTR_RESP_IE: (Re)association response information elements as | ||
566 | * sent by peer, for ROAM and successful CONNECT events. | ||
567 | * | ||
568 | * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE | ||
569 | * commands to specify using a reassociate frame | ||
570 | * | ||
571 | * @NL80211_ATTR_KEY: key information in a nested attribute with | ||
572 | * %NL80211_KEY_* sub-attributes | ||
573 | * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect() | ||
574 | * and join_ibss(), key information is in a nested attribute each | ||
575 | * with %NL80211_KEY_* sub-attributes | ||
576 | * | ||
577 | * @NL80211_ATTR_PID: Process ID of a network namespace. | ||
578 | * | ||
579 | * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for | ||
580 | * dumps. This number increases whenever the object list being | ||
581 | * dumped changes, and as such userspace can verify that it has | ||
582 | * obtained a complete and consistent snapshot by verifying that | ||
583 | * all dump messages contain the same generation number. If it | ||
584 | * changed then the list changed and the dump should be repeated | ||
585 | * completely from scratch. | ||
586 | * | ||
514 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 587 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
515 | * @__NL80211_ATTR_AFTER_LAST: internal use | 588 | * @__NL80211_ATTR_AFTER_LAST: internal use |
516 | */ | 589 | */ |
@@ -582,7 +655,7 @@ enum nl80211_attrs { | |||
582 | 655 | ||
583 | NL80211_ATTR_SCAN_FREQUENCIES, | 656 | NL80211_ATTR_SCAN_FREQUENCIES, |
584 | NL80211_ATTR_SCAN_SSIDS, | 657 | NL80211_ATTR_SCAN_SSIDS, |
585 | NL80211_ATTR_SCAN_GENERATION, | 658 | NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */ |
586 | NL80211_ATTR_BSS, | 659 | NL80211_ATTR_BSS, |
587 | 660 | ||
588 | NL80211_ATTR_REG_INITIATOR, | 661 | NL80211_ATTR_REG_INITIATOR, |
@@ -619,16 +692,42 @@ enum nl80211_attrs { | |||
619 | 692 | ||
620 | NL80211_ATTR_CONTROL_PORT, | 693 | NL80211_ATTR_CONTROL_PORT, |
621 | 694 | ||
695 | NL80211_ATTR_TESTDATA, | ||
696 | |||
697 | NL80211_ATTR_PRIVACY, | ||
698 | |||
699 | NL80211_ATTR_DISCONNECTED_BY_AP, | ||
700 | NL80211_ATTR_STATUS_CODE, | ||
701 | |||
702 | NL80211_ATTR_CIPHER_SUITES_PAIRWISE, | ||
703 | NL80211_ATTR_CIPHER_SUITE_GROUP, | ||
704 | NL80211_ATTR_WPA_VERSIONS, | ||
705 | NL80211_ATTR_AKM_SUITES, | ||
706 | |||
707 | NL80211_ATTR_REQ_IE, | ||
708 | NL80211_ATTR_RESP_IE, | ||
709 | |||
710 | NL80211_ATTR_PREV_BSSID, | ||
711 | |||
712 | NL80211_ATTR_KEY, | ||
713 | NL80211_ATTR_KEYS, | ||
714 | |||
715 | NL80211_ATTR_PID, | ||
716 | |||
622 | /* add attributes here, update the policy in nl80211.c */ | 717 | /* add attributes here, update the policy in nl80211.c */ |
623 | 718 | ||
624 | __NL80211_ATTR_AFTER_LAST, | 719 | __NL80211_ATTR_AFTER_LAST, |
625 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 | 720 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 |
626 | }; | 721 | }; |
627 | 722 | ||
723 | /* source-level API compatibility */ | ||
724 | #define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION | ||
725 | |||
628 | /* | 726 | /* |
629 | * Allow user space programs to use #ifdef on new attributes by defining them | 727 | * Allow user space programs to use #ifdef on new attributes by defining them |
630 | * here | 728 | * here |
631 | */ | 729 | */ |
730 | #define NL80211_CMD_CONNECT NL80211_CMD_CONNECT | ||
632 | #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY | 731 | #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY |
633 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES | 732 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES |
634 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS | 733 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS |
@@ -642,6 +741,12 @@ enum nl80211_attrs { | |||
642 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID | 741 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID |
643 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE | 742 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE |
644 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE | 743 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE |
744 | #define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE | ||
745 | #define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP | ||
746 | #define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS | ||
747 | #define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES | ||
748 | #define NL80211_ATTR_KEY NL80211_ATTR_KEY | ||
749 | #define NL80211_ATTR_KEYS NL80211_ATTR_KEYS | ||
645 | 750 | ||
646 | #define NL80211_MAX_SUPP_RATES 32 | 751 | #define NL80211_MAX_SUPP_RATES 32 |
647 | #define NL80211_MAX_SUPP_REG_RULES 32 | 752 | #define NL80211_MAX_SUPP_REG_RULES 32 |
@@ -650,6 +755,9 @@ enum nl80211_attrs { | |||
650 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 | 755 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 |
651 | #define NL80211_HT_CAPABILITY_LEN 26 | 756 | #define NL80211_HT_CAPABILITY_LEN 26 |
652 | 757 | ||
758 | #define NL80211_MAX_NR_CIPHER_SUITES 5 | ||
759 | #define NL80211_MAX_NR_AKM_SUITES 2 | ||
760 | |||
653 | /** | 761 | /** |
654 | * enum nl80211_iftype - (virtual) interface types | 762 | * enum nl80211_iftype - (virtual) interface types |
655 | * | 763 | * |
@@ -1168,6 +1276,7 @@ enum nl80211_channel_type { | |||
1168 | * in mBm (100 * dBm) (s32) | 1276 | * in mBm (100 * dBm) (s32) |
1169 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon | 1277 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon |
1170 | * in unspecified units, scaled to 0..100 (u8) | 1278 | * in unspecified units, scaled to 0..100 (u8) |
1279 | * @NL80211_BSS_STATUS: status, if this BSS is "used" | ||
1171 | * @__NL80211_BSS_AFTER_LAST: internal | 1280 | * @__NL80211_BSS_AFTER_LAST: internal |
1172 | * @NL80211_BSS_MAX: highest BSS attribute | 1281 | * @NL80211_BSS_MAX: highest BSS attribute |
1173 | */ | 1282 | */ |
@@ -1181,6 +1290,7 @@ enum nl80211_bss { | |||
1181 | NL80211_BSS_INFORMATION_ELEMENTS, | 1290 | NL80211_BSS_INFORMATION_ELEMENTS, |
1182 | NL80211_BSS_SIGNAL_MBM, | 1291 | NL80211_BSS_SIGNAL_MBM, |
1183 | NL80211_BSS_SIGNAL_UNSPEC, | 1292 | NL80211_BSS_SIGNAL_UNSPEC, |
1293 | NL80211_BSS_STATUS, | ||
1184 | 1294 | ||
1185 | /* keep last */ | 1295 | /* keep last */ |
1186 | __NL80211_BSS_AFTER_LAST, | 1296 | __NL80211_BSS_AFTER_LAST, |
@@ -1188,18 +1298,37 @@ enum nl80211_bss { | |||
1188 | }; | 1298 | }; |
1189 | 1299 | ||
1190 | /** | 1300 | /** |
1301 | * enum nl80211_bss_status - BSS "status" | ||
1302 | */ | ||
1303 | enum nl80211_bss_status { | ||
1304 | NL80211_BSS_STATUS_AUTHENTICATED, | ||
1305 | NL80211_BSS_STATUS_ASSOCIATED, | ||
1306 | NL80211_BSS_STATUS_IBSS_JOINED, | ||
1307 | }; | ||
1308 | |||
1309 | /** | ||
1191 | * enum nl80211_auth_type - AuthenticationType | 1310 | * enum nl80211_auth_type - AuthenticationType |
1192 | * | 1311 | * |
1193 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication | 1312 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication |
1194 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) | 1313 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) |
1195 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) | 1314 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) |
1196 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) | 1315 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) |
1316 | * @__NL80211_AUTHTYPE_NUM: internal | ||
1317 | * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm | ||
1318 | * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by | ||
1319 | * trying multiple times); this is invalid in netlink -- leave out | ||
1320 | * the attribute for this on CONNECT commands. | ||
1197 | */ | 1321 | */ |
1198 | enum nl80211_auth_type { | 1322 | enum nl80211_auth_type { |
1199 | NL80211_AUTHTYPE_OPEN_SYSTEM, | 1323 | NL80211_AUTHTYPE_OPEN_SYSTEM, |
1200 | NL80211_AUTHTYPE_SHARED_KEY, | 1324 | NL80211_AUTHTYPE_SHARED_KEY, |
1201 | NL80211_AUTHTYPE_FT, | 1325 | NL80211_AUTHTYPE_FT, |
1202 | NL80211_AUTHTYPE_NETWORK_EAP, | 1326 | NL80211_AUTHTYPE_NETWORK_EAP, |
1327 | |||
1328 | /* keep last */ | ||
1329 | __NL80211_AUTHTYPE_NUM, | ||
1330 | NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1, | ||
1331 | NL80211_AUTHTYPE_AUTOMATIC | ||
1203 | }; | 1332 | }; |
1204 | 1333 | ||
1205 | /** | 1334 | /** |
@@ -1224,4 +1353,39 @@ enum nl80211_mfp { | |||
1224 | NL80211_MFP_REQUIRED, | 1353 | NL80211_MFP_REQUIRED, |
1225 | }; | 1354 | }; |
1226 | 1355 | ||
1356 | enum nl80211_wpa_versions { | ||
1357 | NL80211_WPA_VERSION_1 = 1 << 0, | ||
1358 | NL80211_WPA_VERSION_2 = 1 << 1, | ||
1359 | }; | ||
1360 | |||
1361 | /** | ||
1362 | * enum nl80211_key_attributes - key attributes | ||
1363 | * @__NL80211_KEY_INVALID: invalid | ||
1364 | * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of | ||
1365 | * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC | ||
1366 | * keys | ||
1367 | * @NL80211_KEY_IDX: key ID (u8, 0-3) | ||
1368 | * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 | ||
1369 | * section 7.3.2.25.1, e.g. 0x000FAC04) | ||
1370 | * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and | ||
1371 | * CCMP keys, each six bytes in little endian | ||
1372 | * @NL80211_KEY_DEFAULT: flag indicating default key | ||
1373 | * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key | ||
1374 | * @__NL80211_KEY_AFTER_LAST: internal | ||
1375 | * @NL80211_KEY_MAX: highest key attribute | ||
1376 | */ | ||
1377 | enum nl80211_key_attributes { | ||
1378 | __NL80211_KEY_INVALID, | ||
1379 | NL80211_KEY_DATA, | ||
1380 | NL80211_KEY_IDX, | ||
1381 | NL80211_KEY_CIPHER, | ||
1382 | NL80211_KEY_SEQ, | ||
1383 | NL80211_KEY_DEFAULT, | ||
1384 | NL80211_KEY_DEFAULT_MGMT, | ||
1385 | |||
1386 | /* keep last */ | ||
1387 | __NL80211_KEY_AFTER_LAST, | ||
1388 | NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 | ||
1389 | }; | ||
1390 | |||
1227 | #endif /* __LINUX_NL80211_H */ | 1391 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h index 2cda00ccfcca..b7d9435d5a9f 100644 --- a/include/linux/nl802154.h +++ b/include/linux/nl802154.h | |||
@@ -64,12 +64,14 @@ enum { | |||
64 | IEEE802154_ATTR_COORD_REALIGN, | 64 | IEEE802154_ATTR_COORD_REALIGN, |
65 | IEEE802154_ATTR_SEC, | 65 | IEEE802154_ATTR_SEC, |
66 | 66 | ||
67 | IEEE802154_ATTR_PAGE, | ||
68 | |||
67 | __IEEE802154_ATTR_MAX, | 69 | __IEEE802154_ATTR_MAX, |
68 | }; | 70 | }; |
69 | 71 | ||
70 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) | 72 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) |
71 | 73 | ||
72 | extern struct nla_policy ieee802154_policy[]; | 74 | extern const struct nla_policy ieee802154_policy[]; |
73 | 75 | ||
74 | /* commands */ | 76 | /* commands */ |
75 | /* REQ should be responded with CONF | 77 | /* REQ should be responded with CONF |
@@ -111,6 +113,8 @@ enum { | |||
111 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ | 113 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ |
112 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ | 114 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ |
113 | 115 | ||
116 | IEEE802154_LIST_IFACE, | ||
117 | |||
114 | __IEEE802154_CMD_MAX, | 118 | __IEEE802154_CMD_MAX, |
115 | }; | 119 | }; |
116 | 120 | ||
diff --git a/include/linux/nmi.h b/include/linux/nmi.h index 29af2d5df097..b752e807adde 100644 --- a/include/linux/nmi.h +++ b/include/linux/nmi.h | |||
@@ -28,8 +28,23 @@ static inline void acpi_nmi_disable(void) { } | |||
28 | static inline void acpi_nmi_enable(void) { } | 28 | static inline void acpi_nmi_enable(void) { } |
29 | #endif | 29 | #endif |
30 | 30 | ||
31 | #ifndef trigger_all_cpu_backtrace | 31 | /* |
32 | #define trigger_all_cpu_backtrace() do { } while (0) | 32 | * Create trigger_all_cpu_backtrace() out of the arch-provided |
33 | * base function. Return whether such support was available, | ||
34 | * to allow calling code to fall back to some other mechanism: | ||
35 | */ | ||
36 | #ifdef arch_trigger_all_cpu_backtrace | ||
37 | static inline bool trigger_all_cpu_backtrace(void) | ||
38 | { | ||
39 | arch_trigger_all_cpu_backtrace(); | ||
40 | |||
41 | return true; | ||
42 | } | ||
43 | #else | ||
44 | static inline bool trigger_all_cpu_backtrace(void) | ||
45 | { | ||
46 | return false; | ||
47 | } | ||
33 | #endif | 48 | #endif |
34 | 49 | ||
35 | #endif | 50 | #endif |
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index 829b94b156f2..b359c4a9ec9e 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
@@ -82,6 +82,12 @@ | |||
82 | * to generate slightly worse code. So use a simple one-line #define | 82 | * to generate slightly worse code. So use a simple one-line #define |
83 | * for node_isset(), instead of wrapping an inline inside a macro, the | 83 | * for node_isset(), instead of wrapping an inline inside a macro, the |
84 | * way we do the other calls. | 84 | * way we do the other calls. |
85 | * | ||
86 | * NODEMASK_SCRATCH | ||
87 | * When doing above logical AND, OR, XOR, Remap operations the callers tend to | ||
88 | * need temporary nodemask_t's on the stack. But if NODES_SHIFT is large, | ||
89 | * nodemask_t's consume too much stack space. NODEMASK_SCRATCH is a helper | ||
90 | * for such situations. See below and CPUMASK_ALLOC also. | ||
85 | */ | 91 | */ |
86 | 92 | ||
87 | #include <linux/kernel.h> | 93 | #include <linux/kernel.h> |
@@ -473,4 +479,26 @@ static inline int num_node_state(enum node_states state) | |||
473 | #define for_each_node(node) for_each_node_state(node, N_POSSIBLE) | 479 | #define for_each_node(node) for_each_node_state(node, N_POSSIBLE) |
474 | #define for_each_online_node(node) for_each_node_state(node, N_ONLINE) | 480 | #define for_each_online_node(node) for_each_node_state(node, N_ONLINE) |
475 | 481 | ||
482 | /* | ||
483 | * For nodemask scrach area.(See CPUMASK_ALLOC() in cpumask.h) | ||
484 | */ | ||
485 | |||
486 | #if NODES_SHIFT > 8 /* nodemask_t > 64 bytes */ | ||
487 | #define NODEMASK_ALLOC(x, m) struct x *m = kmalloc(sizeof(*m), GFP_KERNEL) | ||
488 | #define NODEMASK_FREE(m) kfree(m) | ||
489 | #else | ||
490 | #define NODEMASK_ALLOC(x, m) struct x _m, *m = &_m | ||
491 | #define NODEMASK_FREE(m) | ||
492 | #endif | ||
493 | |||
494 | /* A example struture for using NODEMASK_ALLOC, used in mempolicy. */ | ||
495 | struct nodemask_scratch { | ||
496 | nodemask_t mask1; | ||
497 | nodemask_t mask2; | ||
498 | }; | ||
499 | |||
500 | #define NODEMASK_SCRATCH(x) NODEMASK_ALLOC(nodemask_scratch, x) | ||
501 | #define NODEMASK_SCRATCH_FREE(x) NODEMASK_FREE(x) | ||
502 | |||
503 | |||
476 | #endif /* __LINUX_NODEMASK_H */ | 504 | #endif /* __LINUX_NODEMASK_H */ |
diff --git a/include/linux/oprofile.h b/include/linux/oprofile.h index 1d9518bc4c58..5171639ecf0f 100644 --- a/include/linux/oprofile.h +++ b/include/linux/oprofile.h | |||
@@ -67,6 +67,9 @@ struct oprofile_operations { | |||
67 | 67 | ||
68 | /* Initiate a stack backtrace. Optional. */ | 68 | /* Initiate a stack backtrace. Optional. */ |
69 | void (*backtrace)(struct pt_regs * const regs, unsigned int depth); | 69 | void (*backtrace)(struct pt_regs * const regs, unsigned int depth); |
70 | |||
71 | /* Multiplex between different events. Optional. */ | ||
72 | int (*switch_events)(void); | ||
70 | /* CPU identification string. */ | 73 | /* CPU identification string. */ |
71 | char * cpu_type; | 74 | char * cpu_type; |
72 | }; | 75 | }; |
@@ -171,7 +174,6 @@ struct op_sample; | |||
171 | struct op_entry { | 174 | struct op_entry { |
172 | struct ring_buffer_event *event; | 175 | struct ring_buffer_event *event; |
173 | struct op_sample *sample; | 176 | struct op_sample *sample; |
174 | unsigned long irq_flags; | ||
175 | unsigned long size; | 177 | unsigned long size; |
176 | unsigned long *data; | 178 | unsigned long *data; |
177 | }; | 179 | }; |
@@ -180,6 +182,7 @@ void oprofile_write_reserve(struct op_entry *entry, | |||
180 | struct pt_regs * const regs, | 182 | struct pt_regs * const regs, |
181 | unsigned long pc, int code, int size); | 183 | unsigned long pc, int code, int size); |
182 | int oprofile_add_data(struct op_entry *entry, unsigned long val); | 184 | int oprofile_add_data(struct op_entry *entry, unsigned long val); |
185 | int oprofile_add_data64(struct op_entry *entry, u64 val); | ||
183 | int oprofile_write_commit(struct op_entry *entry); | 186 | int oprofile_write_commit(struct op_entry *entry); |
184 | 187 | ||
185 | #endif /* OPROFILE_H */ | 188 | #endif /* OPROFILE_H */ |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index e2e5ce543595..2b87acfc5f87 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -99,7 +99,7 @@ enum pageflags { | |||
99 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT | 99 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT |
100 | PG_mlocked, /* Page is vma mlocked */ | 100 | PG_mlocked, /* Page is vma mlocked */ |
101 | #endif | 101 | #endif |
102 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | 102 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
103 | PG_uncached, /* Page has been mapped as uncached */ | 103 | PG_uncached, /* Page has been mapped as uncached */ |
104 | #endif | 104 | #endif |
105 | __NR_PAGEFLAGS, | 105 | __NR_PAGEFLAGS, |
@@ -257,7 +257,7 @@ PAGEFLAG_FALSE(Mlocked) | |||
257 | SETPAGEFLAG_NOOP(Mlocked) TESTCLEARFLAG_FALSE(Mlocked) | 257 | SETPAGEFLAG_NOOP(Mlocked) TESTCLEARFLAG_FALSE(Mlocked) |
258 | #endif | 258 | #endif |
259 | 259 | ||
260 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | 260 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
261 | PAGEFLAG(Uncached, uncached) | 261 | PAGEFLAG(Uncached, uncached) |
262 | #else | 262 | #else |
263 | PAGEFLAG_FALSE(Uncached) | 263 | PAGEFLAG_FALSE(Uncached) |
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index aec3252afcf5..ed5d7501e181 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
@@ -132,7 +132,7 @@ static inline int page_cache_get_speculative(struct page *page) | |||
132 | { | 132 | { |
133 | VM_BUG_ON(in_interrupt()); | 133 | VM_BUG_ON(in_interrupt()); |
134 | 134 | ||
135 | #if !defined(CONFIG_SMP) && defined(CONFIG_CLASSIC_RCU) | 135 | #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU) |
136 | # ifdef CONFIG_PREEMPT | 136 | # ifdef CONFIG_PREEMPT |
137 | VM_BUG_ON(!in_atomic()); | 137 | VM_BUG_ON(!in_atomic()); |
138 | # endif | 138 | # endif |
@@ -170,7 +170,7 @@ static inline int page_cache_add_speculative(struct page *page, int count) | |||
170 | { | 170 | { |
171 | VM_BUG_ON(in_interrupt()); | 171 | VM_BUG_ON(in_interrupt()); |
172 | 172 | ||
173 | #if !defined(CONFIG_SMP) && defined(CONFIG_CLASSIC_RCU) | 173 | #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU) |
174 | # ifdef CONFIG_PREEMPT | 174 | # ifdef CONFIG_PREEMPT |
175 | VM_BUG_ON(!in_atomic()); | 175 | VM_BUG_ON(!in_atomic()); |
176 | # endif | 176 | # endif |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 73b46b6b904f..0d96be93b926 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -376,6 +376,9 @@ | |||
376 | #define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c | 376 | #define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c |
377 | #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 | 377 | #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 |
378 | #define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c | 378 | #define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c |
379 | /* AMD SB Chipset */ | ||
380 | #define PCI_DEVICE_ID_AMD_SB900_IDE 0x780c | ||
381 | #define PCI_DEVICE_ID_AMD_SB900_SATA_IDE 0x7800 | ||
379 | 382 | ||
380 | #define PCI_VENDOR_ID_VLSI 0x1004 | 383 | #define PCI_VENDOR_ID_VLSI 0x1004 |
381 | #define PCI_DEVICE_ID_VLSI_82C592 0x0005 | 384 | #define PCI_DEVICE_ID_VLSI_82C592 0x0005 |
@@ -537,6 +540,7 @@ | |||
537 | #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 | 540 | #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 |
538 | #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 | 541 | #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 |
539 | #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 | 542 | #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 |
543 | #define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F | ||
540 | #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 | 544 | #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 |
541 | #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 | 545 | #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 |
542 | #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 | 546 | #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 |
@@ -877,6 +881,7 @@ | |||
877 | #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 | 881 | #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 |
878 | #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 | 882 | #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 |
879 | #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 | 883 | #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 |
884 | #define PCI_DEVICE_ID_APPLE_U4_PCIE 0x005b | ||
880 | #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 | 885 | #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 |
881 | #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 | 886 | #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 |
882 | #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a | 887 | #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a |
@@ -1984,6 +1989,8 @@ | |||
1984 | 1989 | ||
1985 | #define PCI_VENDOR_ID_SAMSUNG 0x144d | 1990 | #define PCI_VENDOR_ID_SAMSUNG 0x144d |
1986 | 1991 | ||
1992 | #define PCI_VENDOR_ID_GIGABYTE 0x1458 | ||
1993 | |||
1987 | #define PCI_VENDOR_ID_AMBIT 0x1468 | 1994 | #define PCI_VENDOR_ID_AMBIT 0x1468 |
1988 | 1995 | ||
1989 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 | 1996 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 |
@@ -2062,7 +2069,6 @@ | |||
2062 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 | 2069 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 |
2063 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 | 2070 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 |
2064 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 | 2071 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 |
2065 | #define PCI_DEVICE_ID_TIGON3_5785 0x1699 | ||
2066 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a | 2072 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a |
2067 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b | 2073 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b |
2068 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c | 2074 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c |
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h index 68438e18fff4..9bd03193ecd4 100644 --- a/include/linux/percpu-defs.h +++ b/include/linux/percpu-defs.h | |||
@@ -10,22 +10,70 @@ | |||
10 | /* | 10 | /* |
11 | * Base implementations of per-CPU variable declarations and definitions, where | 11 | * Base implementations of per-CPU variable declarations and definitions, where |
12 | * the section in which the variable is to be placed is provided by the | 12 | * the section in which the variable is to be placed is provided by the |
13 | * 'section' argument. This may be used to affect the parameters governing the | 13 | * 'sec' argument. This may be used to affect the parameters governing the |
14 | * variable's storage. | 14 | * variable's storage. |
15 | * | 15 | * |
16 | * NOTE! The sections for the DECLARE and for the DEFINE must match, lest | 16 | * NOTE! The sections for the DECLARE and for the DEFINE must match, lest |
17 | * linkage errors occur due the compiler generating the wrong code to access | 17 | * linkage errors occur due the compiler generating the wrong code to access |
18 | * that section. | 18 | * that section. |
19 | */ | 19 | */ |
20 | #define DECLARE_PER_CPU_SECTION(type, name, section) \ | 20 | #define __PCPU_ATTRS(sec) \ |
21 | extern \ | 21 | __attribute__((section(PER_CPU_BASE_SECTION sec))) \ |
22 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ | 22 | PER_CPU_ATTRIBUTES |
23 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | 23 | |
24 | 24 | #define __PCPU_DUMMY_ATTRS \ | |
25 | #define DEFINE_PER_CPU_SECTION(type, name, section) \ | 25 | __attribute__((section(".discard"), unused)) |
26 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ | 26 | |
27 | PER_CPU_ATTRIBUTES PER_CPU_DEF_ATTRIBUTES \ | 27 | /* |
28 | * s390 and alpha modules require percpu variables to be defined as | ||
29 | * weak to force the compiler to generate GOT based external | ||
30 | * references for them. This is necessary because percpu sections | ||
31 | * will be located outside of the usually addressable area. | ||
32 | * | ||
33 | * This definition puts the following two extra restrictions when | ||
34 | * defining percpu variables. | ||
35 | * | ||
36 | * 1. The symbol must be globally unique, even the static ones. | ||
37 | * 2. Static percpu variables cannot be defined inside a function. | ||
38 | * | ||
39 | * Archs which need weak percpu definitions should define | ||
40 | * ARCH_NEEDS_WEAK_PER_CPU in asm/percpu.h when necessary. | ||
41 | * | ||
42 | * To ensure that the generic code observes the above two | ||
43 | * restrictions, if CONFIG_DEBUG_FORCE_WEAK_PER_CPU is set weak | ||
44 | * definition is used for all cases. | ||
45 | */ | ||
46 | #if defined(ARCH_NEEDS_WEAK_PER_CPU) || defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU) | ||
47 | /* | ||
48 | * __pcpu_scope_* dummy variable is used to enforce scope. It | ||
49 | * receives the static modifier when it's used in front of | ||
50 | * DEFINE_PER_CPU() and will trigger build failure if | ||
51 | * DECLARE_PER_CPU() is used for the same variable. | ||
52 | * | ||
53 | * __pcpu_unique_* dummy variable is used to enforce symbol uniqueness | ||
54 | * such that hidden weak symbol collision, which will cause unrelated | ||
55 | * variables to share the same address, can be detected during build. | ||
56 | */ | ||
57 | #define DECLARE_PER_CPU_SECTION(type, name, sec) \ | ||
58 | extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ | ||
59 | extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name | ||
60 | |||
61 | #define DEFINE_PER_CPU_SECTION(type, name, sec) \ | ||
62 | __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ | ||
63 | __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \ | ||
64 | __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \ | ||
28 | __typeof__(type) per_cpu__##name | 65 | __typeof__(type) per_cpu__##name |
66 | #else | ||
67 | /* | ||
68 | * Normal declaration and definition macros. | ||
69 | */ | ||
70 | #define DECLARE_PER_CPU_SECTION(type, name, sec) \ | ||
71 | extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name | ||
72 | |||
73 | #define DEFINE_PER_CPU_SECTION(type, name, sec) \ | ||
74 | __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES \ | ||
75 | __typeof__(type) per_cpu__##name | ||
76 | #endif | ||
29 | 77 | ||
30 | /* | 78 | /* |
31 | * Variant on the per-CPU variable declaration/definition theme used for | 79 | * Variant on the per-CPU variable declaration/definition theme used for |
@@ -66,14 +114,24 @@ | |||
66 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ | 114 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ |
67 | ____cacheline_aligned_in_smp | 115 | ____cacheline_aligned_in_smp |
68 | 116 | ||
117 | #define DECLARE_PER_CPU_ALIGNED(type, name) \ | ||
118 | DECLARE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ | ||
119 | ____cacheline_aligned | ||
120 | |||
121 | #define DEFINE_PER_CPU_ALIGNED(type, name) \ | ||
122 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ | ||
123 | ____cacheline_aligned | ||
124 | |||
69 | /* | 125 | /* |
70 | * Declaration/definition used for per-CPU variables that must be page aligned. | 126 | * Declaration/definition used for per-CPU variables that must be page aligned. |
71 | */ | 127 | */ |
72 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ | 128 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ |
73 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") | 129 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") \ |
130 | __aligned(PAGE_SIZE) | ||
74 | 131 | ||
75 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ | 132 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ |
76 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") | 133 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") \ |
134 | __aligned(PAGE_SIZE) | ||
77 | 135 | ||
78 | /* | 136 | /* |
79 | * Intermodule exports for per-CPU variables. | 137 | * Intermodule exports for per-CPU variables. |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 26fd9d12f050..878836ca999c 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -34,7 +34,7 @@ | |||
34 | 34 | ||
35 | #ifdef CONFIG_SMP | 35 | #ifdef CONFIG_SMP |
36 | 36 | ||
37 | #ifdef CONFIG_HAVE_DYNAMIC_PER_CPU_AREA | 37 | #ifndef CONFIG_HAVE_LEGACY_PER_CPU_AREA |
38 | 38 | ||
39 | /* minimum unit size, also is the maximum supported allocation size */ | 39 | /* minimum unit size, also is the maximum supported allocation size */ |
40 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) | 40 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) |
@@ -57,19 +57,70 @@ | |||
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | extern void *pcpu_base_addr; | 59 | extern void *pcpu_base_addr; |
60 | extern const unsigned long *pcpu_unit_offsets; | ||
60 | 61 | ||
61 | typedef struct page * (*pcpu_get_page_fn_t)(unsigned int cpu, int pageno); | 62 | struct pcpu_group_info { |
62 | typedef void (*pcpu_populate_pte_fn_t)(unsigned long addr); | 63 | int nr_units; /* aligned # of units */ |
64 | unsigned long base_offset; /* base address offset */ | ||
65 | unsigned int *cpu_map; /* unit->cpu map, empty | ||
66 | * entries contain NR_CPUS */ | ||
67 | }; | ||
68 | |||
69 | struct pcpu_alloc_info { | ||
70 | size_t static_size; | ||
71 | size_t reserved_size; | ||
72 | size_t dyn_size; | ||
73 | size_t unit_size; | ||
74 | size_t atom_size; | ||
75 | size_t alloc_size; | ||
76 | size_t __ai_size; /* internal, don't use */ | ||
77 | int nr_groups; /* 0 if grouping unnecessary */ | ||
78 | struct pcpu_group_info groups[]; | ||
79 | }; | ||
63 | 80 | ||
64 | extern size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, | 81 | enum pcpu_fc { |
65 | size_t static_size, size_t reserved_size, | 82 | PCPU_FC_AUTO, |
66 | ssize_t dyn_size, ssize_t unit_size, | 83 | PCPU_FC_EMBED, |
67 | void *base_addr, | 84 | PCPU_FC_PAGE, |
68 | pcpu_populate_pte_fn_t populate_pte_fn); | ||
69 | 85 | ||
70 | extern ssize_t __init pcpu_embed_first_chunk( | 86 | PCPU_FC_NR, |
71 | size_t static_size, size_t reserved_size, | 87 | }; |
72 | ssize_t dyn_size, ssize_t unit_size); | 88 | extern const char *pcpu_fc_names[PCPU_FC_NR]; |
89 | |||
90 | extern enum pcpu_fc pcpu_chosen_fc; | ||
91 | |||
92 | typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int cpu, size_t size, | ||
93 | size_t align); | ||
94 | typedef void (*pcpu_fc_free_fn_t)(void *ptr, size_t size); | ||
95 | typedef void (*pcpu_fc_populate_pte_fn_t)(unsigned long addr); | ||
96 | typedef int (pcpu_fc_cpu_distance_fn_t)(unsigned int from, unsigned int to); | ||
97 | |||
98 | extern struct pcpu_alloc_info * __init pcpu_alloc_alloc_info(int nr_groups, | ||
99 | int nr_units); | ||
100 | extern void __init pcpu_free_alloc_info(struct pcpu_alloc_info *ai); | ||
101 | |||
102 | extern struct pcpu_alloc_info * __init pcpu_build_alloc_info( | ||
103 | size_t reserved_size, ssize_t dyn_size, | ||
104 | size_t atom_size, | ||
105 | pcpu_fc_cpu_distance_fn_t cpu_distance_fn); | ||
106 | |||
107 | extern int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, | ||
108 | void *base_addr); | ||
109 | |||
110 | #ifdef CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK | ||
111 | extern int __init pcpu_embed_first_chunk(size_t reserved_size, ssize_t dyn_size, | ||
112 | size_t atom_size, | ||
113 | pcpu_fc_cpu_distance_fn_t cpu_distance_fn, | ||
114 | pcpu_fc_alloc_fn_t alloc_fn, | ||
115 | pcpu_fc_free_fn_t free_fn); | ||
116 | #endif | ||
117 | |||
118 | #ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK | ||
119 | extern int __init pcpu_page_first_chunk(size_t reserved_size, | ||
120 | pcpu_fc_alloc_fn_t alloc_fn, | ||
121 | pcpu_fc_free_fn_t free_fn, | ||
122 | pcpu_fc_populate_pte_fn_t populate_pte_fn); | ||
123 | #endif | ||
73 | 124 | ||
74 | /* | 125 | /* |
75 | * Use this to get to a cpu's version of the per-cpu object | 126 | * Use this to get to a cpu's version of the per-cpu object |
@@ -80,7 +131,7 @@ extern ssize_t __init pcpu_embed_first_chunk( | |||
80 | 131 | ||
81 | extern void *__alloc_reserved_percpu(size_t size, size_t align); | 132 | extern void *__alloc_reserved_percpu(size_t size, size_t align); |
82 | 133 | ||
83 | #else /* CONFIG_HAVE_DYNAMIC_PER_CPU_AREA */ | 134 | #else /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */ |
84 | 135 | ||
85 | struct percpu_data { | 136 | struct percpu_data { |
86 | void *ptrs[1]; | 137 | void *ptrs[1]; |
@@ -99,11 +150,15 @@ struct percpu_data { | |||
99 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ | 150 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ |
100 | }) | 151 | }) |
101 | 152 | ||
102 | #endif /* CONFIG_HAVE_DYNAMIC_PER_CPU_AREA */ | 153 | #endif /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */ |
103 | 154 | ||
104 | extern void *__alloc_percpu(size_t size, size_t align); | 155 | extern void *__alloc_percpu(size_t size, size_t align); |
105 | extern void free_percpu(void *__pdata); | 156 | extern void free_percpu(void *__pdata); |
106 | 157 | ||
158 | #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA | ||
159 | extern void __init setup_per_cpu_areas(void); | ||
160 | #endif | ||
161 | |||
107 | #else /* CONFIG_SMP */ | 162 | #else /* CONFIG_SMP */ |
108 | 163 | ||
109 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) | 164 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) |
@@ -124,6 +179,13 @@ static inline void free_percpu(void *p) | |||
124 | kfree(p); | 179 | kfree(p); |
125 | } | 180 | } |
126 | 181 | ||
182 | static inline void __init setup_per_cpu_areas(void) { } | ||
183 | |||
184 | static inline void *pcpu_lpage_remapped(void *kaddr) | ||
185 | { | ||
186 | return NULL; | ||
187 | } | ||
188 | |||
127 | #endif /* CONFIG_SMP */ | 189 | #endif /* CONFIG_SMP */ |
128 | 190 | ||
129 | #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ | 191 | #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ |
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index e604e6ef72dd..972f90d7a32f 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
@@ -115,27 +115,44 @@ enum perf_counter_sample_format { | |||
115 | PERF_SAMPLE_TID = 1U << 1, | 115 | PERF_SAMPLE_TID = 1U << 1, |
116 | PERF_SAMPLE_TIME = 1U << 2, | 116 | PERF_SAMPLE_TIME = 1U << 2, |
117 | PERF_SAMPLE_ADDR = 1U << 3, | 117 | PERF_SAMPLE_ADDR = 1U << 3, |
118 | PERF_SAMPLE_GROUP = 1U << 4, | 118 | PERF_SAMPLE_READ = 1U << 4, |
119 | PERF_SAMPLE_CALLCHAIN = 1U << 5, | 119 | PERF_SAMPLE_CALLCHAIN = 1U << 5, |
120 | PERF_SAMPLE_ID = 1U << 6, | 120 | PERF_SAMPLE_ID = 1U << 6, |
121 | PERF_SAMPLE_CPU = 1U << 7, | 121 | PERF_SAMPLE_CPU = 1U << 7, |
122 | PERF_SAMPLE_PERIOD = 1U << 8, | 122 | PERF_SAMPLE_PERIOD = 1U << 8, |
123 | PERF_SAMPLE_STREAM_ID = 1U << 9, | 123 | PERF_SAMPLE_STREAM_ID = 1U << 9, |
124 | PERF_SAMPLE_RAW = 1U << 10, | ||
124 | 125 | ||
125 | PERF_SAMPLE_MAX = 1U << 10, /* non-ABI */ | 126 | PERF_SAMPLE_MAX = 1U << 11, /* non-ABI */ |
126 | }; | 127 | }; |
127 | 128 | ||
128 | /* | 129 | /* |
129 | * Bits that can be set in attr.read_format to request that | 130 | * The format of the data returned by read() on a perf counter fd, |
130 | * reads on the counter should return the indicated quantities, | 131 | * as specified by attr.read_format: |
131 | * in increasing order of bit value, after the counter value. | 132 | * |
133 | * struct read_format { | ||
134 | * { u64 value; | ||
135 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
136 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
137 | * { u64 id; } && PERF_FORMAT_ID | ||
138 | * } && !PERF_FORMAT_GROUP | ||
139 | * | ||
140 | * { u64 nr; | ||
141 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
142 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
143 | * { u64 value; | ||
144 | * { u64 id; } && PERF_FORMAT_ID | ||
145 | * } cntr[nr]; | ||
146 | * } && PERF_FORMAT_GROUP | ||
147 | * }; | ||
132 | */ | 148 | */ |
133 | enum perf_counter_read_format { | 149 | enum perf_counter_read_format { |
134 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, | 150 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, |
135 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, | 151 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, |
136 | PERF_FORMAT_ID = 1U << 2, | 152 | PERF_FORMAT_ID = 1U << 2, |
153 | PERF_FORMAT_GROUP = 1U << 3, | ||
137 | 154 | ||
138 | PERF_FORMAT_MAX = 1U << 3, /* non-ABI */ | 155 | PERF_FORMAT_MAX = 1U << 4, /* non-ABI */ |
139 | }; | 156 | }; |
140 | 157 | ||
141 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ | 158 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ |
@@ -199,6 +216,7 @@ struct perf_counter_attr { | |||
199 | #define PERF_COUNTER_IOC_REFRESH _IO ('$', 2) | 216 | #define PERF_COUNTER_IOC_REFRESH _IO ('$', 2) |
200 | #define PERF_COUNTER_IOC_RESET _IO ('$', 3) | 217 | #define PERF_COUNTER_IOC_RESET _IO ('$', 3) |
201 | #define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64) | 218 | #define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64) |
219 | #define PERF_COUNTER_IOC_SET_OUTPUT _IO ('$', 5) | ||
202 | 220 | ||
203 | enum perf_counter_ioc_flags { | 221 | enum perf_counter_ioc_flags { |
204 | PERF_IOC_FLAG_GROUP = 1U << 0, | 222 | PERF_IOC_FLAG_GROUP = 1U << 0, |
@@ -342,10 +360,8 @@ enum perf_event_type { | |||
342 | * struct { | 360 | * struct { |
343 | * struct perf_event_header header; | 361 | * struct perf_event_header header; |
344 | * u32 pid, tid; | 362 | * u32 pid, tid; |
345 | * u64 value; | 363 | * |
346 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | 364 | * struct read_format values; |
347 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
348 | * { u64 parent_id; } && PERF_FORMAT_ID | ||
349 | * }; | 365 | * }; |
350 | */ | 366 | */ |
351 | PERF_EVENT_READ = 8, | 367 | PERF_EVENT_READ = 8, |
@@ -363,11 +379,24 @@ enum perf_event_type { | |||
363 | * { u32 cpu, res; } && PERF_SAMPLE_CPU | 379 | * { u32 cpu, res; } && PERF_SAMPLE_CPU |
364 | * { u64 period; } && PERF_SAMPLE_PERIOD | 380 | * { u64 period; } && PERF_SAMPLE_PERIOD |
365 | * | 381 | * |
366 | * { u64 nr; | 382 | * { struct read_format values; } && PERF_SAMPLE_READ |
367 | * { u64 id, val; } cnt[nr]; } && PERF_SAMPLE_GROUP | ||
368 | * | 383 | * |
369 | * { u64 nr, | 384 | * { u64 nr, |
370 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN | 385 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN |
386 | * | ||
387 | * # | ||
388 | * # The RAW record below is opaque data wrt the ABI | ||
389 | * # | ||
390 | * # That is, the ABI doesn't make any promises wrt to | ||
391 | * # the stability of its content, it may vary depending | ||
392 | * # on event, hardware, kernel version and phase of | ||
393 | * # the moon. | ||
394 | * # | ||
395 | * # In other words, PERF_SAMPLE_RAW contents are not an ABI. | ||
396 | * # | ||
397 | * | ||
398 | * { u32 size; | ||
399 | * char data[size];}&& PERF_SAMPLE_RAW | ||
371 | * }; | 400 | * }; |
372 | */ | 401 | */ |
373 | PERF_EVENT_SAMPLE = 9, | 402 | PERF_EVENT_SAMPLE = 9, |
@@ -387,6 +416,9 @@ enum perf_callchain_context { | |||
387 | PERF_CONTEXT_MAX = (__u64)-4095, | 416 | PERF_CONTEXT_MAX = (__u64)-4095, |
388 | }; | 417 | }; |
389 | 418 | ||
419 | #define PERF_FLAG_FD_NO_GROUP (1U << 0) | ||
420 | #define PERF_FLAG_FD_OUTPUT (1U << 1) | ||
421 | |||
390 | #ifdef __KERNEL__ | 422 | #ifdef __KERNEL__ |
391 | /* | 423 | /* |
392 | * Kernel-internal data types and definitions: | 424 | * Kernel-internal data types and definitions: |
@@ -413,6 +445,11 @@ struct perf_callchain_entry { | |||
413 | __u64 ip[PERF_MAX_STACK_DEPTH]; | 445 | __u64 ip[PERF_MAX_STACK_DEPTH]; |
414 | }; | 446 | }; |
415 | 447 | ||
448 | struct perf_raw_record { | ||
449 | u32 size; | ||
450 | void *data; | ||
451 | }; | ||
452 | |||
416 | struct task_struct; | 453 | struct task_struct; |
417 | 454 | ||
418 | /** | 455 | /** |
@@ -503,6 +540,7 @@ struct perf_counter { | |||
503 | struct list_head sibling_list; | 540 | struct list_head sibling_list; |
504 | int nr_siblings; | 541 | int nr_siblings; |
505 | struct perf_counter *group_leader; | 542 | struct perf_counter *group_leader; |
543 | struct perf_counter *output; | ||
506 | const struct pmu *pmu; | 544 | const struct pmu *pmu; |
507 | 545 | ||
508 | enum perf_counter_active_state state; | 546 | enum perf_counter_active_state state; |
@@ -681,10 +719,13 @@ struct perf_sample_data { | |||
681 | struct pt_regs *regs; | 719 | struct pt_regs *regs; |
682 | u64 addr; | 720 | u64 addr; |
683 | u64 period; | 721 | u64 period; |
722 | struct perf_raw_record *raw; | ||
684 | }; | 723 | }; |
685 | 724 | ||
686 | extern int perf_counter_overflow(struct perf_counter *counter, int nmi, | 725 | extern int perf_counter_overflow(struct perf_counter *counter, int nmi, |
687 | struct perf_sample_data *data); | 726 | struct perf_sample_data *data); |
727 | extern void perf_counter_output(struct perf_counter *counter, int nmi, | ||
728 | struct perf_sample_data *data); | ||
688 | 729 | ||
689 | /* | 730 | /* |
690 | * Return 1 for a software counter, 0 for a hardware counter | 731 | * Return 1 for a software counter, 0 for a hardware counter |
@@ -725,6 +766,8 @@ extern int sysctl_perf_counter_mlock; | |||
725 | extern int sysctl_perf_counter_sample_rate; | 766 | extern int sysctl_perf_counter_sample_rate; |
726 | 767 | ||
727 | extern void perf_counter_init(void); | 768 | extern void perf_counter_init(void); |
769 | extern void perf_tpcounter_event(int event_id, u64 addr, u64 count, | ||
770 | void *record, int entry_size); | ||
728 | 771 | ||
729 | #ifndef perf_misc_flags | 772 | #ifndef perf_misc_flags |
730 | #define perf_misc_flags(regs) (user_mode(regs) ? PERF_EVENT_MISC_USER : \ | 773 | #define perf_misc_flags(regs) (user_mode(regs) ? PERF_EVENT_MISC_USER : \ |
diff --git a/include/linux/phonet.h b/include/linux/phonet.h index ee5e3c9e2bca..1ef5a0781831 100644 --- a/include/linux/phonet.h +++ b/include/linux/phonet.h | |||
@@ -99,6 +99,9 @@ struct sockaddr_pn { | |||
99 | __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; | 99 | __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; |
100 | } __attribute__ ((packed)); | 100 | } __attribute__ ((packed)); |
101 | 101 | ||
102 | /* Well known address */ | ||
103 | #define PN_DEV_PC 0x10 | ||
104 | |||
102 | static inline __u16 pn_object(__u8 addr, __u16 port) | 105 | static inline __u16 pn_object(__u8 addr, __u16 port) |
103 | { | 106 | { |
104 | return (addr << 8) | (port & 0x3ff); | 107 | return (addr << 8) | (port & 0x3ff); |
@@ -170,4 +173,21 @@ static inline __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn) | |||
170 | return spn->spn_resource; | 173 | return spn->spn_resource; |
171 | } | 174 | } |
172 | 175 | ||
176 | /* Phonet device ioctl requests */ | ||
177 | #ifdef __KERNEL__ | ||
178 | #define SIOCPNGAUTOCONF (SIOCDEVPRIVATE + 0) | ||
179 | |||
180 | struct if_phonet_autoconf { | ||
181 | uint8_t device; | ||
182 | }; | ||
183 | |||
184 | struct if_phonet_req { | ||
185 | char ifr_phonet_name[16]; | ||
186 | union { | ||
187 | struct if_phonet_autoconf ifru_phonet_autoconf; | ||
188 | } ifr_ifru; | ||
189 | }; | ||
190 | #define ifr_phonet_autoconf ifr_ifru.ifru_phonet_autoconf | ||
191 | #endif /* __KERNEL__ */ | ||
192 | |||
173 | #endif | 193 | #endif |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 8dc5123b6305..3c6675c2444b 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
@@ -22,6 +22,9 @@ struct platform_device { | |||
22 | struct resource * resource; | 22 | struct resource * resource; |
23 | 23 | ||
24 | struct platform_device_id *id_entry; | 24 | struct platform_device_id *id_entry; |
25 | |||
26 | /* arch specific additions */ | ||
27 | struct pdev_archdata archdata; | ||
25 | }; | 28 | }; |
26 | 29 | ||
27 | #define platform_get_device_id(pdev) ((pdev)->id_entry) | 30 | #define platform_get_device_id(pdev) ((pdev)->id_entry) |
@@ -57,8 +60,6 @@ struct platform_driver { | |||
57 | int (*remove)(struct platform_device *); | 60 | int (*remove)(struct platform_device *); |
58 | void (*shutdown)(struct platform_device *); | 61 | void (*shutdown)(struct platform_device *); |
59 | int (*suspend)(struct platform_device *, pm_message_t state); | 62 | int (*suspend)(struct platform_device *, pm_message_t state); |
60 | int (*suspend_late)(struct platform_device *, pm_message_t state); | ||
61 | int (*resume_early)(struct platform_device *); | ||
62 | int (*resume)(struct platform_device *); | 63 | int (*resume)(struct platform_device *); |
63 | struct device_driver driver; | 64 | struct device_driver driver; |
64 | struct platform_device_id *id_table; | 65 | struct platform_device_id *id_table; |
diff --git a/include/linux/pm.h b/include/linux/pm.h index b3f74764a586..3b7e04b95bd2 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -22,6 +22,10 @@ | |||
22 | #define _LINUX_PM_H | 22 | #define _LINUX_PM_H |
23 | 23 | ||
24 | #include <linux/list.h> | 24 | #include <linux/list.h> |
25 | #include <linux/workqueue.h> | ||
26 | #include <linux/spinlock.h> | ||
27 | #include <linux/wait.h> | ||
28 | #include <linux/timer.h> | ||
25 | 29 | ||
26 | /* | 30 | /* |
27 | * Callbacks for platform drivers to implement. | 31 | * Callbacks for platform drivers to implement. |
@@ -165,6 +169,28 @@ typedef struct pm_message { | |||
165 | * It is allowed to unregister devices while the above callbacks are being | 169 | * It is allowed to unregister devices while the above callbacks are being |
166 | * executed. However, it is not allowed to unregister a device from within any | 170 | * executed. However, it is not allowed to unregister a device from within any |
167 | * of its own callbacks. | 171 | * of its own callbacks. |
172 | * | ||
173 | * There also are the following callbacks related to run-time power management | ||
174 | * of devices: | ||
175 | * | ||
176 | * @runtime_suspend: Prepare the device for a condition in which it won't be | ||
177 | * able to communicate with the CPU(s) and RAM due to power management. | ||
178 | * This need not mean that the device should be put into a low power state. | ||
179 | * For example, if the device is behind a link which is about to be turned | ||
180 | * off, the device may remain at full power. If the device does go to low | ||
181 | * power and if device_may_wakeup(dev) is true, remote wake-up (i.e., a | ||
182 | * hardware mechanism allowing the device to request a change of its power | ||
183 | * state, such as PCI PME) should be enabled for it. | ||
184 | * | ||
185 | * @runtime_resume: Put the device into the fully active state in response to a | ||
186 | * wake-up event generated by hardware or at the request of software. If | ||
187 | * necessary, put the device into the full power state and restore its | ||
188 | * registers, so that it is fully operational. | ||
189 | * | ||
190 | * @runtime_idle: Device appears to be inactive and it might be put into a low | ||
191 | * power state if all of the necessary conditions are satisfied. Check | ||
192 | * these conditions and handle the device as appropriate, possibly queueing | ||
193 | * a suspend request for it. The return value is ignored by the PM core. | ||
168 | */ | 194 | */ |
169 | 195 | ||
170 | struct dev_pm_ops { | 196 | struct dev_pm_ops { |
@@ -182,8 +208,25 @@ struct dev_pm_ops { | |||
182 | int (*thaw_noirq)(struct device *dev); | 208 | int (*thaw_noirq)(struct device *dev); |
183 | int (*poweroff_noirq)(struct device *dev); | 209 | int (*poweroff_noirq)(struct device *dev); |
184 | int (*restore_noirq)(struct device *dev); | 210 | int (*restore_noirq)(struct device *dev); |
211 | int (*runtime_suspend)(struct device *dev); | ||
212 | int (*runtime_resume)(struct device *dev); | ||
213 | int (*runtime_idle)(struct device *dev); | ||
185 | }; | 214 | }; |
186 | 215 | ||
216 | /* | ||
217 | * Use this if you want to use the same suspend and resume callbacks for suspend | ||
218 | * to RAM and hibernation. | ||
219 | */ | ||
220 | #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \ | ||
221 | struct dev_pm_ops name = { \ | ||
222 | .suspend = suspend_fn, \ | ||
223 | .resume = resume_fn, \ | ||
224 | .freeze = suspend_fn, \ | ||
225 | .thaw = resume_fn, \ | ||
226 | .poweroff = suspend_fn, \ | ||
227 | .restore = resume_fn, \ | ||
228 | } | ||
229 | |||
187 | /** | 230 | /** |
188 | * PM_EVENT_ messages | 231 | * PM_EVENT_ messages |
189 | * | 232 | * |
@@ -315,14 +358,80 @@ enum dpm_state { | |||
315 | DPM_OFF_IRQ, | 358 | DPM_OFF_IRQ, |
316 | }; | 359 | }; |
317 | 360 | ||
361 | /** | ||
362 | * Device run-time power management status. | ||
363 | * | ||
364 | * These status labels are used internally by the PM core to indicate the | ||
365 | * current status of a device with respect to the PM core operations. They do | ||
366 | * not reflect the actual power state of the device or its status as seen by the | ||
367 | * driver. | ||
368 | * | ||
369 | * RPM_ACTIVE Device is fully operational. Indicates that the device | ||
370 | * bus type's ->runtime_resume() callback has completed | ||
371 | * successfully. | ||
372 | * | ||
373 | * RPM_SUSPENDED Device bus type's ->runtime_suspend() callback has | ||
374 | * completed successfully. The device is regarded as | ||
375 | * suspended. | ||
376 | * | ||
377 | * RPM_RESUMING Device bus type's ->runtime_resume() callback is being | ||
378 | * executed. | ||
379 | * | ||
380 | * RPM_SUSPENDING Device bus type's ->runtime_suspend() callback is being | ||
381 | * executed. | ||
382 | */ | ||
383 | |||
384 | enum rpm_status { | ||
385 | RPM_ACTIVE = 0, | ||
386 | RPM_RESUMING, | ||
387 | RPM_SUSPENDED, | ||
388 | RPM_SUSPENDING, | ||
389 | }; | ||
390 | |||
391 | /** | ||
392 | * Device run-time power management request types. | ||
393 | * | ||
394 | * RPM_REQ_NONE Do nothing. | ||
395 | * | ||
396 | * RPM_REQ_IDLE Run the device bus type's ->runtime_idle() callback | ||
397 | * | ||
398 | * RPM_REQ_SUSPEND Run the device bus type's ->runtime_suspend() callback | ||
399 | * | ||
400 | * RPM_REQ_RESUME Run the device bus type's ->runtime_resume() callback | ||
401 | */ | ||
402 | |||
403 | enum rpm_request { | ||
404 | RPM_REQ_NONE = 0, | ||
405 | RPM_REQ_IDLE, | ||
406 | RPM_REQ_SUSPEND, | ||
407 | RPM_REQ_RESUME, | ||
408 | }; | ||
409 | |||
318 | struct dev_pm_info { | 410 | struct dev_pm_info { |
319 | pm_message_t power_state; | 411 | pm_message_t power_state; |
320 | unsigned can_wakeup:1; | 412 | unsigned int can_wakeup:1; |
321 | unsigned should_wakeup:1; | 413 | unsigned int should_wakeup:1; |
322 | enum dpm_state status; /* Owned by the PM core */ | 414 | enum dpm_state status; /* Owned by the PM core */ |
323 | #ifdef CONFIG_PM_SLEEP | 415 | #ifdef CONFIG_PM_SLEEP |
324 | struct list_head entry; | 416 | struct list_head entry; |
325 | #endif | 417 | #endif |
418 | #ifdef CONFIG_PM_RUNTIME | ||
419 | struct timer_list suspend_timer; | ||
420 | unsigned long timer_expires; | ||
421 | struct work_struct work; | ||
422 | wait_queue_head_t wait_queue; | ||
423 | spinlock_t lock; | ||
424 | atomic_t usage_count; | ||
425 | atomic_t child_count; | ||
426 | unsigned int disable_depth:3; | ||
427 | unsigned int ignore_children:1; | ||
428 | unsigned int idle_notification:1; | ||
429 | unsigned int request_pending:1; | ||
430 | unsigned int deferred_resume:1; | ||
431 | enum rpm_request request; | ||
432 | enum rpm_status runtime_status; | ||
433 | int runtime_error; | ||
434 | #endif | ||
326 | }; | 435 | }; |
327 | 436 | ||
328 | /* | 437 | /* |
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h new file mode 100644 index 000000000000..44087044910f --- /dev/null +++ b/include/linux/pm_runtime.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * pm_runtime.h - Device run-time power management helper functions. | ||
3 | * | ||
4 | * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl> | ||
5 | * | ||
6 | * This file is released under the GPLv2. | ||
7 | */ | ||
8 | |||
9 | #ifndef _LINUX_PM_RUNTIME_H | ||
10 | #define _LINUX_PM_RUNTIME_H | ||
11 | |||
12 | #include <linux/device.h> | ||
13 | #include <linux/pm.h> | ||
14 | |||
15 | #ifdef CONFIG_PM_RUNTIME | ||
16 | |||
17 | extern struct workqueue_struct *pm_wq; | ||
18 | |||
19 | extern int pm_runtime_idle(struct device *dev); | ||
20 | extern int pm_runtime_suspend(struct device *dev); | ||
21 | extern int pm_runtime_resume(struct device *dev); | ||
22 | extern int pm_request_idle(struct device *dev); | ||
23 | extern int pm_schedule_suspend(struct device *dev, unsigned int delay); | ||
24 | extern int pm_request_resume(struct device *dev); | ||
25 | extern int __pm_runtime_get(struct device *dev, bool sync); | ||
26 | extern int __pm_runtime_put(struct device *dev, bool sync); | ||
27 | extern int __pm_runtime_set_status(struct device *dev, unsigned int status); | ||
28 | extern int pm_runtime_barrier(struct device *dev); | ||
29 | extern void pm_runtime_enable(struct device *dev); | ||
30 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); | ||
31 | |||
32 | static inline bool pm_children_suspended(struct device *dev) | ||
33 | { | ||
34 | return dev->power.ignore_children | ||
35 | || !atomic_read(&dev->power.child_count); | ||
36 | } | ||
37 | |||
38 | static inline void pm_suspend_ignore_children(struct device *dev, bool enable) | ||
39 | { | ||
40 | dev->power.ignore_children = enable; | ||
41 | } | ||
42 | |||
43 | static inline void pm_runtime_get_noresume(struct device *dev) | ||
44 | { | ||
45 | atomic_inc(&dev->power.usage_count); | ||
46 | } | ||
47 | |||
48 | static inline void pm_runtime_put_noidle(struct device *dev) | ||
49 | { | ||
50 | atomic_add_unless(&dev->power.usage_count, -1, 0); | ||
51 | } | ||
52 | |||
53 | #else /* !CONFIG_PM_RUNTIME */ | ||
54 | |||
55 | static inline int pm_runtime_idle(struct device *dev) { return -ENOSYS; } | ||
56 | static inline int pm_runtime_suspend(struct device *dev) { return -ENOSYS; } | ||
57 | static inline int pm_runtime_resume(struct device *dev) { return 0; } | ||
58 | static inline int pm_request_idle(struct device *dev) { return -ENOSYS; } | ||
59 | static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) | ||
60 | { | ||
61 | return -ENOSYS; | ||
62 | } | ||
63 | static inline int pm_request_resume(struct device *dev) { return 0; } | ||
64 | static inline int __pm_runtime_get(struct device *dev, bool sync) { return 1; } | ||
65 | static inline int __pm_runtime_put(struct device *dev, bool sync) { return 0; } | ||
66 | static inline int __pm_runtime_set_status(struct device *dev, | ||
67 | unsigned int status) { return 0; } | ||
68 | static inline int pm_runtime_barrier(struct device *dev) { return 0; } | ||
69 | static inline void pm_runtime_enable(struct device *dev) {} | ||
70 | static inline void __pm_runtime_disable(struct device *dev, bool c) {} | ||
71 | |||
72 | static inline bool pm_children_suspended(struct device *dev) { return false; } | ||
73 | static inline void pm_suspend_ignore_children(struct device *dev, bool en) {} | ||
74 | static inline void pm_runtime_get_noresume(struct device *dev) {} | ||
75 | static inline void pm_runtime_put_noidle(struct device *dev) {} | ||
76 | |||
77 | #endif /* !CONFIG_PM_RUNTIME */ | ||
78 | |||
79 | static inline int pm_runtime_get(struct device *dev) | ||
80 | { | ||
81 | return __pm_runtime_get(dev, false); | ||
82 | } | ||
83 | |||
84 | static inline int pm_runtime_get_sync(struct device *dev) | ||
85 | { | ||
86 | return __pm_runtime_get(dev, true); | ||
87 | } | ||
88 | |||
89 | static inline int pm_runtime_put(struct device *dev) | ||
90 | { | ||
91 | return __pm_runtime_put(dev, false); | ||
92 | } | ||
93 | |||
94 | static inline int pm_runtime_put_sync(struct device *dev) | ||
95 | { | ||
96 | return __pm_runtime_put(dev, true); | ||
97 | } | ||
98 | |||
99 | static inline int pm_runtime_set_active(struct device *dev) | ||
100 | { | ||
101 | return __pm_runtime_set_status(dev, RPM_ACTIVE); | ||
102 | } | ||
103 | |||
104 | static inline void pm_runtime_set_suspended(struct device *dev) | ||
105 | { | ||
106 | __pm_runtime_set_status(dev, RPM_SUSPENDED); | ||
107 | } | ||
108 | |||
109 | static inline void pm_runtime_disable(struct device *dev) | ||
110 | { | ||
111 | __pm_runtime_disable(dev, true); | ||
112 | } | ||
113 | |||
114 | #endif | ||
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h deleted file mode 100644 index bfd92e1e5d2c..000000000000 --- a/include/linux/rcuclassic.h +++ /dev/null | |||
@@ -1,178 +0,0 @@ | |||
1 | /* | ||
2 | * Read-Copy Update mechanism for mutual exclusion (classic version) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
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 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright IBM Corporation, 2001 | ||
19 | * | ||
20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | ||
21 | * | ||
22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> | ||
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
24 | * Papers: | ||
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
27 | * | ||
28 | * For detailed explanation of Read-Copy Update mechanism see - | ||
29 | * Documentation/RCU | ||
30 | * | ||
31 | */ | ||
32 | |||
33 | #ifndef __LINUX_RCUCLASSIC_H | ||
34 | #define __LINUX_RCUCLASSIC_H | ||
35 | |||
36 | #include <linux/cache.h> | ||
37 | #include <linux/spinlock.h> | ||
38 | #include <linux/threads.h> | ||
39 | #include <linux/cpumask.h> | ||
40 | #include <linux/seqlock.h> | ||
41 | |||
42 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
43 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rcp->jiffies_stall */ | ||
44 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rcp->jiffies_stall */ | ||
45 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
46 | |||
47 | /* Global control variables for rcupdate callback mechanism. */ | ||
48 | struct rcu_ctrlblk { | ||
49 | long cur; /* Current batch number. */ | ||
50 | long completed; /* Number of the last completed batch */ | ||
51 | long pending; /* Number of the last pending batch */ | ||
52 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
53 | unsigned long gp_start; /* Time at which GP started in jiffies. */ | ||
54 | unsigned long jiffies_stall; | ||
55 | /* Time at which to check for CPU stalls. */ | ||
56 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
57 | |||
58 | int signaled; | ||
59 | |||
60 | spinlock_t lock ____cacheline_internodealigned_in_smp; | ||
61 | DECLARE_BITMAP(cpumask, NR_CPUS); /* CPUs that need to switch for */ | ||
62 | /* current batch to proceed. */ | ||
63 | } ____cacheline_internodealigned_in_smp; | ||
64 | |||
65 | /* Is batch a before batch b ? */ | ||
66 | static inline int rcu_batch_before(long a, long b) | ||
67 | { | ||
68 | return (a - b) < 0; | ||
69 | } | ||
70 | |||
71 | /* Is batch a after batch b ? */ | ||
72 | static inline int rcu_batch_after(long a, long b) | ||
73 | { | ||
74 | return (a - b) > 0; | ||
75 | } | ||
76 | |||
77 | /* Per-CPU data for Read-Copy UPdate. */ | ||
78 | struct rcu_data { | ||
79 | /* 1) quiescent state handling : */ | ||
80 | long quiescbatch; /* Batch # for grace period */ | ||
81 | int passed_quiesc; /* User-mode/idle loop etc. */ | ||
82 | int qs_pending; /* core waits for quiesc state */ | ||
83 | |||
84 | /* 2) batch handling */ | ||
85 | /* | ||
86 | * if nxtlist is not NULL, then: | ||
87 | * batch: | ||
88 | * The batch # for the last entry of nxtlist | ||
89 | * [*nxttail[1], NULL = *nxttail[2]): | ||
90 | * Entries that batch # <= batch | ||
91 | * [*nxttail[0], *nxttail[1]): | ||
92 | * Entries that batch # <= batch - 1 | ||
93 | * [nxtlist, *nxttail[0]): | ||
94 | * Entries that batch # <= batch - 2 | ||
95 | * The grace period for these entries has completed, and | ||
96 | * the other grace-period-completed entries may be moved | ||
97 | * here temporarily in rcu_process_callbacks(). | ||
98 | */ | ||
99 | long batch; | ||
100 | struct rcu_head *nxtlist; | ||
101 | struct rcu_head **nxttail[3]; | ||
102 | long qlen; /* # of queued callbacks */ | ||
103 | struct rcu_head *donelist; | ||
104 | struct rcu_head **donetail; | ||
105 | long blimit; /* Upper limit on a processed batch */ | ||
106 | int cpu; | ||
107 | struct rcu_head barrier; | ||
108 | }; | ||
109 | |||
110 | /* | ||
111 | * Increment the quiescent state counter. | ||
112 | * The counter is a bit degenerated: We do not need to know | ||
113 | * how many quiescent states passed, just if there was at least | ||
114 | * one since the start of the grace period. Thus just a flag. | ||
115 | */ | ||
116 | extern void rcu_qsctr_inc(int cpu); | ||
117 | extern void rcu_bh_qsctr_inc(int cpu); | ||
118 | |||
119 | extern int rcu_pending(int cpu); | ||
120 | extern int rcu_needs_cpu(int cpu); | ||
121 | |||
122 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
123 | extern struct lockdep_map rcu_lock_map; | ||
124 | # define rcu_read_acquire() \ | ||
125 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
126 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
127 | #else | ||
128 | # define rcu_read_acquire() do { } while (0) | ||
129 | # define rcu_read_release() do { } while (0) | ||
130 | #endif | ||
131 | |||
132 | #define __rcu_read_lock() \ | ||
133 | do { \ | ||
134 | preempt_disable(); \ | ||
135 | __acquire(RCU); \ | ||
136 | rcu_read_acquire(); \ | ||
137 | } while (0) | ||
138 | #define __rcu_read_unlock() \ | ||
139 | do { \ | ||
140 | rcu_read_release(); \ | ||
141 | __release(RCU); \ | ||
142 | preempt_enable(); \ | ||
143 | } while (0) | ||
144 | #define __rcu_read_lock_bh() \ | ||
145 | do { \ | ||
146 | local_bh_disable(); \ | ||
147 | __acquire(RCU_BH); \ | ||
148 | rcu_read_acquire(); \ | ||
149 | } while (0) | ||
150 | #define __rcu_read_unlock_bh() \ | ||
151 | do { \ | ||
152 | rcu_read_release(); \ | ||
153 | __release(RCU_BH); \ | ||
154 | local_bh_enable(); \ | ||
155 | } while (0) | ||
156 | |||
157 | #define __synchronize_sched() synchronize_rcu() | ||
158 | |||
159 | #define call_rcu_sched(head, func) call_rcu(head, func) | ||
160 | |||
161 | extern void __rcu_init(void); | ||
162 | #define rcu_init_sched() do { } while (0) | ||
163 | extern void rcu_check_callbacks(int cpu, int user); | ||
164 | extern void rcu_restart_cpu(int cpu); | ||
165 | |||
166 | extern long rcu_batches_completed(void); | ||
167 | extern long rcu_batches_completed_bh(void); | ||
168 | |||
169 | #define rcu_enter_nohz() do { } while (0) | ||
170 | #define rcu_exit_nohz() do { } while (0) | ||
171 | |||
172 | /* A context switch is a grace period for rcuclassic. */ | ||
173 | static inline int rcu_blocking_is_gp(void) | ||
174 | { | ||
175 | return num_online_cpus() == 1; | ||
176 | } | ||
177 | |||
178 | #endif /* __LINUX_RCUCLASSIC_H */ | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 15fbb3ca634d..95e0615f4d75 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -51,18 +51,26 @@ struct rcu_head { | |||
51 | void (*func)(struct rcu_head *head); | 51 | void (*func)(struct rcu_head *head); |
52 | }; | 52 | }; |
53 | 53 | ||
54 | /* Internal to kernel, but needed by rcupreempt.h. */ | 54 | /* Exported common interfaces */ |
55 | extern void synchronize_rcu(void); | ||
56 | extern void synchronize_rcu_bh(void); | ||
57 | extern void rcu_barrier(void); | ||
58 | extern void rcu_barrier_bh(void); | ||
59 | extern void rcu_barrier_sched(void); | ||
60 | extern void synchronize_sched_expedited(void); | ||
61 | extern int sched_expedited_torture_stats(char *page); | ||
62 | |||
63 | /* Internal to kernel */ | ||
64 | extern void rcu_init(void); | ||
65 | extern void rcu_scheduler_starting(void); | ||
66 | extern int rcu_needs_cpu(int cpu); | ||
55 | extern int rcu_scheduler_active; | 67 | extern int rcu_scheduler_active; |
56 | 68 | ||
57 | #if defined(CONFIG_CLASSIC_RCU) | 69 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) |
58 | #include <linux/rcuclassic.h> | ||
59 | #elif defined(CONFIG_TREE_RCU) | ||
60 | #include <linux/rcutree.h> | 70 | #include <linux/rcutree.h> |
61 | #elif defined(CONFIG_PREEMPT_RCU) | ||
62 | #include <linux/rcupreempt.h> | ||
63 | #else | 71 | #else |
64 | #error "Unknown RCU implementation specified to kernel configuration" | 72 | #error "Unknown RCU implementation specified to kernel configuration" |
65 | #endif /* #else #if defined(CONFIG_CLASSIC_RCU) */ | 73 | #endif |
66 | 74 | ||
67 | #define RCU_HEAD_INIT { .next = NULL, .func = NULL } | 75 | #define RCU_HEAD_INIT { .next = NULL, .func = NULL } |
68 | #define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT | 76 | #define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT |
@@ -70,6 +78,16 @@ extern int rcu_scheduler_active; | |||
70 | (ptr)->next = NULL; (ptr)->func = NULL; \ | 78 | (ptr)->next = NULL; (ptr)->func = NULL; \ |
71 | } while (0) | 79 | } while (0) |
72 | 80 | ||
81 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
82 | extern struct lockdep_map rcu_lock_map; | ||
83 | # define rcu_read_acquire() \ | ||
84 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
85 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
86 | #else | ||
87 | # define rcu_read_acquire() do { } while (0) | ||
88 | # define rcu_read_release() do { } while (0) | ||
89 | #endif | ||
90 | |||
73 | /** | 91 | /** |
74 | * rcu_read_lock - mark the beginning of an RCU read-side critical section. | 92 | * rcu_read_lock - mark the beginning of an RCU read-side critical section. |
75 | * | 93 | * |
@@ -99,7 +117,12 @@ extern int rcu_scheduler_active; | |||
99 | * | 117 | * |
100 | * It is illegal to block while in an RCU read-side critical section. | 118 | * It is illegal to block while in an RCU read-side critical section. |
101 | */ | 119 | */ |
102 | #define rcu_read_lock() __rcu_read_lock() | 120 | static inline void rcu_read_lock(void) |
121 | { | ||
122 | __rcu_read_lock(); | ||
123 | __acquire(RCU); | ||
124 | rcu_read_acquire(); | ||
125 | } | ||
103 | 126 | ||
104 | /** | 127 | /** |
105 | * rcu_read_unlock - marks the end of an RCU read-side critical section. | 128 | * rcu_read_unlock - marks the end of an RCU read-side critical section. |
@@ -116,7 +139,12 @@ extern int rcu_scheduler_active; | |||
116 | * used as well. RCU does not care how the writers keep out of each | 139 | * used as well. RCU does not care how the writers keep out of each |
117 | * others' way, as long as they do so. | 140 | * others' way, as long as they do so. |
118 | */ | 141 | */ |
119 | #define rcu_read_unlock() __rcu_read_unlock() | 142 | static inline void rcu_read_unlock(void) |
143 | { | ||
144 | rcu_read_release(); | ||
145 | __release(RCU); | ||
146 | __rcu_read_unlock(); | ||
147 | } | ||
120 | 148 | ||
121 | /** | 149 | /** |
122 | * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section | 150 | * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section |
@@ -129,14 +157,24 @@ extern int rcu_scheduler_active; | |||
129 | * can use just rcu_read_lock(). | 157 | * can use just rcu_read_lock(). |
130 | * | 158 | * |
131 | */ | 159 | */ |
132 | #define rcu_read_lock_bh() __rcu_read_lock_bh() | 160 | static inline void rcu_read_lock_bh(void) |
161 | { | ||
162 | __rcu_read_lock_bh(); | ||
163 | __acquire(RCU_BH); | ||
164 | rcu_read_acquire(); | ||
165 | } | ||
133 | 166 | ||
134 | /* | 167 | /* |
135 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section | 168 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section |
136 | * | 169 | * |
137 | * See rcu_read_lock_bh() for more information. | 170 | * See rcu_read_lock_bh() for more information. |
138 | */ | 171 | */ |
139 | #define rcu_read_unlock_bh() __rcu_read_unlock_bh() | 172 | static inline void rcu_read_unlock_bh(void) |
173 | { | ||
174 | rcu_read_release(); | ||
175 | __release(RCU_BH); | ||
176 | __rcu_read_unlock_bh(); | ||
177 | } | ||
140 | 178 | ||
141 | /** | 179 | /** |
142 | * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section | 180 | * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section |
@@ -147,17 +185,34 @@ extern int rcu_scheduler_active; | |||
147 | * - call_rcu_sched() and rcu_barrier_sched() | 185 | * - call_rcu_sched() and rcu_barrier_sched() |
148 | * on the write-side to insure proper synchronization. | 186 | * on the write-side to insure proper synchronization. |
149 | */ | 187 | */ |
150 | #define rcu_read_lock_sched() preempt_disable() | 188 | static inline void rcu_read_lock_sched(void) |
151 | #define rcu_read_lock_sched_notrace() preempt_disable_notrace() | 189 | { |
190 | preempt_disable(); | ||
191 | __acquire(RCU_SCHED); | ||
192 | rcu_read_acquire(); | ||
193 | } | ||
194 | static inline notrace void rcu_read_lock_sched_notrace(void) | ||
195 | { | ||
196 | preempt_disable_notrace(); | ||
197 | __acquire(RCU_SCHED); | ||
198 | } | ||
152 | 199 | ||
153 | /* | 200 | /* |
154 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section | 201 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section |
155 | * | 202 | * |
156 | * See rcu_read_lock_sched for more information. | 203 | * See rcu_read_lock_sched for more information. |
157 | */ | 204 | */ |
158 | #define rcu_read_unlock_sched() preempt_enable() | 205 | static inline void rcu_read_unlock_sched(void) |
159 | #define rcu_read_unlock_sched_notrace() preempt_enable_notrace() | 206 | { |
160 | 207 | rcu_read_release(); | |
208 | __release(RCU_SCHED); | ||
209 | preempt_enable(); | ||
210 | } | ||
211 | static inline notrace void rcu_read_unlock_sched_notrace(void) | ||
212 | { | ||
213 | __release(RCU_SCHED); | ||
214 | preempt_enable_notrace(); | ||
215 | } | ||
161 | 216 | ||
162 | 217 | ||
163 | /** | 218 | /** |
@@ -259,15 +314,4 @@ extern void call_rcu(struct rcu_head *head, | |||
259 | extern void call_rcu_bh(struct rcu_head *head, | 314 | extern void call_rcu_bh(struct rcu_head *head, |
260 | void (*func)(struct rcu_head *head)); | 315 | void (*func)(struct rcu_head *head)); |
261 | 316 | ||
262 | /* Exported common interfaces */ | ||
263 | extern void synchronize_rcu(void); | ||
264 | extern void rcu_barrier(void); | ||
265 | extern void rcu_barrier_bh(void); | ||
266 | extern void rcu_barrier_sched(void); | ||
267 | |||
268 | /* Internal to kernel */ | ||
269 | extern void rcu_init(void); | ||
270 | extern void rcu_scheduler_starting(void); | ||
271 | extern int rcu_needs_cpu(int cpu); | ||
272 | |||
273 | #endif /* __LINUX_RCUPDATE_H */ | 317 | #endif /* __LINUX_RCUPDATE_H */ |
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h deleted file mode 100644 index fce522782ffa..000000000000 --- a/include/linux/rcupreempt.h +++ /dev/null | |||
@@ -1,127 +0,0 @@ | |||
1 | /* | ||
2 | * Read-Copy Update mechanism for mutual exclusion (RT implementation) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
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 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright (C) IBM Corporation, 2006 | ||
19 | * | ||
20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
21 | * | ||
22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | ||
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
24 | * Papers: | ||
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
27 | * | ||
28 | * For detailed explanation of Read-Copy Update mechanism see - | ||
29 | * Documentation/RCU | ||
30 | * | ||
31 | */ | ||
32 | |||
33 | #ifndef __LINUX_RCUPREEMPT_H | ||
34 | #define __LINUX_RCUPREEMPT_H | ||
35 | |||
36 | #include <linux/cache.h> | ||
37 | #include <linux/spinlock.h> | ||
38 | #include <linux/threads.h> | ||
39 | #include <linux/smp.h> | ||
40 | #include <linux/cpumask.h> | ||
41 | #include <linux/seqlock.h> | ||
42 | |||
43 | extern void rcu_qsctr_inc(int cpu); | ||
44 | static inline void rcu_bh_qsctr_inc(int cpu) { } | ||
45 | |||
46 | /* | ||
47 | * Someone might want to pass call_rcu_bh as a function pointer. | ||
48 | * So this needs to just be a rename and not a macro function. | ||
49 | * (no parentheses) | ||
50 | */ | ||
51 | #define call_rcu_bh call_rcu | ||
52 | |||
53 | /** | ||
54 | * call_rcu_sched - Queue RCU callback for invocation after sched grace period. | ||
55 | * @head: structure to be used for queueing the RCU updates. | ||
56 | * @func: actual update function to be invoked after the grace period | ||
57 | * | ||
58 | * The update function will be invoked some time after a full | ||
59 | * synchronize_sched()-style grace period elapses, in other words after | ||
60 | * all currently executing preempt-disabled sections of code (including | ||
61 | * hardirq handlers, NMI handlers, and local_irq_save() blocks) have | ||
62 | * completed. | ||
63 | */ | ||
64 | extern void call_rcu_sched(struct rcu_head *head, | ||
65 | void (*func)(struct rcu_head *head)); | ||
66 | |||
67 | extern void __rcu_read_lock(void) __acquires(RCU); | ||
68 | extern void __rcu_read_unlock(void) __releases(RCU); | ||
69 | extern int rcu_pending(int cpu); | ||
70 | extern int rcu_needs_cpu(int cpu); | ||
71 | |||
72 | #define __rcu_read_lock_bh() { rcu_read_lock(); local_bh_disable(); } | ||
73 | #define __rcu_read_unlock_bh() { local_bh_enable(); rcu_read_unlock(); } | ||
74 | |||
75 | extern void __synchronize_sched(void); | ||
76 | |||
77 | extern void __rcu_init(void); | ||
78 | extern void rcu_init_sched(void); | ||
79 | extern void rcu_check_callbacks(int cpu, int user); | ||
80 | extern void rcu_restart_cpu(int cpu); | ||
81 | extern long rcu_batches_completed(void); | ||
82 | |||
83 | /* | ||
84 | * Return the number of RCU batches processed thus far. Useful for debug | ||
85 | * and statistic. The _bh variant is identifcal to straight RCU | ||
86 | */ | ||
87 | static inline long rcu_batches_completed_bh(void) | ||
88 | { | ||
89 | return rcu_batches_completed(); | ||
90 | } | ||
91 | |||
92 | #ifdef CONFIG_RCU_TRACE | ||
93 | struct rcupreempt_trace; | ||
94 | extern long *rcupreempt_flipctr(int cpu); | ||
95 | extern long rcupreempt_data_completed(void); | ||
96 | extern int rcupreempt_flip_flag(int cpu); | ||
97 | extern int rcupreempt_mb_flag(int cpu); | ||
98 | extern char *rcupreempt_try_flip_state_name(void); | ||
99 | extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu); | ||
100 | #endif | ||
101 | |||
102 | struct softirq_action; | ||
103 | |||
104 | #ifdef CONFIG_NO_HZ | ||
105 | extern void rcu_enter_nohz(void); | ||
106 | extern void rcu_exit_nohz(void); | ||
107 | #else | ||
108 | # define rcu_enter_nohz() do { } while (0) | ||
109 | # define rcu_exit_nohz() do { } while (0) | ||
110 | #endif | ||
111 | |||
112 | /* | ||
113 | * A context switch is a grace period for rcupreempt synchronize_rcu() | ||
114 | * only during early boot, before the scheduler has been initialized. | ||
115 | * So, how the heck do we get a context switch? Well, if the caller | ||
116 | * invokes synchronize_rcu(), they are willing to accept a context | ||
117 | * switch, so we simply pretend that one happened. | ||
118 | * | ||
119 | * After boot, there might be a blocked or preempted task in an RCU | ||
120 | * read-side critical section, so we cannot then take the fastpath. | ||
121 | */ | ||
122 | static inline int rcu_blocking_is_gp(void) | ||
123 | { | ||
124 | return num_online_cpus() == 1 && !rcu_scheduler_active; | ||
125 | } | ||
126 | |||
127 | #endif /* __LINUX_RCUPREEMPT_H */ | ||
diff --git a/include/linux/rcupreempt_trace.h b/include/linux/rcupreempt_trace.h deleted file mode 100644 index b99ae073192a..000000000000 --- a/include/linux/rcupreempt_trace.h +++ /dev/null | |||
@@ -1,97 +0,0 @@ | |||
1 | /* | ||
2 | * Read-Copy Update mechanism for mutual exclusion (RT implementation) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
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 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * Copyright (C) IBM Corporation, 2006 | ||
19 | * | ||
20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
21 | * | ||
22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | ||
23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
24 | * Papers: | ||
25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
27 | * | ||
28 | * For detailed explanation of the Preemptible Read-Copy Update mechanism see - | ||
29 | * http://lwn.net/Articles/253651/ | ||
30 | */ | ||
31 | |||
32 | #ifndef __LINUX_RCUPREEMPT_TRACE_H | ||
33 | #define __LINUX_RCUPREEMPT_TRACE_H | ||
34 | |||
35 | #include <linux/types.h> | ||
36 | #include <linux/kernel.h> | ||
37 | |||
38 | #include <asm/atomic.h> | ||
39 | |||
40 | /* | ||
41 | * PREEMPT_RCU data structures. | ||
42 | */ | ||
43 | |||
44 | struct rcupreempt_trace { | ||
45 | long next_length; | ||
46 | long next_add; | ||
47 | long wait_length; | ||
48 | long wait_add; | ||
49 | long done_length; | ||
50 | long done_add; | ||
51 | long done_remove; | ||
52 | atomic_t done_invoked; | ||
53 | long rcu_check_callbacks; | ||
54 | atomic_t rcu_try_flip_1; | ||
55 | atomic_t rcu_try_flip_e1; | ||
56 | long rcu_try_flip_i1; | ||
57 | long rcu_try_flip_ie1; | ||
58 | long rcu_try_flip_g1; | ||
59 | long rcu_try_flip_a1; | ||
60 | long rcu_try_flip_ae1; | ||
61 | long rcu_try_flip_a2; | ||
62 | long rcu_try_flip_z1; | ||
63 | long rcu_try_flip_ze1; | ||
64 | long rcu_try_flip_z2; | ||
65 | long rcu_try_flip_m1; | ||
66 | long rcu_try_flip_me1; | ||
67 | long rcu_try_flip_m2; | ||
68 | }; | ||
69 | |||
70 | #ifdef CONFIG_RCU_TRACE | ||
71 | #define RCU_TRACE(fn, arg) fn(arg); | ||
72 | #else | ||
73 | #define RCU_TRACE(fn, arg) | ||
74 | #endif | ||
75 | |||
76 | extern void rcupreempt_trace_move2done(struct rcupreempt_trace *trace); | ||
77 | extern void rcupreempt_trace_move2wait(struct rcupreempt_trace *trace); | ||
78 | extern void rcupreempt_trace_try_flip_1(struct rcupreempt_trace *trace); | ||
79 | extern void rcupreempt_trace_try_flip_e1(struct rcupreempt_trace *trace); | ||
80 | extern void rcupreempt_trace_try_flip_i1(struct rcupreempt_trace *trace); | ||
81 | extern void rcupreempt_trace_try_flip_ie1(struct rcupreempt_trace *trace); | ||
82 | extern void rcupreempt_trace_try_flip_g1(struct rcupreempt_trace *trace); | ||
83 | extern void rcupreempt_trace_try_flip_a1(struct rcupreempt_trace *trace); | ||
84 | extern void rcupreempt_trace_try_flip_ae1(struct rcupreempt_trace *trace); | ||
85 | extern void rcupreempt_trace_try_flip_a2(struct rcupreempt_trace *trace); | ||
86 | extern void rcupreempt_trace_try_flip_z1(struct rcupreempt_trace *trace); | ||
87 | extern void rcupreempt_trace_try_flip_ze1(struct rcupreempt_trace *trace); | ||
88 | extern void rcupreempt_trace_try_flip_z2(struct rcupreempt_trace *trace); | ||
89 | extern void rcupreempt_trace_try_flip_m1(struct rcupreempt_trace *trace); | ||
90 | extern void rcupreempt_trace_try_flip_me1(struct rcupreempt_trace *trace); | ||
91 | extern void rcupreempt_trace_try_flip_m2(struct rcupreempt_trace *trace); | ||
92 | extern void rcupreempt_trace_check_callbacks(struct rcupreempt_trace *trace); | ||
93 | extern void rcupreempt_trace_done_remove(struct rcupreempt_trace *trace); | ||
94 | extern void rcupreempt_trace_invoke(struct rcupreempt_trace *trace); | ||
95 | extern void rcupreempt_trace_next_add(struct rcupreempt_trace *trace); | ||
96 | |||
97 | #endif /* __LINUX_RCUPREEMPT_TRACE_H */ | ||
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index 5a5153806c42..a89307717825 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
@@ -30,264 +30,57 @@ | |||
30 | #ifndef __LINUX_RCUTREE_H | 30 | #ifndef __LINUX_RCUTREE_H |
31 | #define __LINUX_RCUTREE_H | 31 | #define __LINUX_RCUTREE_H |
32 | 32 | ||
33 | #include <linux/cache.h> | 33 | extern void rcu_sched_qs(int cpu); |
34 | #include <linux/spinlock.h> | 34 | extern void rcu_bh_qs(int cpu); |
35 | #include <linux/threads.h> | ||
36 | #include <linux/cpumask.h> | ||
37 | #include <linux/seqlock.h> | ||
38 | 35 | ||
39 | /* | 36 | extern int rcu_needs_cpu(int cpu); |
40 | * Define shape of hierarchy based on NR_CPUS and CONFIG_RCU_FANOUT. | ||
41 | * In theory, it should be possible to add more levels straightforwardly. | ||
42 | * In practice, this has not been tested, so there is probably some | ||
43 | * bug somewhere. | ||
44 | */ | ||
45 | #define MAX_RCU_LVLS 3 | ||
46 | #define RCU_FANOUT (CONFIG_RCU_FANOUT) | ||
47 | #define RCU_FANOUT_SQ (RCU_FANOUT * RCU_FANOUT) | ||
48 | #define RCU_FANOUT_CUBE (RCU_FANOUT_SQ * RCU_FANOUT) | ||
49 | |||
50 | #if NR_CPUS <= RCU_FANOUT | ||
51 | # define NUM_RCU_LVLS 1 | ||
52 | # define NUM_RCU_LVL_0 1 | ||
53 | # define NUM_RCU_LVL_1 (NR_CPUS) | ||
54 | # define NUM_RCU_LVL_2 0 | ||
55 | # define NUM_RCU_LVL_3 0 | ||
56 | #elif NR_CPUS <= RCU_FANOUT_SQ | ||
57 | # define NUM_RCU_LVLS 2 | ||
58 | # define NUM_RCU_LVL_0 1 | ||
59 | # define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT - 1) / RCU_FANOUT) | ||
60 | # define NUM_RCU_LVL_2 (NR_CPUS) | ||
61 | # define NUM_RCU_LVL_3 0 | ||
62 | #elif NR_CPUS <= RCU_FANOUT_CUBE | ||
63 | # define NUM_RCU_LVLS 3 | ||
64 | # define NUM_RCU_LVL_0 1 | ||
65 | # define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT_SQ - 1) / RCU_FANOUT_SQ) | ||
66 | # define NUM_RCU_LVL_2 (((NR_CPUS) + (RCU_FANOUT) - 1) / (RCU_FANOUT)) | ||
67 | # define NUM_RCU_LVL_3 NR_CPUS | ||
68 | #else | ||
69 | # error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" | ||
70 | #endif /* #if (NR_CPUS) <= RCU_FANOUT */ | ||
71 | |||
72 | #define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) | ||
73 | #define NUM_RCU_NODES (RCU_SUM - NR_CPUS) | ||
74 | |||
75 | /* | ||
76 | * Dynticks per-CPU state. | ||
77 | */ | ||
78 | struct rcu_dynticks { | ||
79 | int dynticks_nesting; /* Track nesting level, sort of. */ | ||
80 | int dynticks; /* Even value for dynticks-idle, else odd. */ | ||
81 | int dynticks_nmi; /* Even value for either dynticks-idle or */ | ||
82 | /* not in nmi handler, else odd. So this */ | ||
83 | /* remains even for nmi from irq handler. */ | ||
84 | }; | ||
85 | |||
86 | /* | ||
87 | * Definition for node within the RCU grace-period-detection hierarchy. | ||
88 | */ | ||
89 | struct rcu_node { | ||
90 | spinlock_t lock; | ||
91 | unsigned long qsmask; /* CPUs or groups that need to switch in */ | ||
92 | /* order for current grace period to proceed.*/ | ||
93 | unsigned long qsmaskinit; | ||
94 | /* Per-GP initialization for qsmask. */ | ||
95 | unsigned long grpmask; /* Mask to apply to parent qsmask. */ | ||
96 | int grplo; /* lowest-numbered CPU or group here. */ | ||
97 | int grphi; /* highest-numbered CPU or group here. */ | ||
98 | u8 grpnum; /* CPU/group number for next level up. */ | ||
99 | u8 level; /* root is at level 0. */ | ||
100 | struct rcu_node *parent; | ||
101 | } ____cacheline_internodealigned_in_smp; | ||
102 | |||
103 | /* Index values for nxttail array in struct rcu_data. */ | ||
104 | #define RCU_DONE_TAIL 0 /* Also RCU_WAIT head. */ | ||
105 | #define RCU_WAIT_TAIL 1 /* Also RCU_NEXT_READY head. */ | ||
106 | #define RCU_NEXT_READY_TAIL 2 /* Also RCU_NEXT head. */ | ||
107 | #define RCU_NEXT_TAIL 3 | ||
108 | #define RCU_NEXT_SIZE 4 | ||
109 | |||
110 | /* Per-CPU data for read-copy update. */ | ||
111 | struct rcu_data { | ||
112 | /* 1) quiescent-state and grace-period handling : */ | ||
113 | long completed; /* Track rsp->completed gp number */ | ||
114 | /* in order to detect GP end. */ | ||
115 | long gpnum; /* Highest gp number that this CPU */ | ||
116 | /* is aware of having started. */ | ||
117 | long passed_quiesc_completed; | ||
118 | /* Value of completed at time of qs. */ | ||
119 | bool passed_quiesc; /* User-mode/idle loop etc. */ | ||
120 | bool qs_pending; /* Core waits for quiesc state. */ | ||
121 | bool beenonline; /* CPU online at least once. */ | ||
122 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ | ||
123 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ | ||
124 | |||
125 | /* 2) batch handling */ | ||
126 | /* | ||
127 | * If nxtlist is not NULL, it is partitioned as follows. | ||
128 | * Any of the partitions might be empty, in which case the | ||
129 | * pointer to that partition will be equal to the pointer for | ||
130 | * the following partition. When the list is empty, all of | ||
131 | * the nxttail elements point to nxtlist, which is NULL. | ||
132 | * | ||
133 | * [*nxttail[RCU_NEXT_READY_TAIL], NULL = *nxttail[RCU_NEXT_TAIL]): | ||
134 | * Entries that might have arrived after current GP ended | ||
135 | * [*nxttail[RCU_WAIT_TAIL], *nxttail[RCU_NEXT_READY_TAIL]): | ||
136 | * Entries known to have arrived before current GP ended | ||
137 | * [*nxttail[RCU_DONE_TAIL], *nxttail[RCU_WAIT_TAIL]): | ||
138 | * Entries that batch # <= ->completed - 1: waiting for current GP | ||
139 | * [nxtlist, *nxttail[RCU_DONE_TAIL]): | ||
140 | * Entries that batch # <= ->completed | ||
141 | * The grace period for these entries has completed, and | ||
142 | * the other grace-period-completed entries may be moved | ||
143 | * here temporarily in rcu_process_callbacks(). | ||
144 | */ | ||
145 | struct rcu_head *nxtlist; | ||
146 | struct rcu_head **nxttail[RCU_NEXT_SIZE]; | ||
147 | long qlen; /* # of queued callbacks */ | ||
148 | long blimit; /* Upper limit on a processed batch */ | ||
149 | |||
150 | #ifdef CONFIG_NO_HZ | ||
151 | /* 3) dynticks interface. */ | ||
152 | struct rcu_dynticks *dynticks; /* Shared per-CPU dynticks state. */ | ||
153 | int dynticks_snap; /* Per-GP tracking for dynticks. */ | ||
154 | int dynticks_nmi_snap; /* Per-GP tracking for dynticks_nmi. */ | ||
155 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
156 | |||
157 | /* 4) reasons this CPU needed to be kicked by force_quiescent_state */ | ||
158 | #ifdef CONFIG_NO_HZ | ||
159 | unsigned long dynticks_fqs; /* Kicked due to dynticks idle. */ | ||
160 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
161 | unsigned long offline_fqs; /* Kicked due to being offline. */ | ||
162 | unsigned long resched_ipi; /* Sent a resched IPI. */ | ||
163 | |||
164 | /* 5) __rcu_pending() statistics. */ | ||
165 | long n_rcu_pending; /* rcu_pending() calls since boot. */ | ||
166 | long n_rp_qs_pending; | ||
167 | long n_rp_cb_ready; | ||
168 | long n_rp_cpu_needs_gp; | ||
169 | long n_rp_gp_completed; | ||
170 | long n_rp_gp_started; | ||
171 | long n_rp_need_fqs; | ||
172 | long n_rp_need_nothing; | ||
173 | |||
174 | int cpu; | ||
175 | }; | ||
176 | |||
177 | /* Values for signaled field in struct rcu_state. */ | ||
178 | #define RCU_GP_INIT 0 /* Grace period being initialized. */ | ||
179 | #define RCU_SAVE_DYNTICK 1 /* Need to scan dyntick state. */ | ||
180 | #define RCU_FORCE_QS 2 /* Need to force quiescent state. */ | ||
181 | #ifdef CONFIG_NO_HZ | ||
182 | #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK | ||
183 | #else /* #ifdef CONFIG_NO_HZ */ | ||
184 | #define RCU_SIGNAL_INIT RCU_FORCE_QS | ||
185 | #endif /* #else #ifdef CONFIG_NO_HZ */ | ||
186 | |||
187 | #define RCU_JIFFIES_TILL_FORCE_QS 3 /* for rsp->jiffies_force_qs */ | ||
188 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
189 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rsp->jiffies_stall */ | ||
190 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rsp->jiffies_stall */ | ||
191 | #define RCU_STALL_RAT_DELAY 2 /* Allow other CPUs time */ | ||
192 | /* to take at least one */ | ||
193 | /* scheduling clock irq */ | ||
194 | /* before ratting on them. */ | ||
195 | |||
196 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
197 | |||
198 | /* | ||
199 | * RCU global state, including node hierarchy. This hierarchy is | ||
200 | * represented in "heap" form in a dense array. The root (first level) | ||
201 | * of the hierarchy is in ->node[0] (referenced by ->level[0]), the second | ||
202 | * level in ->node[1] through ->node[m] (->node[1] referenced by ->level[1]), | ||
203 | * and the third level in ->node[m+1] and following (->node[m+1] referenced | ||
204 | * by ->level[2]). The number of levels is determined by the number of | ||
205 | * CPUs and by CONFIG_RCU_FANOUT. Small systems will have a "hierarchy" | ||
206 | * consisting of a single rcu_node. | ||
207 | */ | ||
208 | struct rcu_state { | ||
209 | struct rcu_node node[NUM_RCU_NODES]; /* Hierarchy. */ | ||
210 | struct rcu_node *level[NUM_RCU_LVLS]; /* Hierarchy levels. */ | ||
211 | u32 levelcnt[MAX_RCU_LVLS + 1]; /* # nodes in each level. */ | ||
212 | u8 levelspread[NUM_RCU_LVLS]; /* kids/node in each level. */ | ||
213 | struct rcu_data *rda[NR_CPUS]; /* array of rdp pointers. */ | ||
214 | |||
215 | /* The following fields are guarded by the root rcu_node's lock. */ | ||
216 | |||
217 | u8 signaled ____cacheline_internodealigned_in_smp; | ||
218 | /* Force QS state. */ | ||
219 | long gpnum; /* Current gp number. */ | ||
220 | long completed; /* # of last completed gp. */ | ||
221 | spinlock_t onofflock; /* exclude on/offline and */ | ||
222 | /* starting new GP. */ | ||
223 | spinlock_t fqslock; /* Only one task forcing */ | ||
224 | /* quiescent states. */ | ||
225 | unsigned long jiffies_force_qs; /* Time at which to invoke */ | ||
226 | /* force_quiescent_state(). */ | ||
227 | unsigned long n_force_qs; /* Number of calls to */ | ||
228 | /* force_quiescent_state(). */ | ||
229 | unsigned long n_force_qs_lh; /* ~Number of calls leaving */ | ||
230 | /* due to lock unavailable. */ | ||
231 | unsigned long n_force_qs_ngp; /* Number of calls leaving */ | ||
232 | /* due to no GP active. */ | ||
233 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
234 | unsigned long gp_start; /* Time at which GP started, */ | ||
235 | /* but in jiffies. */ | ||
236 | unsigned long jiffies_stall; /* Time at which to check */ | ||
237 | /* for CPU stalls. */ | ||
238 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
239 | #ifdef CONFIG_NO_HZ | ||
240 | long dynticks_completed; /* Value of completed @ snap. */ | ||
241 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
242 | }; | ||
243 | 37 | ||
244 | extern void rcu_qsctr_inc(int cpu); | 38 | #ifdef CONFIG_TREE_PREEMPT_RCU |
245 | extern void rcu_bh_qsctr_inc(int cpu); | ||
246 | 39 | ||
247 | extern int rcu_pending(int cpu); | 40 | extern void __rcu_read_lock(void); |
248 | extern int rcu_needs_cpu(int cpu); | 41 | extern void __rcu_read_unlock(void); |
42 | extern void exit_rcu(void); | ||
249 | 43 | ||
250 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 44 | #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ |
251 | extern struct lockdep_map rcu_lock_map; | ||
252 | # define rcu_read_acquire() \ | ||
253 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
254 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
255 | #else | ||
256 | # define rcu_read_acquire() do { } while (0) | ||
257 | # define rcu_read_release() do { } while (0) | ||
258 | #endif | ||
259 | 45 | ||
260 | static inline void __rcu_read_lock(void) | 46 | static inline void __rcu_read_lock(void) |
261 | { | 47 | { |
262 | preempt_disable(); | 48 | preempt_disable(); |
263 | __acquire(RCU); | ||
264 | rcu_read_acquire(); | ||
265 | } | 49 | } |
50 | |||
266 | static inline void __rcu_read_unlock(void) | 51 | static inline void __rcu_read_unlock(void) |
267 | { | 52 | { |
268 | rcu_read_release(); | ||
269 | __release(RCU); | ||
270 | preempt_enable(); | 53 | preempt_enable(); |
271 | } | 54 | } |
55 | |||
56 | static inline void exit_rcu(void) | ||
57 | { | ||
58 | } | ||
59 | |||
60 | #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
61 | |||
272 | static inline void __rcu_read_lock_bh(void) | 62 | static inline void __rcu_read_lock_bh(void) |
273 | { | 63 | { |
274 | local_bh_disable(); | 64 | local_bh_disable(); |
275 | __acquire(RCU_BH); | ||
276 | rcu_read_acquire(); | ||
277 | } | 65 | } |
278 | static inline void __rcu_read_unlock_bh(void) | 66 | static inline void __rcu_read_unlock_bh(void) |
279 | { | 67 | { |
280 | rcu_read_release(); | ||
281 | __release(RCU_BH); | ||
282 | local_bh_enable(); | 68 | local_bh_enable(); |
283 | } | 69 | } |
284 | 70 | ||
285 | #define __synchronize_sched() synchronize_rcu() | 71 | #define __synchronize_sched() synchronize_rcu() |
286 | 72 | ||
287 | #define call_rcu_sched(head, func) call_rcu(head, func) | 73 | extern void call_rcu_sched(struct rcu_head *head, |
74 | void (*func)(struct rcu_head *rcu)); | ||
288 | 75 | ||
289 | static inline void rcu_init_sched(void) | 76 | static inline void synchronize_rcu_expedited(void) |
290 | { | 77 | { |
78 | synchronize_sched_expedited(); | ||
79 | } | ||
80 | |||
81 | static inline void synchronize_rcu_bh_expedited(void) | ||
82 | { | ||
83 | synchronize_sched_expedited(); | ||
291 | } | 84 | } |
292 | 85 | ||
293 | extern void __rcu_init(void); | 86 | extern void __rcu_init(void); |
@@ -296,6 +89,11 @@ extern void rcu_restart_cpu(int cpu); | |||
296 | 89 | ||
297 | extern long rcu_batches_completed(void); | 90 | extern long rcu_batches_completed(void); |
298 | extern long rcu_batches_completed_bh(void); | 91 | extern long rcu_batches_completed_bh(void); |
92 | extern long rcu_batches_completed_sched(void); | ||
93 | |||
94 | static inline void rcu_init_sched(void) | ||
95 | { | ||
96 | } | ||
299 | 97 | ||
300 | #ifdef CONFIG_NO_HZ | 98 | #ifdef CONFIG_NO_HZ |
301 | void rcu_enter_nohz(void); | 99 | void rcu_enter_nohz(void); |
diff --git a/include/linux/rds.h b/include/linux/rds.h index d91dc91f5443..89d46e1afbb1 100644 --- a/include/linux/rds.h +++ b/include/linux/rds.h | |||
@@ -147,6 +147,18 @@ struct rds_info_socket { | |||
147 | u_int64_t inum; | 147 | u_int64_t inum; |
148 | } __attribute__((packed)); | 148 | } __attribute__((packed)); |
149 | 149 | ||
150 | struct rds_info_tcp_socket { | ||
151 | __be32 local_addr; | ||
152 | __be16 local_port; | ||
153 | __be32 peer_addr; | ||
154 | __be16 peer_port; | ||
155 | u_int64_t hdr_rem; | ||
156 | u_int64_t data_rem; | ||
157 | u_int32_t last_sent_nxt; | ||
158 | u_int32_t last_expected_una; | ||
159 | u_int32_t last_seen_una; | ||
160 | } __attribute__((packed)); | ||
161 | |||
150 | #define RDS_IB_GID_LEN 16 | 162 | #define RDS_IB_GID_LEN 16 |
151 | struct rds_info_rdma_connection { | 163 | struct rds_info_rdma_connection { |
152 | __be32 src_addr; | 164 | __be32 src_addr; |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index 278777fa8a3a..3392c59d2706 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
@@ -6,20 +6,17 @@ | |||
6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | 7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * Permission to use, copy, modify, and/or distribute this software for any |
10 | * it under the terms of the GNU General Public License as published by | 10 | * purpose with or without fee is hereby granted, provided that the above |
11 | * the Free Software Foundation; either version 2 of the License, or | 11 | * copyright notice and this permission notice appear in all copies. |
12 | * (at your option) any later version. | ||
13 | * | 12 | * |
14 | * This program is distributed in the hope that it will be useful, | 13 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
17 | * GNU General Public License for more details. | 16 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
18 | * | 17 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
19 | * You should have received a copy of the GNU General Public License | 18 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
20 | * along with this program; if not, write to the | 19 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
21 | * Free Software Foundation, Inc., | ||
22 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
23 | */ | 20 | */ |
24 | 21 | ||
25 | #include <linux/types.h> | 22 | #include <linux/types.h> |
@@ -47,6 +44,7 @@ enum rfkill_type { | |||
47 | RFKILL_TYPE_UWB, | 44 | RFKILL_TYPE_UWB, |
48 | RFKILL_TYPE_WIMAX, | 45 | RFKILL_TYPE_WIMAX, |
49 | RFKILL_TYPE_WWAN, | 46 | RFKILL_TYPE_WWAN, |
47 | RFKILL_TYPE_GPS, | ||
50 | NUM_RFKILL_TYPES, | 48 | NUM_RFKILL_TYPES, |
51 | }; | 49 | }; |
52 | 50 | ||
@@ -82,6 +80,20 @@ struct rfkill_event { | |||
82 | __u8 soft, hard; | 80 | __u8 soft, hard; |
83 | } __packed; | 81 | } __packed; |
84 | 82 | ||
83 | /* | ||
84 | * We are planning to be backward and forward compatible with changes | ||
85 | * to the event struct, by adding new, optional, members at the end. | ||
86 | * When reading an event (whether the kernel from userspace or vice | ||
87 | * versa) we need to accept anything that's at least as large as the | ||
88 | * version 1 event size, but might be able to accept other sizes in | ||
89 | * the future. | ||
90 | * | ||
91 | * One exception is the kernel -- we already have two event sizes in | ||
92 | * that we've made the 'hard' member optional since our only option | ||
93 | * is to ignore it anyway. | ||
94 | */ | ||
95 | #define RFKILL_EVENT_SIZE_V1 8 | ||
96 | |||
85 | /* ioctl for turning off rfkill-input (if present) */ | 97 | /* ioctl for turning off rfkill-input (if present) */ |
86 | #define RFKILL_IOC_MAGIC 'R' | 98 | #define RFKILL_IOC_MAGIC 'R' |
87 | #define RFKILL_IOC_NOINPUT 1 | 99 | #define RFKILL_IOC_NOINPUT 1 |
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 29f8599e6bea..5fcc31ed5771 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
@@ -75,20 +75,6 @@ ring_buffer_event_time_delta(struct ring_buffer_event *event) | |||
75 | } | 75 | } |
76 | 76 | ||
77 | /* | 77 | /* |
78 | * ring_buffer_event_discard can discard any event in the ring buffer. | ||
79 | * it is up to the caller to protect against a reader from | ||
80 | * consuming it or a writer from wrapping and replacing it. | ||
81 | * | ||
82 | * No external protection is needed if this is called before | ||
83 | * the event is commited. But in that case it would be better to | ||
84 | * use ring_buffer_discard_commit. | ||
85 | * | ||
86 | * Note, if an event that has not been committed is discarded | ||
87 | * with ring_buffer_event_discard, it must still be committed. | ||
88 | */ | ||
89 | void ring_buffer_event_discard(struct ring_buffer_event *event); | ||
90 | |||
91 | /* | ||
92 | * ring_buffer_discard_commit will remove an event that has not | 78 | * ring_buffer_discard_commit will remove an event that has not |
93 | * ben committed yet. If this is used, then ring_buffer_unlock_commit | 79 | * ben committed yet. If this is used, then ring_buffer_unlock_commit |
94 | * must not be called on the discarded event. This function | 80 | * must not be called on the discarded event. This function |
@@ -154,8 +140,17 @@ unsigned long ring_buffer_size(struct ring_buffer *buffer); | |||
154 | void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu); | 140 | void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu); |
155 | void ring_buffer_reset(struct ring_buffer *buffer); | 141 | void ring_buffer_reset(struct ring_buffer *buffer); |
156 | 142 | ||
143 | #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP | ||
157 | int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | 144 | int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, |
158 | struct ring_buffer *buffer_b, int cpu); | 145 | struct ring_buffer *buffer_b, int cpu); |
146 | #else | ||
147 | static inline int | ||
148 | ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | ||
149 | struct ring_buffer *buffer_b, int cpu) | ||
150 | { | ||
151 | return -ENODEV; | ||
152 | } | ||
153 | #endif | ||
159 | 154 | ||
160 | int ring_buffer_empty(struct ring_buffer *buffer); | 155 | int ring_buffer_empty(struct ring_buffer *buffer); |
161 | int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu); | 156 | int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu); |
@@ -170,7 +165,6 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer); | |||
170 | unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); | 165 | unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); |
171 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); | 166 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); |
172 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); | 167 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); |
173 | unsigned long ring_buffer_nmi_dropped_cpu(struct ring_buffer *buffer, int cpu); | ||
174 | 168 | ||
175 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); | 169 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); |
176 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, | 170 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index ba3254ecf7fb..adf2068d12b5 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -104,7 +104,7 @@ enum { | |||
104 | RTM_NEWADDRLABEL = 72, | 104 | RTM_NEWADDRLABEL = 72, |
105 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL | 105 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL |
106 | RTM_DELADDRLABEL, | 106 | RTM_DELADDRLABEL, |
107 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL | 107 | #define RTM_DELADDRLABEL RTM_DELADDRLABEL |
108 | RTM_GETADDRLABEL, | 108 | RTM_GETADDRLABEL, |
109 | #define RTM_GETADDRLABEL RTM_GETADDRLABEL | 109 | #define RTM_GETADDRLABEL RTM_GETADDRLABEL |
110 | 110 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 3ab08e4bb6b8..f3d74bd04d18 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -38,6 +38,8 @@ | |||
38 | #define SCHED_BATCH 3 | 38 | #define SCHED_BATCH 3 |
39 | /* SCHED_ISO: reserved but not implemented yet */ | 39 | /* SCHED_ISO: reserved but not implemented yet */ |
40 | #define SCHED_IDLE 5 | 40 | #define SCHED_IDLE 5 |
41 | /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */ | ||
42 | #define SCHED_RESET_ON_FORK 0x40000000 | ||
41 | 43 | ||
42 | #ifdef __KERNEL__ | 44 | #ifdef __KERNEL__ |
43 | 45 | ||
@@ -796,18 +798,19 @@ enum cpu_idle_type { | |||
796 | #define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE | 798 | #define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE |
797 | 799 | ||
798 | #ifdef CONFIG_SMP | 800 | #ifdef CONFIG_SMP |
799 | #define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ | 801 | #define SD_LOAD_BALANCE 0x0001 /* Do load balancing on this domain. */ |
800 | #define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */ | 802 | #define SD_BALANCE_NEWIDLE 0x0002 /* Balance when about to become idle */ |
801 | #define SD_BALANCE_EXEC 4 /* Balance on exec */ | 803 | #define SD_BALANCE_EXEC 0x0004 /* Balance on exec */ |
802 | #define SD_BALANCE_FORK 8 /* Balance on fork, clone */ | 804 | #define SD_BALANCE_FORK 0x0008 /* Balance on fork, clone */ |
803 | #define SD_WAKE_IDLE 16 /* Wake to idle CPU on task wakeup */ | 805 | #define SD_WAKE_IDLE 0x0010 /* Wake to idle CPU on task wakeup */ |
804 | #define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */ | 806 | #define SD_WAKE_AFFINE 0x0020 /* Wake task to waking CPU */ |
805 | #define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */ | 807 | #define SD_WAKE_BALANCE 0x0040 /* Perform balancing at task wakeup */ |
806 | #define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */ | 808 | #define SD_SHARE_CPUPOWER 0x0080 /* Domain members share cpu power */ |
807 | #define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */ | 809 | #define SD_POWERSAVINGS_BALANCE 0x0100 /* Balance for power savings */ |
808 | #define SD_SHARE_PKG_RESOURCES 512 /* Domain members share cpu pkg resources */ | 810 | #define SD_SHARE_PKG_RESOURCES 0x0200 /* Domain members share cpu pkg resources */ |
809 | #define SD_SERIALIZE 1024 /* Only a single load balancing instance */ | 811 | #define SD_SERIALIZE 0x0400 /* Only a single load balancing instance */ |
810 | #define SD_WAKE_IDLE_FAR 2048 /* Gain latency sacrificing cache hit */ | 812 | #define SD_WAKE_IDLE_FAR 0x0800 /* Gain latency sacrificing cache hit */ |
813 | #define SD_PREFER_SIBLING 0x1000 /* Prefer to place tasks in a sibling domain */ | ||
811 | 814 | ||
812 | enum powersavings_balance_level { | 815 | enum powersavings_balance_level { |
813 | POWERSAVINGS_BALANCE_NONE = 0, /* No power saving load balance */ | 816 | POWERSAVINGS_BALANCE_NONE = 0, /* No power saving load balance */ |
@@ -827,7 +830,7 @@ static inline int sd_balance_for_mc_power(void) | |||
827 | if (sched_smt_power_savings) | 830 | if (sched_smt_power_savings) |
828 | return SD_POWERSAVINGS_BALANCE; | 831 | return SD_POWERSAVINGS_BALANCE; |
829 | 832 | ||
830 | return 0; | 833 | return SD_PREFER_SIBLING; |
831 | } | 834 | } |
832 | 835 | ||
833 | static inline int sd_balance_for_package_power(void) | 836 | static inline int sd_balance_for_package_power(void) |
@@ -835,7 +838,7 @@ static inline int sd_balance_for_package_power(void) | |||
835 | if (sched_mc_power_savings | sched_smt_power_savings) | 838 | if (sched_mc_power_savings | sched_smt_power_savings) |
836 | return SD_POWERSAVINGS_BALANCE; | 839 | return SD_POWERSAVINGS_BALANCE; |
837 | 840 | ||
838 | return 0; | 841 | return SD_PREFER_SIBLING; |
839 | } | 842 | } |
840 | 843 | ||
841 | /* | 844 | /* |
@@ -857,15 +860,9 @@ struct sched_group { | |||
857 | 860 | ||
858 | /* | 861 | /* |
859 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a | 862 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a |
860 | * single CPU. This is read only (except for setup, hotplug CPU). | 863 | * single CPU. |
861 | * Note : Never change cpu_power without recompute its reciprocal | ||
862 | */ | 864 | */ |
863 | unsigned int __cpu_power; | 865 | unsigned int cpu_power; |
864 | /* | ||
865 | * reciprocal value of cpu_power to avoid expensive divides | ||
866 | * (see include/linux/reciprocal_div.h) | ||
867 | */ | ||
868 | u32 reciprocal_cpu_power; | ||
869 | 866 | ||
870 | /* | 867 | /* |
871 | * The CPUs this group covers. | 868 | * The CPUs this group covers. |
@@ -918,6 +915,7 @@ struct sched_domain { | |||
918 | unsigned int newidle_idx; | 915 | unsigned int newidle_idx; |
919 | unsigned int wake_idx; | 916 | unsigned int wake_idx; |
920 | unsigned int forkexec_idx; | 917 | unsigned int forkexec_idx; |
918 | unsigned int smt_gain; | ||
921 | int flags; /* See SD_* */ | 919 | int flags; /* See SD_* */ |
922 | enum sched_domain_level level; | 920 | enum sched_domain_level level; |
923 | 921 | ||
@@ -1045,7 +1043,6 @@ struct sched_class { | |||
1045 | struct rq *busiest, struct sched_domain *sd, | 1043 | struct rq *busiest, struct sched_domain *sd, |
1046 | enum cpu_idle_type idle); | 1044 | enum cpu_idle_type idle); |
1047 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); | 1045 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); |
1048 | int (*needs_post_schedule) (struct rq *this_rq); | ||
1049 | void (*post_schedule) (struct rq *this_rq); | 1046 | void (*post_schedule) (struct rq *this_rq); |
1050 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); | 1047 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); |
1051 | 1048 | ||
@@ -1110,6 +1107,8 @@ struct sched_entity { | |||
1110 | u64 wait_max; | 1107 | u64 wait_max; |
1111 | u64 wait_count; | 1108 | u64 wait_count; |
1112 | u64 wait_sum; | 1109 | u64 wait_sum; |
1110 | u64 iowait_count; | ||
1111 | u64 iowait_sum; | ||
1113 | 1112 | ||
1114 | u64 sleep_start; | 1113 | u64 sleep_start; |
1115 | u64 sleep_max; | 1114 | u64 sleep_max; |
@@ -1163,6 +1162,8 @@ struct sched_rt_entity { | |||
1163 | #endif | 1162 | #endif |
1164 | }; | 1163 | }; |
1165 | 1164 | ||
1165 | struct rcu_node; | ||
1166 | |||
1166 | struct task_struct { | 1167 | struct task_struct { |
1167 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ | 1168 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
1168 | void *stack; | 1169 | void *stack; |
@@ -1198,6 +1199,7 @@ struct task_struct { | |||
1198 | * a short time | 1199 | * a short time |
1199 | */ | 1200 | */ |
1200 | unsigned char fpu_counter; | 1201 | unsigned char fpu_counter; |
1202 | s8 oomkilladj; /* OOM kill score adjustment (bit shift). */ | ||
1201 | #ifdef CONFIG_BLK_DEV_IO_TRACE | 1203 | #ifdef CONFIG_BLK_DEV_IO_TRACE |
1202 | unsigned int btrace_seq; | 1204 | unsigned int btrace_seq; |
1203 | #endif | 1205 | #endif |
@@ -1205,10 +1207,12 @@ struct task_struct { | |||
1205 | unsigned int policy; | 1207 | unsigned int policy; |
1206 | cpumask_t cpus_allowed; | 1208 | cpumask_t cpus_allowed; |
1207 | 1209 | ||
1208 | #ifdef CONFIG_PREEMPT_RCU | 1210 | #ifdef CONFIG_TREE_PREEMPT_RCU |
1209 | int rcu_read_lock_nesting; | 1211 | int rcu_read_lock_nesting; |
1210 | int rcu_flipctr_idx; | 1212 | char rcu_read_unlock_special; |
1211 | #endif /* #ifdef CONFIG_PREEMPT_RCU */ | 1213 | struct rcu_node *rcu_blocked_node; |
1214 | struct list_head rcu_node_entry; | ||
1215 | #endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
1212 | 1216 | ||
1213 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) | 1217 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) |
1214 | struct sched_info sched_info; | 1218 | struct sched_info sched_info; |
@@ -1229,11 +1233,19 @@ struct task_struct { | |||
1229 | unsigned did_exec:1; | 1233 | unsigned did_exec:1; |
1230 | unsigned in_execve:1; /* Tell the LSMs that the process is doing an | 1234 | unsigned in_execve:1; /* Tell the LSMs that the process is doing an |
1231 | * execve */ | 1235 | * execve */ |
1236 | unsigned in_iowait:1; | ||
1237 | |||
1238 | |||
1239 | /* Revert to default priority/policy when forking */ | ||
1240 | unsigned sched_reset_on_fork:1; | ||
1241 | |||
1232 | pid_t pid; | 1242 | pid_t pid; |
1233 | pid_t tgid; | 1243 | pid_t tgid; |
1234 | 1244 | ||
1245 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
1235 | /* Canary value for the -fstack-protector gcc feature */ | 1246 | /* Canary value for the -fstack-protector gcc feature */ |
1236 | unsigned long stack_canary; | 1247 | unsigned long stack_canary; |
1248 | #endif | ||
1237 | 1249 | ||
1238 | /* | 1250 | /* |
1239 | * pointers to (original) parent process, youngest child, younger sibling, | 1251 | * pointers to (original) parent process, youngest child, younger sibling, |
@@ -1291,6 +1303,7 @@ struct task_struct { | |||
1291 | struct mutex cred_guard_mutex; /* guard against foreign influences on | 1303 | struct mutex cred_guard_mutex; /* guard against foreign influences on |
1292 | * credential calculations | 1304 | * credential calculations |
1293 | * (notably. ptrace) */ | 1305 | * (notably. ptrace) */ |
1306 | struct cred *replacement_session_keyring; /* for KEYCTL_SESSION_TO_PARENT */ | ||
1294 | 1307 | ||
1295 | char comm[TASK_COMM_LEN]; /* executable name excluding path | 1308 | char comm[TASK_COMM_LEN]; /* executable name excluding path |
1296 | - access with [gs]et_task_comm (which lock | 1309 | - access with [gs]et_task_comm (which lock |
@@ -1723,6 +1736,28 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
1723 | #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) | 1736 | #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) |
1724 | #define used_math() tsk_used_math(current) | 1737 | #define used_math() tsk_used_math(current) |
1725 | 1738 | ||
1739 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
1740 | |||
1741 | #define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */ | ||
1742 | #define RCU_READ_UNLOCK_NEED_QS (1 << 1) /* RCU core needs CPU response. */ | ||
1743 | #define RCU_READ_UNLOCK_GOT_QS (1 << 2) /* CPU has responded to RCU core. */ | ||
1744 | |||
1745 | static inline void rcu_copy_process(struct task_struct *p) | ||
1746 | { | ||
1747 | p->rcu_read_lock_nesting = 0; | ||
1748 | p->rcu_read_unlock_special = 0; | ||
1749 | p->rcu_blocked_node = NULL; | ||
1750 | INIT_LIST_HEAD(&p->rcu_node_entry); | ||
1751 | } | ||
1752 | |||
1753 | #else | ||
1754 | |||
1755 | static inline void rcu_copy_process(struct task_struct *p) | ||
1756 | { | ||
1757 | } | ||
1758 | |||
1759 | #endif | ||
1760 | |||
1726 | #ifdef CONFIG_SMP | 1761 | #ifdef CONFIG_SMP |
1727 | extern int set_cpus_allowed_ptr(struct task_struct *p, | 1762 | extern int set_cpus_allowed_ptr(struct task_struct *p, |
1728 | const struct cpumask *new_mask); | 1763 | const struct cpumask *new_mask); |
@@ -1812,11 +1847,12 @@ extern unsigned int sysctl_sched_min_granularity; | |||
1812 | extern unsigned int sysctl_sched_wakeup_granularity; | 1847 | extern unsigned int sysctl_sched_wakeup_granularity; |
1813 | extern unsigned int sysctl_sched_shares_ratelimit; | 1848 | extern unsigned int sysctl_sched_shares_ratelimit; |
1814 | extern unsigned int sysctl_sched_shares_thresh; | 1849 | extern unsigned int sysctl_sched_shares_thresh; |
1815 | #ifdef CONFIG_SCHED_DEBUG | ||
1816 | extern unsigned int sysctl_sched_child_runs_first; | 1850 | extern unsigned int sysctl_sched_child_runs_first; |
1851 | #ifdef CONFIG_SCHED_DEBUG | ||
1817 | extern unsigned int sysctl_sched_features; | 1852 | extern unsigned int sysctl_sched_features; |
1818 | extern unsigned int sysctl_sched_migration_cost; | 1853 | extern unsigned int sysctl_sched_migration_cost; |
1819 | extern unsigned int sysctl_sched_nr_migrate; | 1854 | extern unsigned int sysctl_sched_nr_migrate; |
1855 | extern unsigned int sysctl_sched_time_avg; | ||
1820 | extern unsigned int sysctl_timer_migration; | 1856 | extern unsigned int sysctl_timer_migration; |
1821 | 1857 | ||
1822 | int sched_nr_latency_handler(struct ctl_table *table, int write, | 1858 | int sched_nr_latency_handler(struct ctl_table *table, int write, |
@@ -2076,7 +2112,7 @@ static inline unsigned long wait_task_inactive(struct task_struct *p, | |||
2076 | #define for_each_process(p) \ | 2112 | #define for_each_process(p) \ |
2077 | for (p = &init_task ; (p = next_task(p)) != &init_task ; ) | 2113 | for (p = &init_task ; (p = next_task(p)) != &init_task ; ) |
2078 | 2114 | ||
2079 | extern bool is_single_threaded(struct task_struct *); | 2115 | extern bool current_is_single_threaded(void); |
2080 | 2116 | ||
2081 | /* | 2117 | /* |
2082 | * Careful: do_each_thread/while_each_thread is a double loop so | 2118 | * Careful: do_each_thread/while_each_thread is a double loop so |
@@ -2280,23 +2316,31 @@ static inline int need_resched(void) | |||
2280 | * cond_resched_softirq() will enable bhs before scheduling. | 2316 | * cond_resched_softirq() will enable bhs before scheduling. |
2281 | */ | 2317 | */ |
2282 | extern int _cond_resched(void); | 2318 | extern int _cond_resched(void); |
2283 | #ifdef CONFIG_PREEMPT_BKL | 2319 | |
2284 | static inline int cond_resched(void) | 2320 | #define cond_resched() ({ \ |
2285 | { | 2321 | __might_sleep(__FILE__, __LINE__, 0); \ |
2286 | return 0; | 2322 | _cond_resched(); \ |
2287 | } | 2323 | }) |
2324 | |||
2325 | extern int __cond_resched_lock(spinlock_t *lock); | ||
2326 | |||
2327 | #ifdef CONFIG_PREEMPT | ||
2328 | #define PREEMPT_LOCK_OFFSET PREEMPT_OFFSET | ||
2288 | #else | 2329 | #else |
2289 | static inline int cond_resched(void) | 2330 | #define PREEMPT_LOCK_OFFSET 0 |
2290 | { | ||
2291 | return _cond_resched(); | ||
2292 | } | ||
2293 | #endif | 2331 | #endif |
2294 | extern int cond_resched_lock(spinlock_t * lock); | 2332 | |
2295 | extern int cond_resched_softirq(void); | 2333 | #define cond_resched_lock(lock) ({ \ |
2296 | static inline int cond_resched_bkl(void) | 2334 | __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \ |
2297 | { | 2335 | __cond_resched_lock(lock); \ |
2298 | return _cond_resched(); | 2336 | }) |
2299 | } | 2337 | |
2338 | extern int __cond_resched_softirq(void); | ||
2339 | |||
2340 | #define cond_resched_softirq() ({ \ | ||
2341 | __might_sleep(__FILE__, __LINE__, SOFTIRQ_OFFSET); \ | ||
2342 | __cond_resched_softirq(); \ | ||
2343 | }) | ||
2300 | 2344 | ||
2301 | /* | 2345 | /* |
2302 | * Does a critical section need to be broken due to another | 2346 | * Does a critical section need to be broken due to another |
diff --git a/include/linux/security.h b/include/linux/security.h index 5eff459b3833..d050b66ab9ef 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/resource.h> | 28 | #include <linux/resource.h> |
29 | #include <linux/sem.h> | 29 | #include <linux/sem.h> |
30 | #include <linux/shm.h> | 30 | #include <linux/shm.h> |
31 | #include <linux/mm.h> /* PAGE_ALIGN */ | ||
31 | #include <linux/msg.h> | 32 | #include <linux/msg.h> |
32 | #include <linux/sched.h> | 33 | #include <linux/sched.h> |
33 | #include <linux/key.h> | 34 | #include <linux/key.h> |
@@ -52,7 +53,7 @@ struct audit_krule; | |||
52 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, | 53 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, |
53 | int cap, int audit); | 54 | int cap, int audit); |
54 | extern int cap_settime(struct timespec *ts, struct timezone *tz); | 55 | extern int cap_settime(struct timespec *ts, struct timezone *tz); |
55 | extern int cap_ptrace_may_access(struct task_struct *child, unsigned int mode); | 56 | extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode); |
56 | extern int cap_ptrace_traceme(struct task_struct *parent); | 57 | extern int cap_ptrace_traceme(struct task_struct *parent); |
57 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 58 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
58 | extern int cap_capset(struct cred *new, const struct cred *old, | 59 | extern int cap_capset(struct cred *new, const struct cred *old, |
@@ -66,6 +67,9 @@ extern int cap_inode_setxattr(struct dentry *dentry, const char *name, | |||
66 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); | 67 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); |
67 | extern int cap_inode_need_killpriv(struct dentry *dentry); | 68 | extern int cap_inode_need_killpriv(struct dentry *dentry); |
68 | extern int cap_inode_killpriv(struct dentry *dentry); | 69 | extern int cap_inode_killpriv(struct dentry *dentry); |
70 | extern int cap_file_mmap(struct file *file, unsigned long reqprot, | ||
71 | unsigned long prot, unsigned long flags, | ||
72 | unsigned long addr, unsigned long addr_only); | ||
69 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); | 73 | extern int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags); |
70 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, | 74 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, |
71 | unsigned long arg4, unsigned long arg5); | 75 | unsigned long arg4, unsigned long arg5); |
@@ -92,6 +96,7 @@ extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); | |||
92 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); | 96 | extern int cap_netlink_recv(struct sk_buff *skb, int cap); |
93 | 97 | ||
94 | extern unsigned long mmap_min_addr; | 98 | extern unsigned long mmap_min_addr; |
99 | extern unsigned long dac_mmap_min_addr; | ||
95 | /* | 100 | /* |
96 | * Values used in the task_security_ops calls | 101 | * Values used in the task_security_ops calls |
97 | */ | 102 | */ |
@@ -116,6 +121,21 @@ struct request_sock; | |||
116 | #define LSM_UNSAFE_PTRACE 2 | 121 | #define LSM_UNSAFE_PTRACE 2 |
117 | #define LSM_UNSAFE_PTRACE_CAP 4 | 122 | #define LSM_UNSAFE_PTRACE_CAP 4 |
118 | 123 | ||
124 | /* | ||
125 | * If a hint addr is less than mmap_min_addr change hint to be as | ||
126 | * low as possible but still greater than mmap_min_addr | ||
127 | */ | ||
128 | static inline unsigned long round_hint_to_min(unsigned long hint) | ||
129 | { | ||
130 | hint &= PAGE_MASK; | ||
131 | if (((void *)hint != NULL) && | ||
132 | (hint < mmap_min_addr)) | ||
133 | return PAGE_ALIGN(mmap_min_addr); | ||
134 | return hint; | ||
135 | } | ||
136 | extern int mmap_min_addr_handler(struct ctl_table *table, int write, struct file *filp, | ||
137 | void __user *buffer, size_t *lenp, loff_t *ppos); | ||
138 | |||
119 | #ifdef CONFIG_SECURITY | 139 | #ifdef CONFIG_SECURITY |
120 | 140 | ||
121 | struct security_mnt_opts { | 141 | struct security_mnt_opts { |
@@ -633,6 +653,11 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
633 | * manual page for definitions of the @clone_flags. | 653 | * manual page for definitions of the @clone_flags. |
634 | * @clone_flags contains the flags indicating what should be shared. | 654 | * @clone_flags contains the flags indicating what should be shared. |
635 | * Return 0 if permission is granted. | 655 | * Return 0 if permission is granted. |
656 | * @cred_alloc_blank: | ||
657 | * @cred points to the credentials. | ||
658 | * @gfp indicates the atomicity of any memory allocations. | ||
659 | * Only allocate sufficient memory and attach to @cred such that | ||
660 | * cred_transfer() will not get ENOMEM. | ||
636 | * @cred_free: | 661 | * @cred_free: |
637 | * @cred points to the credentials. | 662 | * @cred points to the credentials. |
638 | * Deallocate and clear the cred->security field in a set of credentials. | 663 | * Deallocate and clear the cred->security field in a set of credentials. |
@@ -645,6 +670,10 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
645 | * @new points to the new credentials. | 670 | * @new points to the new credentials. |
646 | * @old points to the original credentials. | 671 | * @old points to the original credentials. |
647 | * Install a new set of credentials. | 672 | * Install a new set of credentials. |
673 | * @cred_transfer: | ||
674 | * @new points to the new credentials. | ||
675 | * @old points to the original credentials. | ||
676 | * Transfer data from original creds to new creds | ||
648 | * @kernel_act_as: | 677 | * @kernel_act_as: |
649 | * Set the credentials for a kernel service to act as (subjective context). | 678 | * Set the credentials for a kernel service to act as (subjective context). |
650 | * @new points to the credentials to be modified. | 679 | * @new points to the credentials to be modified. |
@@ -658,6 +687,10 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
658 | * @inode points to the inode to use as a reference. | 687 | * @inode points to the inode to use as a reference. |
659 | * The current task must be the one that nominated @inode. | 688 | * The current task must be the one that nominated @inode. |
660 | * Return 0 if successful. | 689 | * Return 0 if successful. |
690 | * @kernel_module_request: | ||
691 | * Ability to trigger the kernel to automatically upcall to userspace for | ||
692 | * userspace to load a kernel module with the given name. | ||
693 | * Return 0 if successful. | ||
661 | * @task_setuid: | 694 | * @task_setuid: |
662 | * Check permission before setting one or more of the user identity | 695 | * Check permission before setting one or more of the user identity |
663 | * attributes of the current process. The @flags parameter indicates | 696 | * attributes of the current process. The @flags parameter indicates |
@@ -974,6 +1007,17 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
974 | * Sets the connection's peersid to the secmark on skb. | 1007 | * Sets the connection's peersid to the secmark on skb. |
975 | * @req_classify_flow: | 1008 | * @req_classify_flow: |
976 | * Sets the flow's sid to the openreq sid. | 1009 | * Sets the flow's sid to the openreq sid. |
1010 | * @tun_dev_create: | ||
1011 | * Check permissions prior to creating a new TUN device. | ||
1012 | * @tun_dev_post_create: | ||
1013 | * This hook allows a module to update or allocate a per-socket security | ||
1014 | * structure. | ||
1015 | * @sk contains the newly created sock structure. | ||
1016 | * @tun_dev_attach: | ||
1017 | * Check permissions prior to attaching to a persistent TUN device. This | ||
1018 | * hook can also be used by the module to update any security state | ||
1019 | * associated with the TUN device's sock structure. | ||
1020 | * @sk contains the existing sock structure. | ||
977 | * | 1021 | * |
978 | * Security hooks for XFRM operations. | 1022 | * Security hooks for XFRM operations. |
979 | * | 1023 | * |
@@ -1068,6 +1112,13 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1068 | * Return the length of the string (including terminating NUL) or -ve if | 1112 | * Return the length of the string (including terminating NUL) or -ve if |
1069 | * an error. | 1113 | * an error. |
1070 | * May also return 0 (and a NULL buffer pointer) if there is no label. | 1114 | * May also return 0 (and a NULL buffer pointer) if there is no label. |
1115 | * @key_session_to_parent: | ||
1116 | * Forcibly assign the session keyring from a process to its parent | ||
1117 | * process. | ||
1118 | * @cred: Pointer to process's credentials | ||
1119 | * @parent_cred: Pointer to parent process's credentials | ||
1120 | * @keyring: Proposed new session keyring | ||
1121 | * Return 0 if permission is granted, -ve error otherwise. | ||
1071 | * | 1122 | * |
1072 | * Security hooks affecting all System V IPC operations. | 1123 | * Security hooks affecting all System V IPC operations. |
1073 | * | 1124 | * |
@@ -1209,7 +1260,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1209 | * @alter contains the flag indicating whether changes are to be made. | 1260 | * @alter contains the flag indicating whether changes are to be made. |
1210 | * Return 0 if permission is granted. | 1261 | * Return 0 if permission is granted. |
1211 | * | 1262 | * |
1212 | * @ptrace_may_access: | 1263 | * @ptrace_access_check: |
1213 | * Check permission before allowing the current process to trace the | 1264 | * Check permission before allowing the current process to trace the |
1214 | * @child process. | 1265 | * @child process. |
1215 | * Security modules may also want to perform a process tracing check | 1266 | * Security modules may also want to perform a process tracing check |
@@ -1224,7 +1275,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1224 | * Check that the @parent process has sufficient permission to trace the | 1275 | * Check that the @parent process has sufficient permission to trace the |
1225 | * current process before allowing the current process to present itself | 1276 | * current process before allowing the current process to present itself |
1226 | * to the @parent process for tracing. | 1277 | * to the @parent process for tracing. |
1227 | * The parent process will still have to undergo the ptrace_may_access | 1278 | * The parent process will still have to undergo the ptrace_access_check |
1228 | * checks before it is allowed to trace this one. | 1279 | * checks before it is allowed to trace this one. |
1229 | * @parent contains the task_struct structure for debugger process. | 1280 | * @parent contains the task_struct structure for debugger process. |
1230 | * Return 0 if permission is granted. | 1281 | * Return 0 if permission is granted. |
@@ -1331,12 +1382,47 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1331 | * audit_rule_init. | 1382 | * audit_rule_init. |
1332 | * @rule contains the allocated rule | 1383 | * @rule contains the allocated rule |
1333 | * | 1384 | * |
1385 | * @inode_notifysecctx: | ||
1386 | * Notify the security module of what the security context of an inode | ||
1387 | * should be. Initializes the incore security context managed by the | ||
1388 | * security module for this inode. Example usage: NFS client invokes | ||
1389 | * this hook to initialize the security context in its incore inode to the | ||
1390 | * value provided by the server for the file when the server returned the | ||
1391 | * file's attributes to the client. | ||
1392 | * | ||
1393 | * Must be called with inode->i_mutex locked. | ||
1394 | * | ||
1395 | * @inode we wish to set the security context of. | ||
1396 | * @ctx contains the string which we wish to set in the inode. | ||
1397 | * @ctxlen contains the length of @ctx. | ||
1398 | * | ||
1399 | * @inode_setsecctx: | ||
1400 | * Change the security context of an inode. Updates the | ||
1401 | * incore security context managed by the security module and invokes the | ||
1402 | * fs code as needed (via __vfs_setxattr_noperm) to update any backing | ||
1403 | * xattrs that represent the context. Example usage: NFS server invokes | ||
1404 | * this hook to change the security context in its incore inode and on the | ||
1405 | * backing filesystem to a value provided by the client on a SETATTR | ||
1406 | * operation. | ||
1407 | * | ||
1408 | * Must be called with inode->i_mutex locked. | ||
1409 | * | ||
1410 | * @dentry contains the inode we wish to set the security context of. | ||
1411 | * @ctx contains the string which we wish to set in the inode. | ||
1412 | * @ctxlen contains the length of @ctx. | ||
1413 | * | ||
1414 | * @inode_getsecctx: | ||
1415 | * Returns a string containing all relavent security context information | ||
1416 | * | ||
1417 | * @inode we wish to set the security context of. | ||
1418 | * @ctx is a pointer in which to place the allocated security context. | ||
1419 | * @ctxlen points to the place to put the length of @ctx. | ||
1334 | * This is the main security structure. | 1420 | * This is the main security structure. |
1335 | */ | 1421 | */ |
1336 | struct security_operations { | 1422 | struct security_operations { |
1337 | char name[SECURITY_NAME_MAX + 1]; | 1423 | char name[SECURITY_NAME_MAX + 1]; |
1338 | 1424 | ||
1339 | int (*ptrace_may_access) (struct task_struct *child, unsigned int mode); | 1425 | int (*ptrace_access_check) (struct task_struct *child, unsigned int mode); |
1340 | int (*ptrace_traceme) (struct task_struct *parent); | 1426 | int (*ptrace_traceme) (struct task_struct *parent); |
1341 | int (*capget) (struct task_struct *target, | 1427 | int (*capget) (struct task_struct *target, |
1342 | kernel_cap_t *effective, | 1428 | kernel_cap_t *effective, |
@@ -1463,12 +1549,15 @@ struct security_operations { | |||
1463 | int (*dentry_open) (struct file *file, const struct cred *cred); | 1549 | int (*dentry_open) (struct file *file, const struct cred *cred); |
1464 | 1550 | ||
1465 | int (*task_create) (unsigned long clone_flags); | 1551 | int (*task_create) (unsigned long clone_flags); |
1552 | int (*cred_alloc_blank) (struct cred *cred, gfp_t gfp); | ||
1466 | void (*cred_free) (struct cred *cred); | 1553 | void (*cred_free) (struct cred *cred); |
1467 | int (*cred_prepare)(struct cred *new, const struct cred *old, | 1554 | int (*cred_prepare)(struct cred *new, const struct cred *old, |
1468 | gfp_t gfp); | 1555 | gfp_t gfp); |
1469 | void (*cred_commit)(struct cred *new, const struct cred *old); | 1556 | void (*cred_commit)(struct cred *new, const struct cred *old); |
1557 | void (*cred_transfer)(struct cred *new, const struct cred *old); | ||
1470 | int (*kernel_act_as)(struct cred *new, u32 secid); | 1558 | int (*kernel_act_as)(struct cred *new, u32 secid); |
1471 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); | 1559 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); |
1560 | int (*kernel_module_request)(void); | ||
1472 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); | 1561 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); |
1473 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, | 1562 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, |
1474 | int flags); | 1563 | int flags); |
@@ -1536,6 +1625,10 @@ struct security_operations { | |||
1536 | int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid); | 1625 | int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid); |
1537 | void (*release_secctx) (char *secdata, u32 seclen); | 1626 | void (*release_secctx) (char *secdata, u32 seclen); |
1538 | 1627 | ||
1628 | int (*inode_notifysecctx)(struct inode *inode, void *ctx, u32 ctxlen); | ||
1629 | int (*inode_setsecctx)(struct dentry *dentry, void *ctx, u32 ctxlen); | ||
1630 | int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen); | ||
1631 | |||
1539 | #ifdef CONFIG_SECURITY_NETWORK | 1632 | #ifdef CONFIG_SECURITY_NETWORK |
1540 | int (*unix_stream_connect) (struct socket *sock, | 1633 | int (*unix_stream_connect) (struct socket *sock, |
1541 | struct socket *other, struct sock *newsk); | 1634 | struct socket *other, struct sock *newsk); |
@@ -1572,6 +1665,9 @@ struct security_operations { | |||
1572 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); | 1665 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); |
1573 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); | 1666 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); |
1574 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); | 1667 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); |
1668 | int (*tun_dev_create)(void); | ||
1669 | void (*tun_dev_post_create)(struct sock *sk); | ||
1670 | int (*tun_dev_attach)(struct sock *sk); | ||
1575 | #endif /* CONFIG_SECURITY_NETWORK */ | 1671 | #endif /* CONFIG_SECURITY_NETWORK */ |
1576 | 1672 | ||
1577 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 1673 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
@@ -1600,6 +1696,9 @@ struct security_operations { | |||
1600 | const struct cred *cred, | 1696 | const struct cred *cred, |
1601 | key_perm_t perm); | 1697 | key_perm_t perm); |
1602 | int (*key_getsecurity)(struct key *key, char **_buffer); | 1698 | int (*key_getsecurity)(struct key *key, char **_buffer); |
1699 | int (*key_session_to_parent)(const struct cred *cred, | ||
1700 | const struct cred *parent_cred, | ||
1701 | struct key *key); | ||
1603 | #endif /* CONFIG_KEYS */ | 1702 | #endif /* CONFIG_KEYS */ |
1604 | 1703 | ||
1605 | #ifdef CONFIG_AUDIT | 1704 | #ifdef CONFIG_AUDIT |
@@ -1617,7 +1716,7 @@ extern int security_module_enable(struct security_operations *ops); | |||
1617 | extern int register_security(struct security_operations *ops); | 1716 | extern int register_security(struct security_operations *ops); |
1618 | 1717 | ||
1619 | /* Security operations */ | 1718 | /* Security operations */ |
1620 | int security_ptrace_may_access(struct task_struct *child, unsigned int mode); | 1719 | int security_ptrace_access_check(struct task_struct *child, unsigned int mode); |
1621 | int security_ptrace_traceme(struct task_struct *parent); | 1720 | int security_ptrace_traceme(struct task_struct *parent); |
1622 | int security_capget(struct task_struct *target, | 1721 | int security_capget(struct task_struct *target, |
1623 | kernel_cap_t *effective, | 1722 | kernel_cap_t *effective, |
@@ -1716,11 +1815,14 @@ int security_file_send_sigiotask(struct task_struct *tsk, | |||
1716 | int security_file_receive(struct file *file); | 1815 | int security_file_receive(struct file *file); |
1717 | int security_dentry_open(struct file *file, const struct cred *cred); | 1816 | int security_dentry_open(struct file *file, const struct cred *cred); |
1718 | int security_task_create(unsigned long clone_flags); | 1817 | int security_task_create(unsigned long clone_flags); |
1818 | int security_cred_alloc_blank(struct cred *cred, gfp_t gfp); | ||
1719 | void security_cred_free(struct cred *cred); | 1819 | void security_cred_free(struct cred *cred); |
1720 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); | 1820 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); |
1721 | void security_commit_creds(struct cred *new, const struct cred *old); | 1821 | void security_commit_creds(struct cred *new, const struct cred *old); |
1822 | void security_transfer_creds(struct cred *new, const struct cred *old); | ||
1722 | int security_kernel_act_as(struct cred *new, u32 secid); | 1823 | int security_kernel_act_as(struct cred *new, u32 secid); |
1723 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); | 1824 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); |
1825 | int security_kernel_module_request(void); | ||
1724 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); | 1826 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); |
1725 | int security_task_fix_setuid(struct cred *new, const struct cred *old, | 1827 | int security_task_fix_setuid(struct cred *new, const struct cred *old, |
1726 | int flags); | 1828 | int flags); |
@@ -1776,6 +1878,9 @@ int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); | |||
1776 | int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); | 1878 | int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); |
1777 | void security_release_secctx(char *secdata, u32 seclen); | 1879 | void security_release_secctx(char *secdata, u32 seclen); |
1778 | 1880 | ||
1881 | int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); | ||
1882 | int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); | ||
1883 | int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); | ||
1779 | #else /* CONFIG_SECURITY */ | 1884 | #else /* CONFIG_SECURITY */ |
1780 | struct security_mnt_opts { | 1885 | struct security_mnt_opts { |
1781 | }; | 1886 | }; |
@@ -1798,10 +1903,10 @@ static inline int security_init(void) | |||
1798 | return 0; | 1903 | return 0; |
1799 | } | 1904 | } |
1800 | 1905 | ||
1801 | static inline int security_ptrace_may_access(struct task_struct *child, | 1906 | static inline int security_ptrace_access_check(struct task_struct *child, |
1802 | unsigned int mode) | 1907 | unsigned int mode) |
1803 | { | 1908 | { |
1804 | return cap_ptrace_may_access(child, mode); | 1909 | return cap_ptrace_access_check(child, mode); |
1805 | } | 1910 | } |
1806 | 1911 | ||
1807 | static inline int security_ptrace_traceme(struct task_struct *parent) | 1912 | static inline int security_ptrace_traceme(struct task_struct *parent) |
@@ -2197,9 +2302,7 @@ static inline int security_file_mmap(struct file *file, unsigned long reqprot, | |||
2197 | unsigned long addr, | 2302 | unsigned long addr, |
2198 | unsigned long addr_only) | 2303 | unsigned long addr_only) |
2199 | { | 2304 | { |
2200 | if ((addr < mmap_min_addr) && !capable(CAP_SYS_RAWIO)) | 2305 | return cap_file_mmap(file, reqprot, prot, flags, addr, addr_only); |
2201 | return -EACCES; | ||
2202 | return 0; | ||
2203 | } | 2306 | } |
2204 | 2307 | ||
2205 | static inline int security_file_mprotect(struct vm_area_struct *vma, | 2308 | static inline int security_file_mprotect(struct vm_area_struct *vma, |
@@ -2248,6 +2351,11 @@ static inline int security_task_create(unsigned long clone_flags) | |||
2248 | return 0; | 2351 | return 0; |
2249 | } | 2352 | } |
2250 | 2353 | ||
2354 | static inline int security_cred_alloc_blank(struct cred *cred, gfp_t gfp) | ||
2355 | { | ||
2356 | return 0; | ||
2357 | } | ||
2358 | |||
2251 | static inline void security_cred_free(struct cred *cred) | 2359 | static inline void security_cred_free(struct cred *cred) |
2252 | { } | 2360 | { } |
2253 | 2361 | ||
@@ -2263,6 +2371,11 @@ static inline void security_commit_creds(struct cred *new, | |||
2263 | { | 2371 | { |
2264 | } | 2372 | } |
2265 | 2373 | ||
2374 | static inline void security_transfer_creds(struct cred *new, | ||
2375 | const struct cred *old) | ||
2376 | { | ||
2377 | } | ||
2378 | |||
2266 | static inline int security_kernel_act_as(struct cred *cred, u32 secid) | 2379 | static inline int security_kernel_act_as(struct cred *cred, u32 secid) |
2267 | { | 2380 | { |
2268 | return 0; | 2381 | return 0; |
@@ -2274,6 +2387,11 @@ static inline int security_kernel_create_files_as(struct cred *cred, | |||
2274 | return 0; | 2387 | return 0; |
2275 | } | 2388 | } |
2276 | 2389 | ||
2390 | static inline int security_kernel_module_request(void) | ||
2391 | { | ||
2392 | return 0; | ||
2393 | } | ||
2394 | |||
2277 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, | 2395 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, |
2278 | int flags) | 2396 | int flags) |
2279 | { | 2397 | { |
@@ -2519,6 +2637,19 @@ static inline int security_secctx_to_secid(const char *secdata, | |||
2519 | static inline void security_release_secctx(char *secdata, u32 seclen) | 2637 | static inline void security_release_secctx(char *secdata, u32 seclen) |
2520 | { | 2638 | { |
2521 | } | 2639 | } |
2640 | |||
2641 | static inline int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) | ||
2642 | { | ||
2643 | return -EOPNOTSUPP; | ||
2644 | } | ||
2645 | static inline int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) | ||
2646 | { | ||
2647 | return -EOPNOTSUPP; | ||
2648 | } | ||
2649 | static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) | ||
2650 | { | ||
2651 | return -EOPNOTSUPP; | ||
2652 | } | ||
2522 | #endif /* CONFIG_SECURITY */ | 2653 | #endif /* CONFIG_SECURITY */ |
2523 | 2654 | ||
2524 | #ifdef CONFIG_SECURITY_NETWORK | 2655 | #ifdef CONFIG_SECURITY_NETWORK |
@@ -2557,6 +2688,9 @@ void security_inet_csk_clone(struct sock *newsk, | |||
2557 | const struct request_sock *req); | 2688 | const struct request_sock *req); |
2558 | void security_inet_conn_established(struct sock *sk, | 2689 | void security_inet_conn_established(struct sock *sk, |
2559 | struct sk_buff *skb); | 2690 | struct sk_buff *skb); |
2691 | int security_tun_dev_create(void); | ||
2692 | void security_tun_dev_post_create(struct sock *sk); | ||
2693 | int security_tun_dev_attach(struct sock *sk); | ||
2560 | 2694 | ||
2561 | #else /* CONFIG_SECURITY_NETWORK */ | 2695 | #else /* CONFIG_SECURITY_NETWORK */ |
2562 | static inline int security_unix_stream_connect(struct socket *sock, | 2696 | static inline int security_unix_stream_connect(struct socket *sock, |
@@ -2707,6 +2841,20 @@ static inline void security_inet_conn_established(struct sock *sk, | |||
2707 | struct sk_buff *skb) | 2841 | struct sk_buff *skb) |
2708 | { | 2842 | { |
2709 | } | 2843 | } |
2844 | |||
2845 | static inline int security_tun_dev_create(void) | ||
2846 | { | ||
2847 | return 0; | ||
2848 | } | ||
2849 | |||
2850 | static inline void security_tun_dev_post_create(struct sock *sk) | ||
2851 | { | ||
2852 | } | ||
2853 | |||
2854 | static inline int security_tun_dev_attach(struct sock *sk) | ||
2855 | { | ||
2856 | return 0; | ||
2857 | } | ||
2710 | #endif /* CONFIG_SECURITY_NETWORK */ | 2858 | #endif /* CONFIG_SECURITY_NETWORK */ |
2711 | 2859 | ||
2712 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 2860 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
@@ -2863,6 +3011,9 @@ void security_key_free(struct key *key); | |||
2863 | int security_key_permission(key_ref_t key_ref, | 3011 | int security_key_permission(key_ref_t key_ref, |
2864 | const struct cred *cred, key_perm_t perm); | 3012 | const struct cred *cred, key_perm_t perm); |
2865 | int security_key_getsecurity(struct key *key, char **_buffer); | 3013 | int security_key_getsecurity(struct key *key, char **_buffer); |
3014 | int security_key_session_to_parent(const struct cred *cred, | ||
3015 | const struct cred *parent_cred, | ||
3016 | struct key *key); | ||
2866 | 3017 | ||
2867 | #else | 3018 | #else |
2868 | 3019 | ||
@@ -2890,6 +3041,13 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer) | |||
2890 | return 0; | 3041 | return 0; |
2891 | } | 3042 | } |
2892 | 3043 | ||
3044 | static inline int security_key_session_to_parent(const struct cred *cred, | ||
3045 | const struct cred *parent_cred, | ||
3046 | struct key *key) | ||
3047 | { | ||
3048 | return 0; | ||
3049 | } | ||
3050 | |||
2893 | #endif | 3051 | #endif |
2894 | #endif /* CONFIG_KEYS */ | 3052 | #endif /* CONFIG_KEYS */ |
2895 | 3053 | ||
diff --git a/include/linux/selinux.h b/include/linux/selinux.h index 20f965d4b041..82e0f26a1299 100644 --- a/include/linux/selinux.h +++ b/include/linux/selinux.h | |||
@@ -61,6 +61,11 @@ void selinux_secmark_refcount_inc(void); | |||
61 | * existing SECMARK targets has been removed/flushed. | 61 | * existing SECMARK targets has been removed/flushed. |
62 | */ | 62 | */ |
63 | void selinux_secmark_refcount_dec(void); | 63 | void selinux_secmark_refcount_dec(void); |
64 | |||
65 | /** | ||
66 | * selinux_is_enabled - is SELinux enabled? | ||
67 | */ | ||
68 | bool selinux_is_enabled(void); | ||
64 | #else | 69 | #else |
65 | 70 | ||
66 | static inline int selinux_string_to_sid(const char *str, u32 *sid) | 71 | static inline int selinux_string_to_sid(const char *str, u32 *sid) |
@@ -84,6 +89,10 @@ static inline void selinux_secmark_refcount_dec(void) | |||
84 | return; | 89 | return; |
85 | } | 90 | } |
86 | 91 | ||
92 | static inline bool selinux_is_enabled(void) | ||
93 | { | ||
94 | return false; | ||
95 | } | ||
87 | #endif /* CONFIG_SECURITY_SELINUX */ | 96 | #endif /* CONFIG_SECURITY_SELINUX */ |
88 | 97 | ||
89 | #endif /* _LINUX_SELINUX_H */ | 98 | #endif /* _LINUX_SELINUX_H */ |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 126d24c9eaa8..a640bc2afe76 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -31,8 +31,6 @@ struct serio { | |||
31 | 31 | ||
32 | bool manual_bind; | 32 | bool manual_bind; |
33 | bool registered; /* port has been fully registered with driver core */ | 33 | bool registered; /* port has been fully registered with driver core */ |
34 | bool suspended; /* port is suspended */ | ||
35 | |||
36 | 34 | ||
37 | struct serio_device_id id; | 35 | struct serio_device_id id; |
38 | 36 | ||
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index abff6c9b413c..6d3f2f449ead 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
@@ -39,7 +39,7 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | |||
39 | } | 39 | } |
40 | 40 | ||
41 | #ifdef CONFIG_TMPFS_POSIX_ACL | 41 | #ifdef CONFIG_TMPFS_POSIX_ACL |
42 | int shmem_permission(struct inode *, int); | 42 | int shmem_check_acl(struct inode *, int); |
43 | int shmem_acl_init(struct inode *, struct inode *); | 43 | int shmem_acl_init(struct inode *, struct inode *); |
44 | 44 | ||
45 | extern struct xattr_handler shmem_xattr_acl_access_handler; | 45 | extern struct xattr_handler shmem_xattr_acl_access_handler; |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index f2c69a2cca17..df7b23ac66e6 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -304,7 +304,6 @@ typedef unsigned char *sk_buff_data_t; | |||
304 | * @tc_index: Traffic control index | 304 | * @tc_index: Traffic control index |
305 | * @tc_verd: traffic control verdict | 305 | * @tc_verd: traffic control verdict |
306 | * @ndisc_nodetype: router type (from link layer) | 306 | * @ndisc_nodetype: router type (from link layer) |
307 | * @do_not_encrypt: set to prevent encryption of this frame | ||
308 | * @dma_cookie: a cookie to one of several possible DMA operations | 307 | * @dma_cookie: a cookie to one of several possible DMA operations |
309 | * done by skb DMA functions | 308 | * done by skb DMA functions |
310 | * @secmark: security marking | 309 | * @secmark: security marking |
@@ -380,12 +379,9 @@ struct sk_buff { | |||
380 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 379 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
381 | __u8 ndisc_nodetype:2; | 380 | __u8 ndisc_nodetype:2; |
382 | #endif | 381 | #endif |
383 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) | ||
384 | __u8 do_not_encrypt:1; | ||
385 | #endif | ||
386 | kmemcheck_bitfield_end(flags2); | 382 | kmemcheck_bitfield_end(flags2); |
387 | 383 | ||
388 | /* 0/13/14 bit hole */ | 384 | /* 0/14 bit hole */ |
389 | 385 | ||
390 | #ifdef CONFIG_NET_DMA | 386 | #ifdef CONFIG_NET_DMA |
391 | dma_cookie_t dma_cookie; | 387 | dma_cookie_t dma_cookie; |
diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h index bb5368df4be8..0ec00b39d006 100644 --- a/include/linux/slob_def.h +++ b/include/linux/slob_def.h | |||
@@ -34,9 +34,4 @@ static __always_inline void *__kmalloc(size_t size, gfp_t flags) | |||
34 | return kmalloc(size, flags); | 34 | return kmalloc(size, flags); |
35 | } | 35 | } |
36 | 36 | ||
37 | static inline void kmem_cache_init_late(void) | ||
38 | { | ||
39 | /* Nothing to do */ | ||
40 | } | ||
41 | |||
42 | #endif /* __LINUX_SLOB_DEF_H */ | 37 | #endif /* __LINUX_SLOB_DEF_H */ |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index c1c862b1d01a..5ad70a60fd74 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -153,12 +153,10 @@ static __always_inline int kmalloc_index(size_t size) | |||
153 | if (size <= KMALLOC_MIN_SIZE) | 153 | if (size <= KMALLOC_MIN_SIZE) |
154 | return KMALLOC_SHIFT_LOW; | 154 | return KMALLOC_SHIFT_LOW; |
155 | 155 | ||
156 | #if KMALLOC_MIN_SIZE <= 64 | 156 | if (KMALLOC_MIN_SIZE <= 32 && size > 64 && size <= 96) |
157 | if (size > 64 && size <= 96) | ||
158 | return 1; | 157 | return 1; |
159 | if (size > 128 && size <= 192) | 158 | if (KMALLOC_MIN_SIZE <= 64 && size > 128 && size <= 192) |
160 | return 2; | 159 | return 2; |
161 | #endif | ||
162 | if (size <= 8) return 3; | 160 | if (size <= 8) return 3; |
163 | if (size <= 16) return 4; | 161 | if (size <= 16) return 4; |
164 | if (size <= 32) return 5; | 162 | if (size <= 32) return 5; |
@@ -304,6 +302,4 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
304 | } | 302 | } |
305 | #endif | 303 | #endif |
306 | 304 | ||
307 | void __init kmem_cache_init_late(void); | ||
308 | |||
309 | #endif /* _LINUX_SLUB_DEF_H */ | 305 | #endif /* _LINUX_SLUB_DEF_H */ |
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 4be57ab03478..f0ca7a7a1757 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
@@ -143,15 +143,6 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } | |||
143 | */ | 143 | */ |
144 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) | 144 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) |
145 | 145 | ||
146 | /* | ||
147 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
148 | */ | ||
149 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
150 | # include <linux/spinlock_api_smp.h> | ||
151 | #else | ||
152 | # include <linux/spinlock_api_up.h> | ||
153 | #endif | ||
154 | |||
155 | #ifdef CONFIG_DEBUG_SPINLOCK | 146 | #ifdef CONFIG_DEBUG_SPINLOCK |
156 | extern void _raw_spin_lock(spinlock_t *lock); | 147 | extern void _raw_spin_lock(spinlock_t *lock); |
157 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) | 148 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) |
@@ -268,50 +259,16 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } | |||
268 | 259 | ||
269 | #define spin_lock_irq(lock) _spin_lock_irq(lock) | 260 | #define spin_lock_irq(lock) _spin_lock_irq(lock) |
270 | #define spin_lock_bh(lock) _spin_lock_bh(lock) | 261 | #define spin_lock_bh(lock) _spin_lock_bh(lock) |
271 | |||
272 | #define read_lock_irq(lock) _read_lock_irq(lock) | 262 | #define read_lock_irq(lock) _read_lock_irq(lock) |
273 | #define read_lock_bh(lock) _read_lock_bh(lock) | 263 | #define read_lock_bh(lock) _read_lock_bh(lock) |
274 | |||
275 | #define write_lock_irq(lock) _write_lock_irq(lock) | 264 | #define write_lock_irq(lock) _write_lock_irq(lock) |
276 | #define write_lock_bh(lock) _write_lock_bh(lock) | 265 | #define write_lock_bh(lock) _write_lock_bh(lock) |
277 | 266 | #define spin_unlock(lock) _spin_unlock(lock) | |
278 | /* | 267 | #define read_unlock(lock) _read_unlock(lock) |
279 | * We inline the unlock functions in the nondebug case: | 268 | #define write_unlock(lock) _write_unlock(lock) |
280 | */ | 269 | #define spin_unlock_irq(lock) _spin_unlock_irq(lock) |
281 | #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || \ | 270 | #define read_unlock_irq(lock) _read_unlock_irq(lock) |
282 | !defined(CONFIG_SMP) | 271 | #define write_unlock_irq(lock) _write_unlock_irq(lock) |
283 | # define spin_unlock(lock) _spin_unlock(lock) | ||
284 | # define read_unlock(lock) _read_unlock(lock) | ||
285 | # define write_unlock(lock) _write_unlock(lock) | ||
286 | # define spin_unlock_irq(lock) _spin_unlock_irq(lock) | ||
287 | # define read_unlock_irq(lock) _read_unlock_irq(lock) | ||
288 | # define write_unlock_irq(lock) _write_unlock_irq(lock) | ||
289 | #else | ||
290 | # define spin_unlock(lock) \ | ||
291 | do {__raw_spin_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
292 | # define read_unlock(lock) \ | ||
293 | do {__raw_read_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
294 | # define write_unlock(lock) \ | ||
295 | do {__raw_write_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
296 | # define spin_unlock_irq(lock) \ | ||
297 | do { \ | ||
298 | __raw_spin_unlock(&(lock)->raw_lock); \ | ||
299 | __release(lock); \ | ||
300 | local_irq_enable(); \ | ||
301 | } while (0) | ||
302 | # define read_unlock_irq(lock) \ | ||
303 | do { \ | ||
304 | __raw_read_unlock(&(lock)->raw_lock); \ | ||
305 | __release(lock); \ | ||
306 | local_irq_enable(); \ | ||
307 | } while (0) | ||
308 | # define write_unlock_irq(lock) \ | ||
309 | do { \ | ||
310 | __raw_write_unlock(&(lock)->raw_lock); \ | ||
311 | __release(lock); \ | ||
312 | local_irq_enable(); \ | ||
313 | } while (0) | ||
314 | #endif | ||
315 | 272 | ||
316 | #define spin_unlock_irqrestore(lock, flags) \ | 273 | #define spin_unlock_irqrestore(lock, flags) \ |
317 | do { \ | 274 | do { \ |
@@ -380,4 +337,13 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); | |||
380 | */ | 337 | */ |
381 | #define spin_can_lock(lock) (!spin_is_locked(lock)) | 338 | #define spin_can_lock(lock) (!spin_is_locked(lock)) |
382 | 339 | ||
340 | /* | ||
341 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
342 | */ | ||
343 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
344 | # include <linux/spinlock_api_smp.h> | ||
345 | #else | ||
346 | # include <linux/spinlock_api_up.h> | ||
347 | #endif | ||
348 | |||
383 | #endif /* __LINUX_SPINLOCK_H */ | 349 | #endif /* __LINUX_SPINLOCK_H */ |
diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h index d79845d034b5..7a7e18fc2415 100644 --- a/include/linux/spinlock_api_smp.h +++ b/include/linux/spinlock_api_smp.h | |||
@@ -60,4 +60,398 @@ void __lockfunc _read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | |||
60 | void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | 60 | void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags) |
61 | __releases(lock); | 61 | __releases(lock); |
62 | 62 | ||
63 | /* | ||
64 | * We inline the unlock functions in the nondebug case: | ||
65 | */ | ||
66 | #if !defined(CONFIG_DEBUG_SPINLOCK) && !defined(CONFIG_PREEMPT) | ||
67 | #define __always_inline__spin_unlock | ||
68 | #define __always_inline__read_unlock | ||
69 | #define __always_inline__write_unlock | ||
70 | #define __always_inline__spin_unlock_irq | ||
71 | #define __always_inline__read_unlock_irq | ||
72 | #define __always_inline__write_unlock_irq | ||
73 | #endif | ||
74 | |||
75 | #ifndef CONFIG_DEBUG_SPINLOCK | ||
76 | #ifndef CONFIG_GENERIC_LOCKBREAK | ||
77 | |||
78 | #ifdef __always_inline__spin_lock | ||
79 | #define _spin_lock(lock) __spin_lock(lock) | ||
80 | #endif | ||
81 | |||
82 | #ifdef __always_inline__read_lock | ||
83 | #define _read_lock(lock) __read_lock(lock) | ||
84 | #endif | ||
85 | |||
86 | #ifdef __always_inline__write_lock | ||
87 | #define _write_lock(lock) __write_lock(lock) | ||
88 | #endif | ||
89 | |||
90 | #ifdef __always_inline__spin_lock_bh | ||
91 | #define _spin_lock_bh(lock) __spin_lock_bh(lock) | ||
92 | #endif | ||
93 | |||
94 | #ifdef __always_inline__read_lock_bh | ||
95 | #define _read_lock_bh(lock) __read_lock_bh(lock) | ||
96 | #endif | ||
97 | |||
98 | #ifdef __always_inline__write_lock_bh | ||
99 | #define _write_lock_bh(lock) __write_lock_bh(lock) | ||
100 | #endif | ||
101 | |||
102 | #ifdef __always_inline__spin_lock_irq | ||
103 | #define _spin_lock_irq(lock) __spin_lock_irq(lock) | ||
104 | #endif | ||
105 | |||
106 | #ifdef __always_inline__read_lock_irq | ||
107 | #define _read_lock_irq(lock) __read_lock_irq(lock) | ||
108 | #endif | ||
109 | |||
110 | #ifdef __always_inline__write_lock_irq | ||
111 | #define _write_lock_irq(lock) __write_lock_irq(lock) | ||
112 | #endif | ||
113 | |||
114 | #ifdef __always_inline__spin_lock_irqsave | ||
115 | #define _spin_lock_irqsave(lock) __spin_lock_irqsave(lock) | ||
116 | #endif | ||
117 | |||
118 | #ifdef __always_inline__read_lock_irqsave | ||
119 | #define _read_lock_irqsave(lock) __read_lock_irqsave(lock) | ||
120 | #endif | ||
121 | |||
122 | #ifdef __always_inline__write_lock_irqsave | ||
123 | #define _write_lock_irqsave(lock) __write_lock_irqsave(lock) | ||
124 | #endif | ||
125 | |||
126 | #endif /* !CONFIG_GENERIC_LOCKBREAK */ | ||
127 | |||
128 | #ifdef __always_inline__spin_trylock | ||
129 | #define _spin_trylock(lock) __spin_trylock(lock) | ||
130 | #endif | ||
131 | |||
132 | #ifdef __always_inline__read_trylock | ||
133 | #define _read_trylock(lock) __read_trylock(lock) | ||
134 | #endif | ||
135 | |||
136 | #ifdef __always_inline__write_trylock | ||
137 | #define _write_trylock(lock) __write_trylock(lock) | ||
138 | #endif | ||
139 | |||
140 | #ifdef __always_inline__spin_trylock_bh | ||
141 | #define _spin_trylock_bh(lock) __spin_trylock_bh(lock) | ||
142 | #endif | ||
143 | |||
144 | #ifdef __always_inline__spin_unlock | ||
145 | #define _spin_unlock(lock) __spin_unlock(lock) | ||
146 | #endif | ||
147 | |||
148 | #ifdef __always_inline__read_unlock | ||
149 | #define _read_unlock(lock) __read_unlock(lock) | ||
150 | #endif | ||
151 | |||
152 | #ifdef __always_inline__write_unlock | ||
153 | #define _write_unlock(lock) __write_unlock(lock) | ||
154 | #endif | ||
155 | |||
156 | #ifdef __always_inline__spin_unlock_bh | ||
157 | #define _spin_unlock_bh(lock) __spin_unlock_bh(lock) | ||
158 | #endif | ||
159 | |||
160 | #ifdef __always_inline__read_unlock_bh | ||
161 | #define _read_unlock_bh(lock) __read_unlock_bh(lock) | ||
162 | #endif | ||
163 | |||
164 | #ifdef __always_inline__write_unlock_bh | ||
165 | #define _write_unlock_bh(lock) __write_unlock_bh(lock) | ||
166 | #endif | ||
167 | |||
168 | #ifdef __always_inline__spin_unlock_irq | ||
169 | #define _spin_unlock_irq(lock) __spin_unlock_irq(lock) | ||
170 | #endif | ||
171 | |||
172 | #ifdef __always_inline__read_unlock_irq | ||
173 | #define _read_unlock_irq(lock) __read_unlock_irq(lock) | ||
174 | #endif | ||
175 | |||
176 | #ifdef __always_inline__write_unlock_irq | ||
177 | #define _write_unlock_irq(lock) __write_unlock_irq(lock) | ||
178 | #endif | ||
179 | |||
180 | #ifdef __always_inline__spin_unlock_irqrestore | ||
181 | #define _spin_unlock_irqrestore(lock, flags) __spin_unlock_irqrestore(lock, flags) | ||
182 | #endif | ||
183 | |||
184 | #ifdef __always_inline__read_unlock_irqrestore | ||
185 | #define _read_unlock_irqrestore(lock, flags) __read_unlock_irqrestore(lock, flags) | ||
186 | #endif | ||
187 | |||
188 | #ifdef __always_inline__write_unlock_irqrestore | ||
189 | #define _write_unlock_irqrestore(lock, flags) __write_unlock_irqrestore(lock, flags) | ||
190 | #endif | ||
191 | |||
192 | #endif /* CONFIG_DEBUG_SPINLOCK */ | ||
193 | |||
194 | static inline int __spin_trylock(spinlock_t *lock) | ||
195 | { | ||
196 | preempt_disable(); | ||
197 | if (_raw_spin_trylock(lock)) { | ||
198 | spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
199 | return 1; | ||
200 | } | ||
201 | preempt_enable(); | ||
202 | return 0; | ||
203 | } | ||
204 | |||
205 | static inline int __read_trylock(rwlock_t *lock) | ||
206 | { | ||
207 | preempt_disable(); | ||
208 | if (_raw_read_trylock(lock)) { | ||
209 | rwlock_acquire_read(&lock->dep_map, 0, 1, _RET_IP_); | ||
210 | return 1; | ||
211 | } | ||
212 | preempt_enable(); | ||
213 | return 0; | ||
214 | } | ||
215 | |||
216 | static inline int __write_trylock(rwlock_t *lock) | ||
217 | { | ||
218 | preempt_disable(); | ||
219 | if (_raw_write_trylock(lock)) { | ||
220 | rwlock_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
221 | return 1; | ||
222 | } | ||
223 | preempt_enable(); | ||
224 | return 0; | ||
225 | } | ||
226 | |||
227 | /* | ||
228 | * If lockdep is enabled then we use the non-preemption spin-ops | ||
229 | * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are | ||
230 | * not re-enabled during lock-acquire (which the preempt-spin-ops do): | ||
231 | */ | ||
232 | #if !defined(CONFIG_GENERIC_LOCKBREAK) || defined(CONFIG_DEBUG_LOCK_ALLOC) | ||
233 | |||
234 | static inline void __read_lock(rwlock_t *lock) | ||
235 | { | ||
236 | preempt_disable(); | ||
237 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
238 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
239 | } | ||
240 | |||
241 | static inline unsigned long __spin_lock_irqsave(spinlock_t *lock) | ||
242 | { | ||
243 | unsigned long flags; | ||
244 | |||
245 | local_irq_save(flags); | ||
246 | preempt_disable(); | ||
247 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
248 | /* | ||
249 | * On lockdep we dont want the hand-coded irq-enable of | ||
250 | * _raw_spin_lock_flags() code, because lockdep assumes | ||
251 | * that interrupts are not re-enabled during lock-acquire: | ||
252 | */ | ||
253 | #ifdef CONFIG_LOCKDEP | ||
254 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
255 | #else | ||
256 | _raw_spin_lock_flags(lock, &flags); | ||
257 | #endif | ||
258 | return flags; | ||
259 | } | ||
260 | |||
261 | static inline void __spin_lock_irq(spinlock_t *lock) | ||
262 | { | ||
263 | local_irq_disable(); | ||
264 | preempt_disable(); | ||
265 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
266 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
267 | } | ||
268 | |||
269 | static inline void __spin_lock_bh(spinlock_t *lock) | ||
270 | { | ||
271 | local_bh_disable(); | ||
272 | preempt_disable(); | ||
273 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
274 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
275 | } | ||
276 | |||
277 | static inline unsigned long __read_lock_irqsave(rwlock_t *lock) | ||
278 | { | ||
279 | unsigned long flags; | ||
280 | |||
281 | local_irq_save(flags); | ||
282 | preempt_disable(); | ||
283 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
284 | LOCK_CONTENDED_FLAGS(lock, _raw_read_trylock, _raw_read_lock, | ||
285 | _raw_read_lock_flags, &flags); | ||
286 | return flags; | ||
287 | } | ||
288 | |||
289 | static inline void __read_lock_irq(rwlock_t *lock) | ||
290 | { | ||
291 | local_irq_disable(); | ||
292 | preempt_disable(); | ||
293 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
294 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
295 | } | ||
296 | |||
297 | static inline void __read_lock_bh(rwlock_t *lock) | ||
298 | { | ||
299 | local_bh_disable(); | ||
300 | preempt_disable(); | ||
301 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
302 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
303 | } | ||
304 | |||
305 | static inline unsigned long __write_lock_irqsave(rwlock_t *lock) | ||
306 | { | ||
307 | unsigned long flags; | ||
308 | |||
309 | local_irq_save(flags); | ||
310 | preempt_disable(); | ||
311 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
312 | LOCK_CONTENDED_FLAGS(lock, _raw_write_trylock, _raw_write_lock, | ||
313 | _raw_write_lock_flags, &flags); | ||
314 | return flags; | ||
315 | } | ||
316 | |||
317 | static inline void __write_lock_irq(rwlock_t *lock) | ||
318 | { | ||
319 | local_irq_disable(); | ||
320 | preempt_disable(); | ||
321 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
322 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
323 | } | ||
324 | |||
325 | static inline void __write_lock_bh(rwlock_t *lock) | ||
326 | { | ||
327 | local_bh_disable(); | ||
328 | preempt_disable(); | ||
329 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
330 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
331 | } | ||
332 | |||
333 | static inline void __spin_lock(spinlock_t *lock) | ||
334 | { | ||
335 | preempt_disable(); | ||
336 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
337 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
338 | } | ||
339 | |||
340 | static inline void __write_lock(rwlock_t *lock) | ||
341 | { | ||
342 | preempt_disable(); | ||
343 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
344 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
345 | } | ||
346 | |||
347 | #endif /* CONFIG_PREEMPT */ | ||
348 | |||
349 | static inline void __spin_unlock(spinlock_t *lock) | ||
350 | { | ||
351 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
352 | _raw_spin_unlock(lock); | ||
353 | preempt_enable(); | ||
354 | } | ||
355 | |||
356 | static inline void __write_unlock(rwlock_t *lock) | ||
357 | { | ||
358 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
359 | _raw_write_unlock(lock); | ||
360 | preempt_enable(); | ||
361 | } | ||
362 | |||
363 | static inline void __read_unlock(rwlock_t *lock) | ||
364 | { | ||
365 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
366 | _raw_read_unlock(lock); | ||
367 | preempt_enable(); | ||
368 | } | ||
369 | |||
370 | static inline void __spin_unlock_irqrestore(spinlock_t *lock, | ||
371 | unsigned long flags) | ||
372 | { | ||
373 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
374 | _raw_spin_unlock(lock); | ||
375 | local_irq_restore(flags); | ||
376 | preempt_enable(); | ||
377 | } | ||
378 | |||
379 | static inline void __spin_unlock_irq(spinlock_t *lock) | ||
380 | { | ||
381 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
382 | _raw_spin_unlock(lock); | ||
383 | local_irq_enable(); | ||
384 | preempt_enable(); | ||
385 | } | ||
386 | |||
387 | static inline void __spin_unlock_bh(spinlock_t *lock) | ||
388 | { | ||
389 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
390 | _raw_spin_unlock(lock); | ||
391 | preempt_enable_no_resched(); | ||
392 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
393 | } | ||
394 | |||
395 | static inline void __read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | ||
396 | { | ||
397 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
398 | _raw_read_unlock(lock); | ||
399 | local_irq_restore(flags); | ||
400 | preempt_enable(); | ||
401 | } | ||
402 | |||
403 | static inline void __read_unlock_irq(rwlock_t *lock) | ||
404 | { | ||
405 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
406 | _raw_read_unlock(lock); | ||
407 | local_irq_enable(); | ||
408 | preempt_enable(); | ||
409 | } | ||
410 | |||
411 | static inline void __read_unlock_bh(rwlock_t *lock) | ||
412 | { | ||
413 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
414 | _raw_read_unlock(lock); | ||
415 | preempt_enable_no_resched(); | ||
416 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
417 | } | ||
418 | |||
419 | static inline void __write_unlock_irqrestore(rwlock_t *lock, | ||
420 | unsigned long flags) | ||
421 | { | ||
422 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
423 | _raw_write_unlock(lock); | ||
424 | local_irq_restore(flags); | ||
425 | preempt_enable(); | ||
426 | } | ||
427 | |||
428 | static inline void __write_unlock_irq(rwlock_t *lock) | ||
429 | { | ||
430 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
431 | _raw_write_unlock(lock); | ||
432 | local_irq_enable(); | ||
433 | preempt_enable(); | ||
434 | } | ||
435 | |||
436 | static inline void __write_unlock_bh(rwlock_t *lock) | ||
437 | { | ||
438 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
439 | _raw_write_unlock(lock); | ||
440 | preempt_enable_no_resched(); | ||
441 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
442 | } | ||
443 | |||
444 | static inline int __spin_trylock_bh(spinlock_t *lock) | ||
445 | { | ||
446 | local_bh_disable(); | ||
447 | preempt_disable(); | ||
448 | if (_raw_spin_trylock(lock)) { | ||
449 | spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
450 | return 1; | ||
451 | } | ||
452 | preempt_enable_no_resched(); | ||
453 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
454 | return 0; | ||
455 | } | ||
456 | |||
63 | #endif /* __LINUX_SPINLOCK_API_SMP_H */ | 457 | #endif /* __LINUX_SPINLOCK_API_SMP_H */ |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 5ae8fa22d331..3d0a9ff24f01 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -27,24 +27,54 @@ struct ssb_sprom { | |||
27 | u8 et1mdcport; /* MDIO for enet1 */ | 27 | u8 et1mdcport; /* MDIO for enet1 */ |
28 | u8 board_rev; /* Board revision number from SPROM. */ | 28 | u8 board_rev; /* Board revision number from SPROM. */ |
29 | u8 country_code; /* Country Code */ | 29 | u8 country_code; /* Country Code */ |
30 | u8 ant_available_a; /* A-PHY antenna available bits (up to 4) */ | 30 | u8 ant_available_a; /* 2GHz antenna available bits (up to 4) */ |
31 | u8 ant_available_bg; /* B/G-PHY antenna available bits (up to 4) */ | 31 | u8 ant_available_bg; /* 5GHz antenna available bits (up to 4) */ |
32 | u16 pa0b0; | 32 | u16 pa0b0; |
33 | u16 pa0b1; | 33 | u16 pa0b1; |
34 | u16 pa0b2; | 34 | u16 pa0b2; |
35 | u16 pa1b0; | 35 | u16 pa1b0; |
36 | u16 pa1b1; | 36 | u16 pa1b1; |
37 | u16 pa1b2; | 37 | u16 pa1b2; |
38 | u16 pa1lob0; | ||
39 | u16 pa1lob1; | ||
40 | u16 pa1lob2; | ||
41 | u16 pa1hib0; | ||
42 | u16 pa1hib1; | ||
43 | u16 pa1hib2; | ||
38 | u8 gpio0; /* GPIO pin 0 */ | 44 | u8 gpio0; /* GPIO pin 0 */ |
39 | u8 gpio1; /* GPIO pin 1 */ | 45 | u8 gpio1; /* GPIO pin 1 */ |
40 | u8 gpio2; /* GPIO pin 2 */ | 46 | u8 gpio2; /* GPIO pin 2 */ |
41 | u8 gpio3; /* GPIO pin 3 */ | 47 | u8 gpio3; /* GPIO pin 3 */ |
42 | u16 maxpwr_a; /* A-PHY Amplifier Max Power (in dBm Q5.2) */ | 48 | u16 maxpwr_bg; /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */ |
43 | u16 maxpwr_bg; /* B/G-PHY Amplifier Max Power (in dBm Q5.2) */ | 49 | u16 maxpwr_al; /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */ |
50 | u16 maxpwr_a; /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */ | ||
51 | u16 maxpwr_ah; /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */ | ||
44 | u8 itssi_a; /* Idle TSSI Target for A-PHY */ | 52 | u8 itssi_a; /* Idle TSSI Target for A-PHY */ |
45 | u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ | 53 | u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ |
46 | u16 boardflags_lo; /* Boardflags (low 16 bits) */ | 54 | u8 tri2g; /* 2.4GHz TX isolation */ |
47 | u16 boardflags_hi; /* Boardflags (high 16 bits) */ | 55 | u8 tri5gl; /* 5.2GHz TX isolation */ |
56 | u8 tri5g; /* 5.3GHz TX isolation */ | ||
57 | u8 tri5gh; /* 5.8GHz TX isolation */ | ||
58 | u8 rxpo2g; /* 2GHz RX power offset */ | ||
59 | u8 rxpo5g; /* 5GHz RX power offset */ | ||
60 | u8 rssisav2g; /* 2GHz RSSI params */ | ||
61 | u8 rssismc2g; | ||
62 | u8 rssismf2g; | ||
63 | u8 bxa2g; /* 2GHz BX arch */ | ||
64 | u8 rssisav5g; /* 5GHz RSSI params */ | ||
65 | u8 rssismc5g; | ||
66 | u8 rssismf5g; | ||
67 | u8 bxa5g; /* 5GHz BX arch */ | ||
68 | u16 cck2gpo; /* CCK power offset */ | ||
69 | u32 ofdm2gpo; /* 2.4GHz OFDM power offset */ | ||
70 | u32 ofdm5glpo; /* 5.2GHz OFDM power offset */ | ||
71 | u32 ofdm5gpo; /* 5.3GHz OFDM power offset */ | ||
72 | u32 ofdm5ghpo; /* 5.8GHz OFDM power offset */ | ||
73 | u16 boardflags_lo; /* Board flags (bits 0-15) */ | ||
74 | u16 boardflags_hi; /* Board flags (bits 16-31) */ | ||
75 | u16 boardflags2_lo; /* Board flags (bits 32-47) */ | ||
76 | u16 boardflags2_hi; /* Board flags (bits 48-63) */ | ||
77 | /* TODO store board flags in a single u64 */ | ||
48 | 78 | ||
49 | /* Antenna gain values for up to 4 antennas | 79 | /* Antenna gain values for up to 4 antennas |
50 | * on each band. Values in dBm/4 (Q5.2). Negative gain means the | 80 | * on each band. Values in dBm/4 (Q5.2). Negative gain means the |
@@ -58,7 +88,7 @@ struct ssb_sprom { | |||
58 | } ghz5; /* 5GHz band */ | 88 | } ghz5; /* 5GHz band */ |
59 | } antenna_gain; | 89 | } antenna_gain; |
60 | 90 | ||
61 | /* TODO - add any parameters needed from rev 2, 3, or 4 SPROMs */ | 91 | /* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */ |
62 | }; | 92 | }; |
63 | 93 | ||
64 | /* Information about the PCB the circuitry is soldered on. */ | 94 | /* Information about the PCB the circuitry is soldered on. */ |
@@ -208,6 +238,7 @@ enum ssb_bustype { | |||
208 | SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ | 238 | SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ |
209 | SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ | 239 | SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ |
210 | SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ | 240 | SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ |
241 | SSB_BUSTYPE_SDIO, /* SSB is connected to SDIO bus */ | ||
211 | }; | 242 | }; |
212 | 243 | ||
213 | /* board_vendor */ | 244 | /* board_vendor */ |
@@ -240,8 +271,12 @@ struct ssb_bus { | |||
240 | 271 | ||
241 | /* The core in the basic address register window. (PCI bus only) */ | 272 | /* The core in the basic address register window. (PCI bus only) */ |
242 | struct ssb_device *mapped_device; | 273 | struct ssb_device *mapped_device; |
243 | /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ | 274 | union { |
244 | u8 mapped_pcmcia_seg; | 275 | /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ |
276 | u8 mapped_pcmcia_seg; | ||
277 | /* Current SSB base address window for SDIO. */ | ||
278 | u32 sdio_sbaddr; | ||
279 | }; | ||
245 | /* Lock for core and segment switching. | 280 | /* Lock for core and segment switching. |
246 | * On PCMCIA-host busses this is used to protect the whole MMIO access. */ | 281 | * On PCMCIA-host busses this is used to protect the whole MMIO access. */ |
247 | spinlock_t bar_lock; | 282 | spinlock_t bar_lock; |
@@ -252,6 +287,11 @@ struct ssb_bus { | |||
252 | struct pci_dev *host_pci; | 287 | struct pci_dev *host_pci; |
253 | /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ | 288 | /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ |
254 | struct pcmcia_device *host_pcmcia; | 289 | struct pcmcia_device *host_pcmcia; |
290 | /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */ | ||
291 | struct sdio_func *host_sdio; | ||
292 | |||
293 | /* See enum ssb_quirks */ | ||
294 | unsigned int quirks; | ||
255 | 295 | ||
256 | #ifdef CONFIG_SSB_SPROM | 296 | #ifdef CONFIG_SSB_SPROM |
257 | /* Mutex to protect the SPROM writing. */ | 297 | /* Mutex to protect the SPROM writing. */ |
@@ -306,6 +346,11 @@ struct ssb_bus { | |||
306 | #endif /* DEBUG */ | 346 | #endif /* DEBUG */ |
307 | }; | 347 | }; |
308 | 348 | ||
349 | enum ssb_quirks { | ||
350 | /* SDIO connected card requires performing a read after writing a 32-bit value */ | ||
351 | SSB_QUIRK_SDIO_READ_AFTER_WRITE32 = (1 << 0), | ||
352 | }; | ||
353 | |||
309 | /* The initialization-invariants. */ | 354 | /* The initialization-invariants. */ |
310 | struct ssb_init_invariants { | 355 | struct ssb_init_invariants { |
311 | /* Versioning information about the PCB. */ | 356 | /* Versioning information about the PCB. */ |
@@ -336,6 +381,12 @@ extern int ssb_bus_pcmciabus_register(struct ssb_bus *bus, | |||
336 | struct pcmcia_device *pcmcia_dev, | 381 | struct pcmcia_device *pcmcia_dev, |
337 | unsigned long baseaddr); | 382 | unsigned long baseaddr); |
338 | #endif /* CONFIG_SSB_PCMCIAHOST */ | 383 | #endif /* CONFIG_SSB_PCMCIAHOST */ |
384 | #ifdef CONFIG_SSB_SDIOHOST | ||
385 | extern int ssb_bus_sdiobus_register(struct ssb_bus *bus, | ||
386 | struct sdio_func *sdio_func, | ||
387 | unsigned int quirks); | ||
388 | #endif /* CONFIG_SSB_SDIOHOST */ | ||
389 | |||
339 | 390 | ||
340 | extern void ssb_bus_unregister(struct ssb_bus *bus); | 391 | extern void ssb_bus_unregister(struct ssb_bus *bus); |
341 | 392 | ||
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index d3b1d18922f2..4e27acf0a92f 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
@@ -629,5 +629,15 @@ extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, | |||
629 | /* PMU support */ | 629 | /* PMU support */ |
630 | extern void ssb_pmu_init(struct ssb_chipcommon *cc); | 630 | extern void ssb_pmu_init(struct ssb_chipcommon *cc); |
631 | 631 | ||
632 | enum ssb_pmu_ldo_volt_id { | ||
633 | LDO_PAREF = 0, | ||
634 | LDO_VOLT1, | ||
635 | LDO_VOLT2, | ||
636 | LDO_VOLT3, | ||
637 | }; | ||
638 | |||
639 | void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, | ||
640 | enum ssb_pmu_ldo_volt_id id, u32 voltage); | ||
641 | void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); | ||
632 | 642 | ||
633 | #endif /* LINUX_SSB_CHIPCO_H_ */ | 643 | #endif /* LINUX_SSB_CHIPCO_H_ */ |
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index a01b982b5783..9ae9082eaeb4 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
@@ -162,7 +162,7 @@ | |||
162 | 162 | ||
163 | /* SPROM shadow area. If not otherwise noted, fields are | 163 | /* SPROM shadow area. If not otherwise noted, fields are |
164 | * two bytes wide. Note that the SPROM can _only_ be read | 164 | * two bytes wide. Note that the SPROM can _only_ be read |
165 | * in two-byte quantinies. | 165 | * in two-byte quantities. |
166 | */ | 166 | */ |
167 | #define SSB_SPROMSIZE_WORDS 64 | 167 | #define SSB_SPROMSIZE_WORDS 64 |
168 | #define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) | 168 | #define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) |
@@ -327,8 +327,11 @@ | |||
327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 | 327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 |
328 | 328 | ||
329 | /* SPROM Revision 8 */ | 329 | /* SPROM Revision 8 */ |
330 | #define SSB_SPROM8_BFLLO 0x1084 /* Boardflags (low 16 bits) */ | 330 | #define SSB_SPROM8_BOARDREV 0x1082 /* Board revision */ |
331 | #define SSB_SPROM8_BFLHI 0x1086 /* Boardflags Hi */ | 331 | #define SSB_SPROM8_BFLLO 0x1084 /* Board flags (bits 0-15) */ |
332 | #define SSB_SPROM8_BFLHI 0x1086 /* Board flags (bits 16-31) */ | ||
333 | #define SSB_SPROM8_BFL2LO 0x1088 /* Board flags (bits 32-47) */ | ||
334 | #define SSB_SPROM8_BFL2HI 0x108A /* Board flags (bits 48-63) */ | ||
332 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ | 335 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ |
333 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ | 336 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ |
334 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ | 337 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ |
@@ -354,14 +357,63 @@ | |||
354 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ | 357 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ |
355 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | 358 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ |
356 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | 359 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 |
357 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power BG in path 1 */ | 360 | #define SSB_SPROM8_RSSIPARM2G 0x10A4 /* RSSI params for 2GHz */ |
358 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ | 361 | #define SSB_SPROM8_RSSISMF2G 0x000F |
362 | #define SSB_SPROM8_RSSISMC2G 0x00F0 | ||
363 | #define SSB_SPROM8_RSSISMC2G_SHIFT 4 | ||
364 | #define SSB_SPROM8_RSSISAV2G 0x0700 | ||
365 | #define SSB_SPROM8_RSSISAV2G_SHIFT 8 | ||
366 | #define SSB_SPROM8_BXA2G 0x1800 | ||
367 | #define SSB_SPROM8_BXA2G_SHIFT 11 | ||
368 | #define SSB_SPROM8_RSSIPARM5G 0x10A6 /* RSSI params for 5GHz */ | ||
369 | #define SSB_SPROM8_RSSISMF5G 0x000F | ||
370 | #define SSB_SPROM8_RSSISMC5G 0x00F0 | ||
371 | #define SSB_SPROM8_RSSISMC5G_SHIFT 4 | ||
372 | #define SSB_SPROM8_RSSISAV5G 0x0700 | ||
373 | #define SSB_SPROM8_RSSISAV5G_SHIFT 8 | ||
374 | #define SSB_SPROM8_BXA5G 0x1800 | ||
375 | #define SSB_SPROM8_BXA5G_SHIFT 11 | ||
376 | #define SSB_SPROM8_TRI25G 0x10A8 /* TX isolation 2.4&5.3GHz */ | ||
377 | #define SSB_SPROM8_TRI2G 0x00FF /* TX isolation 2.4GHz */ | ||
378 | #define SSB_SPROM8_TRI5G 0xFF00 /* TX isolation 5.3GHz */ | ||
379 | #define SSB_SPROM8_TRI5G_SHIFT 8 | ||
380 | #define SSB_SPROM8_TRI5GHL 0x10AA /* TX isolation 5.2/5.8GHz */ | ||
381 | #define SSB_SPROM8_TRI5GL 0x00FF /* TX isolation 5.2GHz */ | ||
382 | #define SSB_SPROM8_TRI5GH 0xFF00 /* TX isolation 5.8GHz */ | ||
383 | #define SSB_SPROM8_TRI5GH_SHIFT 8 | ||
384 | #define SSB_SPROM8_RXPO 0x10AC /* RX power offsets */ | ||
385 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ | ||
386 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ | ||
387 | #define SSB_SPROM8_RXPO5G_SHIFT 8 | ||
388 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power 2GHz in path 1 */ | ||
389 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */ | ||
359 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ | 390 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ |
360 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 | 391 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 |
361 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power A in path 1 */ | 392 | #define SSB_SPROM8_PA0B0 0x10C2 /* 2GHz power amp settings */ |
362 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power A */ | 393 | #define SSB_SPROM8_PA0B1 0x10C4 |
394 | #define SSB_SPROM8_PA0B2 0x10C6 | ||
395 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power 5.3GHz */ | ||
396 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power 5.3GHz */ | ||
363 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ | 397 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ |
364 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 | 398 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 |
399 | #define SSB_SPROM8_MAXP_AHL 0x10CA /* Max Power 5.2/5.8GHz */ | ||
400 | #define SSB_SPROM8_MAXP_AH_MASK 0x00FF /* Mask for Max Power 5.8GHz */ | ||
401 | #define SSB_SPROM8_MAXP_AL_MASK 0xFF00 /* Mask for Max Power 5.2GHz */ | ||
402 | #define SSB_SPROM8_MAXP_AL_SHIFT 8 | ||
403 | #define SSB_SPROM8_PA1B0 0x10CC /* 5.3GHz power amp settings */ | ||
404 | #define SSB_SPROM8_PA1B1 0x10CE | ||
405 | #define SSB_SPROM8_PA1B2 0x10D0 | ||
406 | #define SSB_SPROM8_PA1LOB0 0x10D2 /* 5.2GHz power amp settings */ | ||
407 | #define SSB_SPROM8_PA1LOB1 0x10D4 | ||
408 | #define SSB_SPROM8_PA1LOB2 0x10D6 | ||
409 | #define SSB_SPROM8_PA1HIB0 0x10D8 /* 5.8GHz power amp settings */ | ||
410 | #define SSB_SPROM8_PA1HIB1 0x10DA | ||
411 | #define SSB_SPROM8_PA1HIB2 0x10DC | ||
412 | #define SSB_SPROM8_CCK2GPO 0x1140 /* CCK power offset */ | ||
413 | #define SSB_SPROM8_OFDM2GPO 0x1142 /* 2.4GHz OFDM power offset */ | ||
414 | #define SSB_SPROM8_OFDM5GPO 0x1146 /* 5.3GHz OFDM power offset */ | ||
415 | #define SSB_SPROM8_OFDM5GLPO 0x114A /* 5.2GHz OFDM power offset */ | ||
416 | #define SSB_SPROM8_OFDM5GHPO 0x114E /* 5.8GHz OFDM power offset */ | ||
365 | 417 | ||
366 | /* Values for SSB_SPROM1_BINF_CCODE */ | 418 | /* Values for SSB_SPROM1_BINF_CCODE */ |
367 | enum { | 419 | enum { |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 2d8b211b9324..6f52b4d7c447 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
@@ -59,6 +59,15 @@ struct cache_head { | |||
59 | 59 | ||
60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ | 60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ |
61 | 61 | ||
62 | struct cache_detail_procfs { | ||
63 | struct proc_dir_entry *proc_ent; | ||
64 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
65 | }; | ||
66 | |||
67 | struct cache_detail_pipefs { | ||
68 | struct dentry *dir; | ||
69 | }; | ||
70 | |||
62 | struct cache_detail { | 71 | struct cache_detail { |
63 | struct module * owner; | 72 | struct module * owner; |
64 | int hash_size; | 73 | int hash_size; |
@@ -70,15 +79,17 @@ struct cache_detail { | |||
70 | char *name; | 79 | char *name; |
71 | void (*cache_put)(struct kref *); | 80 | void (*cache_put)(struct kref *); |
72 | 81 | ||
73 | void (*cache_request)(struct cache_detail *cd, | 82 | int (*cache_upcall)(struct cache_detail *, |
74 | struct cache_head *h, | 83 | struct cache_head *); |
75 | char **bpp, int *blen); | 84 | |
76 | int (*cache_parse)(struct cache_detail *, | 85 | int (*cache_parse)(struct cache_detail *, |
77 | char *buf, int len); | 86 | char *buf, int len); |
78 | 87 | ||
79 | int (*cache_show)(struct seq_file *m, | 88 | int (*cache_show)(struct seq_file *m, |
80 | struct cache_detail *cd, | 89 | struct cache_detail *cd, |
81 | struct cache_head *h); | 90 | struct cache_head *h); |
91 | void (*warn_no_listener)(struct cache_detail *cd, | ||
92 | int has_died); | ||
82 | 93 | ||
83 | struct cache_head * (*alloc)(void); | 94 | struct cache_head * (*alloc)(void); |
84 | int (*match)(struct cache_head *orig, struct cache_head *new); | 95 | int (*match)(struct cache_head *orig, struct cache_head *new); |
@@ -96,13 +107,15 @@ struct cache_detail { | |||
96 | 107 | ||
97 | /* fields for communication over channel */ | 108 | /* fields for communication over channel */ |
98 | struct list_head queue; | 109 | struct list_head queue; |
99 | struct proc_dir_entry *proc_ent; | ||
100 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
101 | 110 | ||
102 | atomic_t readers; /* how many time is /chennel open */ | 111 | atomic_t readers; /* how many time is /chennel open */ |
103 | time_t last_close; /* if no readers, when did last close */ | 112 | time_t last_close; /* if no readers, when did last close */ |
104 | time_t last_warn; /* when we last warned about no readers */ | 113 | time_t last_warn; /* when we last warned about no readers */ |
105 | void (*warn_no_listener)(struct cache_detail *cd); | 114 | |
115 | union { | ||
116 | struct cache_detail_procfs procfs; | ||
117 | struct cache_detail_pipefs pipefs; | ||
118 | } u; | ||
106 | }; | 119 | }; |
107 | 120 | ||
108 | 121 | ||
@@ -127,6 +140,10 @@ struct cache_deferred_req { | |||
127 | }; | 140 | }; |
128 | 141 | ||
129 | 142 | ||
143 | extern const struct file_operations cache_file_operations_pipefs; | ||
144 | extern const struct file_operations content_file_operations_pipefs; | ||
145 | extern const struct file_operations cache_flush_operations_pipefs; | ||
146 | |||
130 | extern struct cache_head * | 147 | extern struct cache_head * |
131 | sunrpc_cache_lookup(struct cache_detail *detail, | 148 | sunrpc_cache_lookup(struct cache_detail *detail, |
132 | struct cache_head *key, int hash); | 149 | struct cache_head *key, int hash); |
@@ -134,6 +151,13 @@ extern struct cache_head * | |||
134 | sunrpc_cache_update(struct cache_detail *detail, | 151 | sunrpc_cache_update(struct cache_detail *detail, |
135 | struct cache_head *new, struct cache_head *old, int hash); | 152 | struct cache_head *new, struct cache_head *old, int hash); |
136 | 153 | ||
154 | extern int | ||
155 | sunrpc_cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h, | ||
156 | void (*cache_request)(struct cache_detail *, | ||
157 | struct cache_head *, | ||
158 | char **, | ||
159 | int *)); | ||
160 | |||
137 | 161 | ||
138 | extern void cache_clean_deferred(void *owner); | 162 | extern void cache_clean_deferred(void *owner); |
139 | 163 | ||
@@ -171,6 +195,10 @@ extern void cache_purge(struct cache_detail *detail); | |||
171 | extern int cache_register(struct cache_detail *cd); | 195 | extern int cache_register(struct cache_detail *cd); |
172 | extern void cache_unregister(struct cache_detail *cd); | 196 | extern void cache_unregister(struct cache_detail *cd); |
173 | 197 | ||
198 | extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *, | ||
199 | mode_t, struct cache_detail *); | ||
200 | extern void sunrpc_cache_unregister_pipefs(struct cache_detail *); | ||
201 | |||
174 | extern void qword_add(char **bpp, int *lp, char *str); | 202 | extern void qword_add(char **bpp, int *lp, char *str); |
175 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); | 203 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); |
176 | extern int qword_get(char **bpp, char *dest, int bufsize); | 204 | extern int qword_get(char **bpp, char *dest, int bufsize); |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 37881f1a0bd7..ab3f6e90caa5 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -9,6 +9,10 @@ | |||
9 | #ifndef _LINUX_SUNRPC_CLNT_H | 9 | #ifndef _LINUX_SUNRPC_CLNT_H |
10 | #define _LINUX_SUNRPC_CLNT_H | 10 | #define _LINUX_SUNRPC_CLNT_H |
11 | 11 | ||
12 | #include <linux/socket.h> | ||
13 | #include <linux/in.h> | ||
14 | #include <linux/in6.h> | ||
15 | |||
12 | #include <linux/sunrpc/msg_prot.h> | 16 | #include <linux/sunrpc/msg_prot.h> |
13 | #include <linux/sunrpc/sched.h> | 17 | #include <linux/sunrpc/sched.h> |
14 | #include <linux/sunrpc/xprt.h> | 18 | #include <linux/sunrpc/xprt.h> |
@@ -17,6 +21,7 @@ | |||
17 | #include <linux/sunrpc/xdr.h> | 21 | #include <linux/sunrpc/xdr.h> |
18 | #include <linux/sunrpc/timer.h> | 22 | #include <linux/sunrpc/timer.h> |
19 | #include <asm/signal.h> | 23 | #include <asm/signal.h> |
24 | #include <linux/path.h> | ||
20 | 25 | ||
21 | struct rpc_inode; | 26 | struct rpc_inode; |
22 | 27 | ||
@@ -50,9 +55,7 @@ struct rpc_clnt { | |||
50 | 55 | ||
51 | int cl_nodelen; /* nodename length */ | 56 | int cl_nodelen; /* nodename length */ |
52 | char cl_nodename[UNX_MAXNODENAME]; | 57 | char cl_nodename[UNX_MAXNODENAME]; |
53 | char cl_pathname[30];/* Path in rpc_pipe_fs */ | 58 | struct path cl_path; |
54 | struct vfsmount * cl_vfsmnt; | ||
55 | struct dentry * cl_dentry; /* inode */ | ||
56 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ | 59 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ |
57 | struct rpc_rtt cl_rtt_default; | 60 | struct rpc_rtt cl_rtt_default; |
58 | struct rpc_timeout cl_timeout_default; | 61 | struct rpc_timeout cl_timeout_default; |
@@ -151,5 +154,39 @@ void rpc_force_rebind(struct rpc_clnt *); | |||
151 | size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); | 154 | size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); |
152 | const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); | 155 | const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); |
153 | 156 | ||
157 | size_t rpc_ntop(const struct sockaddr *, char *, const size_t); | ||
158 | size_t rpc_pton(const char *, const size_t, | ||
159 | struct sockaddr *, const size_t); | ||
160 | char * rpc_sockaddr2uaddr(const struct sockaddr *); | ||
161 | size_t rpc_uaddr2sockaddr(const char *, const size_t, | ||
162 | struct sockaddr *, const size_t); | ||
163 | |||
164 | static inline unsigned short rpc_get_port(const struct sockaddr *sap) | ||
165 | { | ||
166 | switch (sap->sa_family) { | ||
167 | case AF_INET: | ||
168 | return ntohs(((struct sockaddr_in *)sap)->sin_port); | ||
169 | case AF_INET6: | ||
170 | return ntohs(((struct sockaddr_in6 *)sap)->sin6_port); | ||
171 | } | ||
172 | return 0; | ||
173 | } | ||
174 | |||
175 | static inline void rpc_set_port(struct sockaddr *sap, | ||
176 | const unsigned short port) | ||
177 | { | ||
178 | switch (sap->sa_family) { | ||
179 | case AF_INET: | ||
180 | ((struct sockaddr_in *)sap)->sin_port = htons(port); | ||
181 | break; | ||
182 | case AF_INET6: | ||
183 | ((struct sockaddr_in6 *)sap)->sin6_port = htons(port); | ||
184 | break; | ||
185 | } | ||
186 | } | ||
187 | |||
188 | #define IPV6_SCOPE_DELIMITER '%' | ||
189 | #define IPV6_SCOPE_ID_LEN sizeof("%nnnnnnnnnn") | ||
190 | |||
154 | #endif /* __KERNEL__ */ | 191 | #endif /* __KERNEL__ */ |
155 | #endif /* _LINUX_SUNRPC_CLNT_H */ | 192 | #endif /* _LINUX_SUNRPC_CLNT_H */ |
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 70df4f1d8847..77e624883393 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
@@ -189,7 +189,22 @@ typedef __be32 rpc_fraghdr; | |||
189 | * Additionally, the two alternative forms specified in Section 2.2 of | 189 | * Additionally, the two alternative forms specified in Section 2.2 of |
190 | * [RFC2373] are also acceptable. | 190 | * [RFC2373] are also acceptable. |
191 | */ | 191 | */ |
192 | #define RPCBIND_MAXUADDRLEN (56u) | 192 | |
193 | #include <linux/inet.h> | ||
194 | |||
195 | /* Maximum size of the port number part of a universal address */ | ||
196 | #define RPCBIND_MAXUADDRPLEN sizeof(".255.255") | ||
197 | |||
198 | /* Maximum size of an IPv4 universal address */ | ||
199 | #define RPCBIND_MAXUADDR4LEN \ | ||
200 | (INET_ADDRSTRLEN + RPCBIND_MAXUADDRPLEN) | ||
201 | |||
202 | /* Maximum size of an IPv6 universal address */ | ||
203 | #define RPCBIND_MAXUADDR6LEN \ | ||
204 | (INET6_ADDRSTRLEN + RPCBIND_MAXUADDRPLEN) | ||
205 | |||
206 | /* Assume INET6_ADDRSTRLEN will always be larger than INET_ADDRSTRLEN... */ | ||
207 | #define RPCBIND_MAXUADDRLEN RPCBIND_MAXUADDR6LEN | ||
193 | 208 | ||
194 | #endif /* __KERNEL__ */ | 209 | #endif /* __KERNEL__ */ |
195 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ | 210 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ |
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index cea764c2359f..cf14db975da0 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h | |||
@@ -3,6 +3,8 @@ | |||
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
6 | #include <linux/workqueue.h> | ||
7 | |||
6 | struct rpc_pipe_msg { | 8 | struct rpc_pipe_msg { |
7 | struct list_head list; | 9 | struct list_head list; |
8 | void *data; | 10 | void *data; |
@@ -32,8 +34,8 @@ struct rpc_inode { | |||
32 | wait_queue_head_t waitq; | 34 | wait_queue_head_t waitq; |
33 | #define RPC_PIPE_WAIT_FOR_OPEN 1 | 35 | #define RPC_PIPE_WAIT_FOR_OPEN 1 |
34 | int flags; | 36 | int flags; |
35 | struct rpc_pipe_ops *ops; | ||
36 | struct delayed_work queue_timeout; | 37 | struct delayed_work queue_timeout; |
38 | const struct rpc_pipe_ops *ops; | ||
37 | }; | 39 | }; |
38 | 40 | ||
39 | static inline struct rpc_inode * | 41 | static inline struct rpc_inode * |
@@ -44,9 +46,19 @@ RPC_I(struct inode *inode) | |||
44 | 46 | ||
45 | extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); | 47 | extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); |
46 | 48 | ||
47 | extern struct dentry *rpc_mkdir(char *, struct rpc_clnt *); | 49 | struct rpc_clnt; |
48 | extern int rpc_rmdir(struct dentry *); | 50 | extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *); |
49 | extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, struct rpc_pipe_ops *, int flags); | 51 | extern int rpc_remove_client_dir(struct dentry *); |
52 | |||
53 | struct cache_detail; | ||
54 | extern struct dentry *rpc_create_cache_dir(struct dentry *, | ||
55 | struct qstr *, | ||
56 | mode_t umode, | ||
57 | struct cache_detail *); | ||
58 | extern void rpc_remove_cache_dir(struct dentry *); | ||
59 | |||
60 | extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, | ||
61 | const struct rpc_pipe_ops *, int flags); | ||
50 | extern int rpc_unlink(struct dentry *); | 62 | extern int rpc_unlink(struct dentry *); |
51 | extern struct vfsmount *rpc_get_mount(void); | 63 | extern struct vfsmount *rpc_get_mount(void); |
52 | extern void rpc_put_mount(void); | 64 | extern void rpc_put_mount(void); |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index b99c625fddfe..7da466ba4b0d 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
@@ -117,17 +117,15 @@ static inline __be32 *xdr_encode_array(__be32 *p, const void *s, unsigned int le | |||
117 | static inline __be32 * | 117 | static inline __be32 * |
118 | xdr_encode_hyper(__be32 *p, __u64 val) | 118 | xdr_encode_hyper(__be32 *p, __u64 val) |
119 | { | 119 | { |
120 | *p++ = htonl(val >> 32); | 120 | *(__be64 *)p = cpu_to_be64(val); |
121 | *p++ = htonl(val & 0xFFFFFFFF); | 121 | return p + 2; |
122 | return p; | ||
123 | } | 122 | } |
124 | 123 | ||
125 | static inline __be32 * | 124 | static inline __be32 * |
126 | xdr_decode_hyper(__be32 *p, __u64 *valp) | 125 | xdr_decode_hyper(__be32 *p, __u64 *valp) |
127 | { | 126 | { |
128 | *valp = ((__u64) ntohl(*p++)) << 32; | 127 | *valp = be64_to_cpup((__be64 *)p); |
129 | *valp |= ntohl(*p++); | 128 | return p + 2; |
130 | return p; | ||
131 | } | 129 | } |
132 | 130 | ||
133 | /* | 131 | /* |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 1175d58efc2e..c090df442572 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -38,10 +38,8 @@ enum rpc_display_format_t { | |||
38 | RPC_DISPLAY_ADDR = 0, | 38 | RPC_DISPLAY_ADDR = 0, |
39 | RPC_DISPLAY_PORT, | 39 | RPC_DISPLAY_PORT, |
40 | RPC_DISPLAY_PROTO, | 40 | RPC_DISPLAY_PROTO, |
41 | RPC_DISPLAY_ALL, | ||
42 | RPC_DISPLAY_HEX_ADDR, | 41 | RPC_DISPLAY_HEX_ADDR, |
43 | RPC_DISPLAY_HEX_PORT, | 42 | RPC_DISPLAY_HEX_PORT, |
44 | RPC_DISPLAY_UNIVERSAL_ADDR, | ||
45 | RPC_DISPLAY_NETID, | 43 | RPC_DISPLAY_NETID, |
46 | RPC_DISPLAY_MAX, | 44 | RPC_DISPLAY_MAX, |
47 | }; | 45 | }; |
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index cb1a6631b8f4..73b1f1cec423 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h | |||
@@ -14,7 +14,6 @@ struct scatterlist; | |||
14 | */ | 14 | */ |
15 | #define IO_TLB_SEGSIZE 128 | 15 | #define IO_TLB_SEGSIZE 128 |
16 | 16 | ||
17 | |||
18 | /* | 17 | /* |
19 | * log of the size of each IO TLB slab. The number of slabs is command line | 18 | * log of the size of each IO TLB slab. The number of slabs is command line |
20 | * controllable. | 19 | * controllable. |
@@ -24,16 +23,6 @@ struct scatterlist; | |||
24 | extern void | 23 | extern void |
25 | swiotlb_init(void); | 24 | swiotlb_init(void); |
26 | 25 | ||
27 | extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs); | ||
28 | extern void *swiotlb_alloc(unsigned order, unsigned long nslabs); | ||
29 | |||
30 | extern dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, | ||
31 | phys_addr_t address); | ||
32 | extern phys_addr_t swiotlb_bus_to_phys(struct device *hwdev, | ||
33 | dma_addr_t address); | ||
34 | |||
35 | extern int swiotlb_arch_range_needs_mapping(phys_addr_t paddr, size_t size); | ||
36 | |||
37 | extern void | 26 | extern void |
38 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, | 27 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, |
39 | dma_addr_t *dma_handle, gfp_t flags); | 28 | dma_addr_t *dma_handle, gfp_t flags); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 80de7003d8c2..a8e37821cc60 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -64,6 +64,7 @@ struct perf_counter_attr; | |||
64 | #include <linux/sem.h> | 64 | #include <linux/sem.h> |
65 | #include <asm/siginfo.h> | 65 | #include <asm/siginfo.h> |
66 | #include <asm/signal.h> | 66 | #include <asm/signal.h> |
67 | #include <linux/unistd.h> | ||
67 | #include <linux/quota.h> | 68 | #include <linux/quota.h> |
68 | #include <linux/key.h> | 69 | #include <linux/key.h> |
69 | #include <trace/syscall.h> | 70 | #include <trace/syscall.h> |
@@ -97,6 +98,53 @@ struct perf_counter_attr; | |||
97 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) | 98 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
98 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) | 99 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
99 | 100 | ||
101 | #ifdef CONFIG_EVENT_PROFILE | ||
102 | #define TRACE_SYS_ENTER_PROFILE(sname) \ | ||
103 | static int prof_sysenter_enable_##sname(struct ftrace_event_call *event_call) \ | ||
104 | { \ | ||
105 | int ret = 0; \ | ||
106 | if (!atomic_inc_return(&event_enter_##sname.profile_count)) \ | ||
107 | ret = reg_prof_syscall_enter("sys"#sname); \ | ||
108 | return ret; \ | ||
109 | } \ | ||
110 | \ | ||
111 | static void prof_sysenter_disable_##sname(struct ftrace_event_call *event_call)\ | ||
112 | { \ | ||
113 | if (atomic_add_negative(-1, &event_enter_##sname.profile_count)) \ | ||
114 | unreg_prof_syscall_enter("sys"#sname); \ | ||
115 | } | ||
116 | |||
117 | #define TRACE_SYS_EXIT_PROFILE(sname) \ | ||
118 | static int prof_sysexit_enable_##sname(struct ftrace_event_call *event_call) \ | ||
119 | { \ | ||
120 | int ret = 0; \ | ||
121 | if (!atomic_inc_return(&event_exit_##sname.profile_count)) \ | ||
122 | ret = reg_prof_syscall_exit("sys"#sname); \ | ||
123 | return ret; \ | ||
124 | } \ | ||
125 | \ | ||
126 | static void prof_sysexit_disable_##sname(struct ftrace_event_call *event_call) \ | ||
127 | { \ | ||
128 | if (atomic_add_negative(-1, &event_exit_##sname.profile_count)) \ | ||
129 | unreg_prof_syscall_exit("sys"#sname); \ | ||
130 | } | ||
131 | |||
132 | #define TRACE_SYS_ENTER_PROFILE_INIT(sname) \ | ||
133 | .profile_count = ATOMIC_INIT(-1), \ | ||
134 | .profile_enable = prof_sysenter_enable_##sname, \ | ||
135 | .profile_disable = prof_sysenter_disable_##sname, | ||
136 | |||
137 | #define TRACE_SYS_EXIT_PROFILE_INIT(sname) \ | ||
138 | .profile_count = ATOMIC_INIT(-1), \ | ||
139 | .profile_enable = prof_sysexit_enable_##sname, \ | ||
140 | .profile_disable = prof_sysexit_disable_##sname, | ||
141 | #else | ||
142 | #define TRACE_SYS_ENTER_PROFILE(sname) | ||
143 | #define TRACE_SYS_ENTER_PROFILE_INIT(sname) | ||
144 | #define TRACE_SYS_EXIT_PROFILE(sname) | ||
145 | #define TRACE_SYS_EXIT_PROFILE_INIT(sname) | ||
146 | #endif | ||
147 | |||
100 | #ifdef CONFIG_FTRACE_SYSCALLS | 148 | #ifdef CONFIG_FTRACE_SYSCALLS |
101 | #define __SC_STR_ADECL1(t, a) #a | 149 | #define __SC_STR_ADECL1(t, a) #a |
102 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) | 150 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) |
@@ -112,7 +160,81 @@ struct perf_counter_attr; | |||
112 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) | 160 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) |
113 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) | 161 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) |
114 | 162 | ||
163 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | ||
164 | static struct ftrace_event_call event_enter_##sname; \ | ||
165 | struct trace_event enter_syscall_print_##sname = { \ | ||
166 | .trace = print_syscall_enter, \ | ||
167 | }; \ | ||
168 | static int init_enter_##sname(void) \ | ||
169 | { \ | ||
170 | int num, id; \ | ||
171 | num = syscall_name_to_nr("sys"#sname); \ | ||
172 | if (num < 0) \ | ||
173 | return -ENOSYS; \ | ||
174 | id = register_ftrace_event(&enter_syscall_print_##sname);\ | ||
175 | if (!id) \ | ||
176 | return -ENODEV; \ | ||
177 | event_enter_##sname.id = id; \ | ||
178 | set_syscall_enter_id(num, id); \ | ||
179 | INIT_LIST_HEAD(&event_enter_##sname.fields); \ | ||
180 | return 0; \ | ||
181 | } \ | ||
182 | TRACE_SYS_ENTER_PROFILE(sname); \ | ||
183 | static struct ftrace_event_call __used \ | ||
184 | __attribute__((__aligned__(4))) \ | ||
185 | __attribute__((section("_ftrace_events"))) \ | ||
186 | event_enter_##sname = { \ | ||
187 | .name = "sys_enter"#sname, \ | ||
188 | .system = "syscalls", \ | ||
189 | .event = &event_syscall_enter, \ | ||
190 | .raw_init = init_enter_##sname, \ | ||
191 | .show_format = syscall_enter_format, \ | ||
192 | .define_fields = syscall_enter_define_fields, \ | ||
193 | .regfunc = reg_event_syscall_enter, \ | ||
194 | .unregfunc = unreg_event_syscall_enter, \ | ||
195 | .data = "sys"#sname, \ | ||
196 | TRACE_SYS_ENTER_PROFILE_INIT(sname) \ | ||
197 | } | ||
198 | |||
199 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ | ||
200 | static struct ftrace_event_call event_exit_##sname; \ | ||
201 | struct trace_event exit_syscall_print_##sname = { \ | ||
202 | .trace = print_syscall_exit, \ | ||
203 | }; \ | ||
204 | static int init_exit_##sname(void) \ | ||
205 | { \ | ||
206 | int num, id; \ | ||
207 | num = syscall_name_to_nr("sys"#sname); \ | ||
208 | if (num < 0) \ | ||
209 | return -ENOSYS; \ | ||
210 | id = register_ftrace_event(&exit_syscall_print_##sname);\ | ||
211 | if (!id) \ | ||
212 | return -ENODEV; \ | ||
213 | event_exit_##sname.id = id; \ | ||
214 | set_syscall_exit_id(num, id); \ | ||
215 | INIT_LIST_HEAD(&event_exit_##sname.fields); \ | ||
216 | return 0; \ | ||
217 | } \ | ||
218 | TRACE_SYS_EXIT_PROFILE(sname); \ | ||
219 | static struct ftrace_event_call __used \ | ||
220 | __attribute__((__aligned__(4))) \ | ||
221 | __attribute__((section("_ftrace_events"))) \ | ||
222 | event_exit_##sname = { \ | ||
223 | .name = "sys_exit"#sname, \ | ||
224 | .system = "syscalls", \ | ||
225 | .event = &event_syscall_exit, \ | ||
226 | .raw_init = init_exit_##sname, \ | ||
227 | .show_format = syscall_exit_format, \ | ||
228 | .define_fields = syscall_exit_define_fields, \ | ||
229 | .regfunc = reg_event_syscall_exit, \ | ||
230 | .unregfunc = unreg_event_syscall_exit, \ | ||
231 | .data = "sys"#sname, \ | ||
232 | TRACE_SYS_EXIT_PROFILE_INIT(sname) \ | ||
233 | } | ||
234 | |||
115 | #define SYSCALL_METADATA(sname, nb) \ | 235 | #define SYSCALL_METADATA(sname, nb) \ |
236 | SYSCALL_TRACE_ENTER_EVENT(sname); \ | ||
237 | SYSCALL_TRACE_EXIT_EVENT(sname); \ | ||
116 | static const struct syscall_metadata __used \ | 238 | static const struct syscall_metadata __used \ |
117 | __attribute__((__aligned__(4))) \ | 239 | __attribute__((__aligned__(4))) \ |
118 | __attribute__((section("__syscalls_metadata"))) \ | 240 | __attribute__((section("__syscalls_metadata"))) \ |
@@ -121,18 +243,23 @@ struct perf_counter_attr; | |||
121 | .nb_args = nb, \ | 243 | .nb_args = nb, \ |
122 | .types = types_##sname, \ | 244 | .types = types_##sname, \ |
123 | .args = args_##sname, \ | 245 | .args = args_##sname, \ |
124 | } | 246 | .enter_event = &event_enter_##sname, \ |
247 | .exit_event = &event_exit_##sname, \ | ||
248 | }; | ||
125 | 249 | ||
126 | #define SYSCALL_DEFINE0(sname) \ | 250 | #define SYSCALL_DEFINE0(sname) \ |
251 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ | ||
252 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ | ||
127 | static const struct syscall_metadata __used \ | 253 | static const struct syscall_metadata __used \ |
128 | __attribute__((__aligned__(4))) \ | 254 | __attribute__((__aligned__(4))) \ |
129 | __attribute__((section("__syscalls_metadata"))) \ | 255 | __attribute__((section("__syscalls_metadata"))) \ |
130 | __syscall_meta_##sname = { \ | 256 | __syscall_meta_##sname = { \ |
131 | .name = "sys_"#sname, \ | 257 | .name = "sys_"#sname, \ |
132 | .nb_args = 0, \ | 258 | .nb_args = 0, \ |
259 | .enter_event = &event_enter__##sname, \ | ||
260 | .exit_event = &event_exit__##sname, \ | ||
133 | }; \ | 261 | }; \ |
134 | asmlinkage long sys_##sname(void) | 262 | asmlinkage long sys_##sname(void) |
135 | |||
136 | #else | 263 | #else |
137 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) | 264 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
138 | #endif | 265 | #endif |
diff --git a/include/linux/tboot.h b/include/linux/tboot.h new file mode 100644 index 000000000000..bf2a0c748878 --- /dev/null +++ b/include/linux/tboot.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * tboot.h: shared data structure with tboot and kernel and functions | ||
3 | * used by kernel for runtime support of Intel(R) Trusted | ||
4 | * Execution Technology | ||
5 | * | ||
6 | * Copyright (c) 2006-2009, Intel Corporation | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms and conditions of the GNU General Public License, | ||
10 | * version 2, as published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
15 | * more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License along with | ||
18 | * this program; if not, write to the Free Software Foundation, Inc., | ||
19 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
20 | * | ||
21 | */ | ||
22 | |||
23 | #ifndef _LINUX_TBOOT_H | ||
24 | #define _LINUX_TBOOT_H | ||
25 | |||
26 | /* these must have the values from 0-5 in this order */ | ||
27 | enum { | ||
28 | TB_SHUTDOWN_REBOOT = 0, | ||
29 | TB_SHUTDOWN_S5, | ||
30 | TB_SHUTDOWN_S4, | ||
31 | TB_SHUTDOWN_S3, | ||
32 | TB_SHUTDOWN_HALT, | ||
33 | TB_SHUTDOWN_WFS | ||
34 | }; | ||
35 | |||
36 | #ifdef CONFIG_INTEL_TXT | ||
37 | #include <acpi/acpi.h> | ||
38 | /* used to communicate between tboot and the launched kernel */ | ||
39 | |||
40 | #define TB_KEY_SIZE 64 /* 512 bits */ | ||
41 | |||
42 | #define MAX_TB_MAC_REGIONS 32 | ||
43 | |||
44 | struct tboot_mac_region { | ||
45 | u64 start; /* must be 64 byte -aligned */ | ||
46 | u32 size; /* must be 64 byte -granular */ | ||
47 | } __packed; | ||
48 | |||
49 | /* GAS - Generic Address Structure (ACPI 2.0+) */ | ||
50 | struct tboot_acpi_generic_address { | ||
51 | u8 space_id; | ||
52 | u8 bit_width; | ||
53 | u8 bit_offset; | ||
54 | u8 access_width; | ||
55 | u64 address; | ||
56 | } __packed; | ||
57 | |||
58 | /* | ||
59 | * combines Sx info from FADT and FACS tables per ACPI 2.0+ spec | ||
60 | * (http://www.acpi.info/) | ||
61 | */ | ||
62 | struct tboot_acpi_sleep_info { | ||
63 | struct tboot_acpi_generic_address pm1a_cnt_blk; | ||
64 | struct tboot_acpi_generic_address pm1b_cnt_blk; | ||
65 | struct tboot_acpi_generic_address pm1a_evt_blk; | ||
66 | struct tboot_acpi_generic_address pm1b_evt_blk; | ||
67 | u16 pm1a_cnt_val; | ||
68 | u16 pm1b_cnt_val; | ||
69 | u64 wakeup_vector; | ||
70 | u32 vector_width; | ||
71 | u64 kernel_s3_resume_vector; | ||
72 | } __packed; | ||
73 | |||
74 | /* | ||
75 | * shared memory page used for communication between tboot and kernel | ||
76 | */ | ||
77 | struct tboot { | ||
78 | /* | ||
79 | * version 3+ fields: | ||
80 | */ | ||
81 | |||
82 | /* TBOOT_UUID */ | ||
83 | u8 uuid[16]; | ||
84 | |||
85 | /* version number: 5 is current */ | ||
86 | u32 version; | ||
87 | |||
88 | /* physical addr of tb_log_t log */ | ||
89 | u32 log_addr; | ||
90 | |||
91 | /* | ||
92 | * physical addr of entry point for tboot shutdown and | ||
93 | * type of shutdown (TB_SHUTDOWN_*) being requested | ||
94 | */ | ||
95 | u32 shutdown_entry; | ||
96 | u32 shutdown_type; | ||
97 | |||
98 | /* kernel-specified ACPI info for Sx shutdown */ | ||
99 | struct tboot_acpi_sleep_info acpi_sinfo; | ||
100 | |||
101 | /* tboot location in memory (physical) */ | ||
102 | u32 tboot_base; | ||
103 | u32 tboot_size; | ||
104 | |||
105 | /* memory regions (phys addrs) for tboot to MAC on S3 */ | ||
106 | u8 num_mac_regions; | ||
107 | struct tboot_mac_region mac_regions[MAX_TB_MAC_REGIONS]; | ||
108 | |||
109 | |||
110 | /* | ||
111 | * version 4+ fields: | ||
112 | */ | ||
113 | |||
114 | /* symmetric key for use by kernel; will be encrypted on S3 */ | ||
115 | u8 s3_key[TB_KEY_SIZE]; | ||
116 | |||
117 | |||
118 | /* | ||
119 | * version 5+ fields: | ||
120 | */ | ||
121 | |||
122 | /* used to 4byte-align num_in_wfs */ | ||
123 | u8 reserved_align[3]; | ||
124 | |||
125 | /* number of processors in wait-for-SIPI */ | ||
126 | u32 num_in_wfs; | ||
127 | } __packed; | ||
128 | |||
129 | /* | ||
130 | * UUID for tboot data struct to facilitate matching | ||
131 | * defined as {663C8DFF-E8B3-4b82-AABF-19EA4D057A08} by tboot, which is | ||
132 | * represented as {} in the char array used here | ||
133 | */ | ||
134 | #define TBOOT_UUID {0xff, 0x8d, 0x3c, 0x66, 0xb3, 0xe8, 0x82, 0x4b, 0xbf,\ | ||
135 | 0xaa, 0x19, 0xea, 0x4d, 0x5, 0x7a, 0x8} | ||
136 | |||
137 | extern struct tboot *tboot; | ||
138 | |||
139 | static inline int tboot_enabled(void) | ||
140 | { | ||
141 | return tboot != NULL; | ||
142 | } | ||
143 | |||
144 | extern void tboot_probe(void); | ||
145 | extern void tboot_shutdown(u32 shutdown_type); | ||
146 | extern void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control); | ||
147 | extern struct acpi_table_header *tboot_get_dmar_table( | ||
148 | struct acpi_table_header *dmar_tbl); | ||
149 | extern int tboot_force_iommu(void); | ||
150 | |||
151 | #else | ||
152 | |||
153 | #define tboot_probe() do { } while (0) | ||
154 | #define tboot_shutdown(shutdown_type) do { } while (0) | ||
155 | #define tboot_sleep(sleep_state, pm1a_control, pm1b_control) \ | ||
156 | do { } while (0) | ||
157 | #define tboot_get_dmar_table(dmar_tbl) (dmar_tbl) | ||
158 | #define tboot_force_iommu() 0 | ||
159 | |||
160 | #endif /* !CONFIG_INTEL_TXT */ | ||
161 | |||
162 | #endif /* _LINUX_TBOOT_H */ | ||
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 8afac76cd748..61723a7c21fe 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -233,7 +233,7 @@ struct tcp_request_sock { | |||
233 | struct inet_request_sock req; | 233 | struct inet_request_sock req; |
234 | #ifdef CONFIG_TCP_MD5SIG | 234 | #ifdef CONFIG_TCP_MD5SIG |
235 | /* Only used by TCP MD5 Signature so far. */ | 235 | /* Only used by TCP MD5 Signature so far. */ |
236 | struct tcp_request_sock_ops *af_specific; | 236 | const struct tcp_request_sock_ops *af_specific; |
237 | #endif | 237 | #endif |
238 | u32 rcv_isn; | 238 | u32 rcv_isn; |
239 | u32 snt_isn; | 239 | u32 snt_isn; |
@@ -401,9 +401,9 @@ struct tcp_sock { | |||
401 | 401 | ||
402 | #ifdef CONFIG_TCP_MD5SIG | 402 | #ifdef CONFIG_TCP_MD5SIG |
403 | /* TCP AF-Specific parts; only used by MD5 Signature support so far */ | 403 | /* TCP AF-Specific parts; only used by MD5 Signature support so far */ |
404 | struct tcp_sock_af_ops *af_specific; | 404 | const struct tcp_sock_af_ops *af_specific; |
405 | 405 | ||
406 | /* TCP MD5 Signagure Option information */ | 406 | /* TCP MD5 Signature Option information */ |
407 | struct tcp_md5sig_info *md5sig_info; | 407 | struct tcp_md5sig_info *md5sig_info; |
408 | #endif | 408 | #endif |
409 | }; | 409 | }; |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index bea469455a0c..3d92396639de 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
@@ -209,5 +209,7 @@ struct sockaddr_tipc { | |||
209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ | 209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ |
210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ | 210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ |
211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ | 211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ |
212 | #define TIPC_NODE_RECVQ_DEPTH 131 /* Default: none (read only) */ | ||
213 | #define TIPC_SOCK_RECVQ_DEPTH 132 /* Default: none (read only) */ | ||
212 | 214 | ||
213 | #endif | 215 | #endif |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 7402c1a27c4f..85e8cf7d393c 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
@@ -85,20 +85,29 @@ int arch_update_cpu_topology(void); | |||
85 | #define ARCH_HAS_SCHED_WAKE_IDLE | 85 | #define ARCH_HAS_SCHED_WAKE_IDLE |
86 | /* Common values for SMT siblings */ | 86 | /* Common values for SMT siblings */ |
87 | #ifndef SD_SIBLING_INIT | 87 | #ifndef SD_SIBLING_INIT |
88 | #define SD_SIBLING_INIT (struct sched_domain) { \ | 88 | #define SD_SIBLING_INIT (struct sched_domain) { \ |
89 | .min_interval = 1, \ | 89 | .min_interval = 1, \ |
90 | .max_interval = 2, \ | 90 | .max_interval = 2, \ |
91 | .busy_factor = 64, \ | 91 | .busy_factor = 64, \ |
92 | .imbalance_pct = 110, \ | 92 | .imbalance_pct = 110, \ |
93 | .flags = SD_LOAD_BALANCE \ | 93 | \ |
94 | | SD_BALANCE_NEWIDLE \ | 94 | .flags = 1*SD_LOAD_BALANCE \ |
95 | | SD_BALANCE_FORK \ | 95 | | 1*SD_BALANCE_NEWIDLE \ |
96 | | SD_BALANCE_EXEC \ | 96 | | 1*SD_BALANCE_EXEC \ |
97 | | SD_WAKE_AFFINE \ | 97 | | 1*SD_BALANCE_FORK \ |
98 | | SD_WAKE_BALANCE \ | 98 | | 0*SD_WAKE_IDLE \ |
99 | | SD_SHARE_CPUPOWER, \ | 99 | | 1*SD_WAKE_AFFINE \ |
100 | .last_balance = jiffies, \ | 100 | | 1*SD_WAKE_BALANCE \ |
101 | .balance_interval = 1, \ | 101 | | 1*SD_SHARE_CPUPOWER \ |
102 | | 0*SD_POWERSAVINGS_BALANCE \ | ||
103 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
104 | | 0*SD_SERIALIZE \ | ||
105 | | 0*SD_WAKE_IDLE_FAR \ | ||
106 | | 0*SD_PREFER_SIBLING \ | ||
107 | , \ | ||
108 | .last_balance = jiffies, \ | ||
109 | .balance_interval = 1, \ | ||
110 | .smt_gain = 1178, /* 15% */ \ | ||
102 | } | 111 | } |
103 | #endif | 112 | #endif |
104 | #endif /* CONFIG_SCHED_SMT */ | 113 | #endif /* CONFIG_SCHED_SMT */ |
@@ -106,69 +115,94 @@ int arch_update_cpu_topology(void); | |||
106 | #ifdef CONFIG_SCHED_MC | 115 | #ifdef CONFIG_SCHED_MC |
107 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ | 116 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ |
108 | #ifndef SD_MC_INIT | 117 | #ifndef SD_MC_INIT |
109 | #define SD_MC_INIT (struct sched_domain) { \ | 118 | #define SD_MC_INIT (struct sched_domain) { \ |
110 | .min_interval = 1, \ | 119 | .min_interval = 1, \ |
111 | .max_interval = 4, \ | 120 | .max_interval = 4, \ |
112 | .busy_factor = 64, \ | 121 | .busy_factor = 64, \ |
113 | .imbalance_pct = 125, \ | 122 | .imbalance_pct = 125, \ |
114 | .cache_nice_tries = 1, \ | 123 | .cache_nice_tries = 1, \ |
115 | .busy_idx = 2, \ | 124 | .busy_idx = 2, \ |
116 | .wake_idx = 1, \ | 125 | .wake_idx = 1, \ |
117 | .forkexec_idx = 1, \ | 126 | .forkexec_idx = 1, \ |
118 | .flags = SD_LOAD_BALANCE \ | 127 | \ |
119 | | SD_BALANCE_FORK \ | 128 | .flags = 1*SD_LOAD_BALANCE \ |
120 | | SD_BALANCE_EXEC \ | 129 | | 1*SD_BALANCE_NEWIDLE \ |
121 | | SD_WAKE_AFFINE \ | 130 | | 1*SD_BALANCE_EXEC \ |
122 | | SD_WAKE_BALANCE \ | 131 | | 1*SD_BALANCE_FORK \ |
123 | | SD_SHARE_PKG_RESOURCES\ | 132 | | 1*SD_WAKE_IDLE \ |
124 | | sd_balance_for_mc_power()\ | 133 | | 1*SD_WAKE_AFFINE \ |
125 | | sd_power_saving_flags(),\ | 134 | | 1*SD_WAKE_BALANCE \ |
126 | .last_balance = jiffies, \ | 135 | | 0*SD_SHARE_CPUPOWER \ |
127 | .balance_interval = 1, \ | 136 | | 1*SD_SHARE_PKG_RESOURCES \ |
137 | | 0*SD_SERIALIZE \ | ||
138 | | 0*SD_WAKE_IDLE_FAR \ | ||
139 | | sd_balance_for_mc_power() \ | ||
140 | | sd_power_saving_flags() \ | ||
141 | , \ | ||
142 | .last_balance = jiffies, \ | ||
143 | .balance_interval = 1, \ | ||
128 | } | 144 | } |
129 | #endif | 145 | #endif |
130 | #endif /* CONFIG_SCHED_MC */ | 146 | #endif /* CONFIG_SCHED_MC */ |
131 | 147 | ||
132 | /* Common values for CPUs */ | 148 | /* Common values for CPUs */ |
133 | #ifndef SD_CPU_INIT | 149 | #ifndef SD_CPU_INIT |
134 | #define SD_CPU_INIT (struct sched_domain) { \ | 150 | #define SD_CPU_INIT (struct sched_domain) { \ |
135 | .min_interval = 1, \ | 151 | .min_interval = 1, \ |
136 | .max_interval = 4, \ | 152 | .max_interval = 4, \ |
137 | .busy_factor = 64, \ | 153 | .busy_factor = 64, \ |
138 | .imbalance_pct = 125, \ | 154 | .imbalance_pct = 125, \ |
139 | .cache_nice_tries = 1, \ | 155 | .cache_nice_tries = 1, \ |
140 | .busy_idx = 2, \ | 156 | .busy_idx = 2, \ |
141 | .idle_idx = 1, \ | 157 | .idle_idx = 1, \ |
142 | .newidle_idx = 2, \ | 158 | .newidle_idx = 2, \ |
143 | .wake_idx = 1, \ | 159 | .wake_idx = 1, \ |
144 | .forkexec_idx = 1, \ | 160 | .forkexec_idx = 1, \ |
145 | .flags = SD_LOAD_BALANCE \ | 161 | \ |
146 | | SD_BALANCE_EXEC \ | 162 | .flags = 1*SD_LOAD_BALANCE \ |
147 | | SD_BALANCE_FORK \ | 163 | | 1*SD_BALANCE_NEWIDLE \ |
148 | | SD_WAKE_AFFINE \ | 164 | | 1*SD_BALANCE_EXEC \ |
149 | | SD_WAKE_BALANCE \ | 165 | | 1*SD_BALANCE_FORK \ |
150 | | sd_balance_for_package_power()\ | 166 | | 1*SD_WAKE_IDLE \ |
151 | | sd_power_saving_flags(),\ | 167 | | 0*SD_WAKE_AFFINE \ |
152 | .last_balance = jiffies, \ | 168 | | 1*SD_WAKE_BALANCE \ |
153 | .balance_interval = 1, \ | 169 | | 0*SD_SHARE_CPUPOWER \ |
170 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
171 | | 0*SD_SERIALIZE \ | ||
172 | | 0*SD_WAKE_IDLE_FAR \ | ||
173 | | sd_balance_for_package_power() \ | ||
174 | | sd_power_saving_flags() \ | ||
175 | , \ | ||
176 | .last_balance = jiffies, \ | ||
177 | .balance_interval = 1, \ | ||
154 | } | 178 | } |
155 | #endif | 179 | #endif |
156 | 180 | ||
157 | /* sched_domains SD_ALLNODES_INIT for NUMA machines */ | 181 | /* sched_domains SD_ALLNODES_INIT for NUMA machines */ |
158 | #define SD_ALLNODES_INIT (struct sched_domain) { \ | 182 | #define SD_ALLNODES_INIT (struct sched_domain) { \ |
159 | .min_interval = 64, \ | 183 | .min_interval = 64, \ |
160 | .max_interval = 64*num_online_cpus(), \ | 184 | .max_interval = 64*num_online_cpus(), \ |
161 | .busy_factor = 128, \ | 185 | .busy_factor = 128, \ |
162 | .imbalance_pct = 133, \ | 186 | .imbalance_pct = 133, \ |
163 | .cache_nice_tries = 1, \ | 187 | .cache_nice_tries = 1, \ |
164 | .busy_idx = 3, \ | 188 | .busy_idx = 3, \ |
165 | .idle_idx = 3, \ | 189 | .idle_idx = 3, \ |
166 | .flags = SD_LOAD_BALANCE \ | 190 | .flags = 1*SD_LOAD_BALANCE \ |
167 | | SD_BALANCE_NEWIDLE \ | 191 | | 1*SD_BALANCE_NEWIDLE \ |
168 | | SD_WAKE_AFFINE \ | 192 | | 0*SD_BALANCE_EXEC \ |
169 | | SD_SERIALIZE, \ | 193 | | 0*SD_BALANCE_FORK \ |
170 | .last_balance = jiffies, \ | 194 | | 0*SD_WAKE_IDLE \ |
171 | .balance_interval = 64, \ | 195 | | 1*SD_WAKE_AFFINE \ |
196 | | 0*SD_WAKE_BALANCE \ | ||
197 | | 0*SD_SHARE_CPUPOWER \ | ||
198 | | 0*SD_POWERSAVINGS_BALANCE \ | ||
199 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
200 | | 1*SD_SERIALIZE \ | ||
201 | | 1*SD_WAKE_IDLE_FAR \ | ||
202 | | 0*SD_PREFER_SIBLING \ | ||
203 | , \ | ||
204 | .last_balance = jiffies, \ | ||
205 | .balance_interval = 64, \ | ||
172 | } | 206 | } |
173 | 207 | ||
174 | #ifdef CONFIG_NUMA | 208 | #ifdef CONFIG_NUMA |
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index b9dc4ca0246f..63a3f7a80580 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
@@ -23,6 +23,8 @@ struct tracepoint; | |||
23 | struct tracepoint { | 23 | struct tracepoint { |
24 | const char *name; /* Tracepoint name */ | 24 | const char *name; /* Tracepoint name */ |
25 | int state; /* State. */ | 25 | int state; /* State. */ |
26 | void (*regfunc)(void); | ||
27 | void (*unregfunc)(void); | ||
26 | void **funcs; | 28 | void **funcs; |
27 | } __attribute__((aligned(32))); /* | 29 | } __attribute__((aligned(32))); /* |
28 | * Aligned on 32 bytes because it is | 30 | * Aligned on 32 bytes because it is |
@@ -78,12 +80,16 @@ struct tracepoint { | |||
78 | return tracepoint_probe_unregister(#name, (void *)probe);\ | 80 | return tracepoint_probe_unregister(#name, (void *)probe);\ |
79 | } | 81 | } |
80 | 82 | ||
81 | #define DEFINE_TRACE(name) \ | 83 | |
84 | #define DEFINE_TRACE_FN(name, reg, unreg) \ | ||
82 | static const char __tpstrtab_##name[] \ | 85 | static const char __tpstrtab_##name[] \ |
83 | __attribute__((section("__tracepoints_strings"))) = #name; \ | 86 | __attribute__((section("__tracepoints_strings"))) = #name; \ |
84 | struct tracepoint __tracepoint_##name \ | 87 | struct tracepoint __tracepoint_##name \ |
85 | __attribute__((section("__tracepoints"), aligned(32))) = \ | 88 | __attribute__((section("__tracepoints"), aligned(32))) = \ |
86 | { __tpstrtab_##name, 0, NULL } | 89 | { __tpstrtab_##name, 0, reg, unreg, NULL } |
90 | |||
91 | #define DEFINE_TRACE(name) \ | ||
92 | DEFINE_TRACE_FN(name, NULL, NULL); | ||
87 | 93 | ||
88 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ | 94 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ |
89 | EXPORT_SYMBOL_GPL(__tracepoint_##name) | 95 | EXPORT_SYMBOL_GPL(__tracepoint_##name) |
@@ -108,6 +114,7 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, | |||
108 | return -ENOSYS; \ | 114 | return -ENOSYS; \ |
109 | } | 115 | } |
110 | 116 | ||
117 | #define DEFINE_TRACE_FN(name, reg, unreg) | ||
111 | #define DEFINE_TRACE(name) | 118 | #define DEFINE_TRACE(name) |
112 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) | 119 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) |
113 | #define EXPORT_TRACEPOINT_SYMBOL(name) | 120 | #define EXPORT_TRACEPOINT_SYMBOL(name) |
@@ -158,6 +165,15 @@ static inline void tracepoint_synchronize_unregister(void) | |||
158 | 165 | ||
159 | #define PARAMS(args...) args | 166 | #define PARAMS(args...) args |
160 | 167 | ||
168 | #endif /* _LINUX_TRACEPOINT_H */ | ||
169 | |||
170 | /* | ||
171 | * Note: we keep the TRACE_EVENT outside the include file ifdef protection. | ||
172 | * This is due to the way trace events work. If a file includes two | ||
173 | * trace event headers under one "CREATE_TRACE_POINTS" the first include | ||
174 | * will override the TRACE_EVENT and break the second include. | ||
175 | */ | ||
176 | |||
161 | #ifndef TRACE_EVENT | 177 | #ifndef TRACE_EVENT |
162 | /* | 178 | /* |
163 | * For use with the TRACE_EVENT macro: | 179 | * For use with the TRACE_EVENT macro: |
@@ -259,10 +275,15 @@ static inline void tracepoint_synchronize_unregister(void) | |||
259 | * can also by used by generic instrumentation like SystemTap), and | 275 | * can also by used by generic instrumentation like SystemTap), and |
260 | * it is also used to expose a structured trace record in | 276 | * it is also used to expose a structured trace record in |
261 | * /sys/kernel/debug/tracing/events/. | 277 | * /sys/kernel/debug/tracing/events/. |
278 | * | ||
279 | * A set of (un)registration functions can be passed to the variant | ||
280 | * TRACE_EVENT_FN to perform any (un)registration work. | ||
262 | */ | 281 | */ |
263 | 282 | ||
264 | #define TRACE_EVENT(name, proto, args, struct, assign, print) \ | 283 | #define TRACE_EVENT(name, proto, args, struct, assign, print) \ |
265 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | 284 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) |
266 | #endif | 285 | #define TRACE_EVENT_FN(name, proto, args, struct, \ |
286 | assign, print, reg, unreg) \ | ||
287 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | ||
267 | 288 | ||
268 | #endif | 289 | #endif /* ifdef TRACE_EVENT (see note above) */ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index e8c6c9136c97..a916a318004e 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 19 | 26 | #define NR_LDISCS 20 |
27 | 27 | ||
28 | /* line disciplines */ | 28 | /* line disciplines */ |
29 | #define N_TTY 0 | 29 | #define N_TTY 0 |
@@ -47,6 +47,8 @@ | |||
47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ | 47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ |
48 | #define N_PPS 18 /* Pulse per Second */ | 48 | #define N_PPS 18 /* Pulse per Second */ |
49 | 49 | ||
50 | #define N_V253 19 /* Codec control over voice modem */ | ||
51 | |||
50 | /* | 52 | /* |
51 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 53 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
52 | * a c_cc[] character, but indicates that a particular special character | 54 | * a c_cc[] character, but indicates that a particular special character |
@@ -517,10 +519,6 @@ extern void serial_console_init(void); | |||
517 | 519 | ||
518 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); | 520 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); |
519 | 521 | ||
520 | /* printk.c */ | ||
521 | |||
522 | extern void console_print(const char *); | ||
523 | |||
524 | /* vt.c */ | 522 | /* vt.c */ |
525 | 523 | ||
526 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, | 524 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, |
diff --git a/include/linux/ucb1400.h b/include/linux/ucb1400.h index ed889f4168f3..ae779bb8cc0f 100644 --- a/include/linux/ucb1400.h +++ b/include/linux/ucb1400.h | |||
@@ -73,6 +73,10 @@ | |||
73 | 73 | ||
74 | #define UCB_ADC_DATA 0x68 | 74 | #define UCB_ADC_DATA 0x68 |
75 | #define UCB_ADC_DAT_VALID (1 << 15) | 75 | #define UCB_ADC_DAT_VALID (1 << 15) |
76 | |||
77 | #define UCB_FCSR 0x6c | ||
78 | #define UCB_FCSR_AVE (1 << 12) | ||
79 | |||
76 | #define UCB_ADC_DAT_MASK 0x3ff | 80 | #define UCB_ADC_DAT_MASK 0x3ff |
77 | 81 | ||
78 | #define UCB_ID 0x7e | 82 | #define UCB_ID 0x7e |
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index 37836b937d97..1ef1ebc2b04f 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
@@ -70,12 +70,13 @@ struct rndis_msg_hdr { | |||
70 | #define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) | 70 | #define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) |
71 | 71 | ||
72 | /* codes for "status" field of completion messages */ | 72 | /* codes for "status" field of completion messages */ |
73 | #define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) | 73 | #define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) |
74 | #define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) | 74 | #define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) |
75 | #define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) | 75 | #define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) |
76 | #define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) | 76 | #define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) |
77 | #define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) | 77 | #define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) |
78 | #define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) | 78 | #define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) |
79 | #define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION cpu_to_le32(0x40010012) | ||
79 | 80 | ||
80 | /* codes for OID_GEN_PHYSICAL_MEDIUM */ | 81 | /* codes for OID_GEN_PHYSICAL_MEDIUM */ |
81 | #define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) | 82 | #define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) |
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 310e18a880ff..bb69e256cd16 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -53,6 +53,7 @@ struct usbnet { | |||
53 | struct sk_buff_head rxq; | 53 | struct sk_buff_head rxq; |
54 | struct sk_buff_head txq; | 54 | struct sk_buff_head txq; |
55 | struct sk_buff_head done; | 55 | struct sk_buff_head done; |
56 | struct sk_buff_head rxq_pause; | ||
56 | struct urb *interrupt; | 57 | struct urb *interrupt; |
57 | struct tasklet_struct bh; | 58 | struct tasklet_struct bh; |
58 | 59 | ||
@@ -63,6 +64,7 @@ struct usbnet { | |||
63 | # define EVENT_RX_MEMORY 2 | 64 | # define EVENT_RX_MEMORY 2 |
64 | # define EVENT_STS_SPLIT 3 | 65 | # define EVENT_STS_SPLIT 3 |
65 | # define EVENT_LINK_RESET 4 | 66 | # define EVENT_LINK_RESET 4 |
67 | # define EVENT_RX_PAUSED 5 | ||
66 | }; | 68 | }; |
67 | 69 | ||
68 | static inline struct usb_driver *driver_of(struct usb_interface *intf) | 70 | static inline struct usb_driver *driver_of(struct usb_interface *intf) |
@@ -86,6 +88,7 @@ struct driver_info { | |||
86 | 88 | ||
87 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ | 89 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ |
88 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ | 90 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ |
91 | #define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */ | ||
89 | 92 | ||
90 | 93 | ||
91 | /* init device ... can sleep, or cause probe() failure */ | 94 | /* init device ... can sleep, or cause probe() failure */ |
@@ -97,6 +100,9 @@ struct driver_info { | |||
97 | /* reset device ... can sleep */ | 100 | /* reset device ... can sleep */ |
98 | int (*reset)(struct usbnet *); | 101 | int (*reset)(struct usbnet *); |
99 | 102 | ||
103 | /* stop device ... can sleep */ | ||
104 | int (*stop)(struct usbnet *); | ||
105 | |||
100 | /* see if peer is connected ... can sleep */ | 106 | /* see if peer is connected ... can sleep */ |
101 | int (*check_connect)(struct usbnet *); | 107 | int (*check_connect)(struct usbnet *); |
102 | 108 | ||
@@ -118,9 +124,8 @@ struct driver_info { | |||
118 | * right after minidriver have initialized hardware. */ | 124 | * right after minidriver have initialized hardware. */ |
119 | int (*early_init)(struct usbnet *dev); | 125 | int (*early_init)(struct usbnet *dev); |
120 | 126 | ||
121 | /* called by minidriver when link state changes, state: 0=disconnect, | 127 | /* called by minidriver when receiving indication */ |
122 | * 1=connect */ | 128 | void (*indication)(struct usbnet *dev, void *ind, int indlen); |
123 | void (*link_change)(struct usbnet *dev, int state); | ||
124 | 129 | ||
125 | /* for new devices, use the descriptor-reading code instead */ | 130 | /* for new devices, use the descriptor-reading code instead */ |
126 | int in; /* rx endpoint */ | 131 | int in; /* rx endpoint */ |
@@ -177,7 +182,8 @@ struct skb_data { /* skb->cb is one of these */ | |||
177 | 182 | ||
178 | extern int usbnet_open (struct net_device *net); | 183 | extern int usbnet_open (struct net_device *net); |
179 | extern int usbnet_stop (struct net_device *net); | 184 | extern int usbnet_stop (struct net_device *net); |
180 | extern int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net); | 185 | extern netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, |
186 | struct net_device *net); | ||
181 | extern void usbnet_tx_timeout (struct net_device *net); | 187 | extern void usbnet_tx_timeout (struct net_device *net); |
182 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 188 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); |
183 | 189 | ||
@@ -187,6 +193,10 @@ extern void usbnet_defer_kevent (struct usbnet *, int); | |||
187 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 193 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
188 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 194 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
189 | 195 | ||
196 | extern void usbnet_pause_rx(struct usbnet *); | ||
197 | extern void usbnet_resume_rx(struct usbnet *); | ||
198 | extern void usbnet_purge_paused_rxq(struct usbnet *); | ||
199 | |||
190 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); | 200 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); |
191 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); | 201 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); |
192 | extern u32 usbnet_get_link (struct net_device *net); | 202 | extern u32 usbnet_get_link (struct net_device *net); |
diff --git a/include/linux/usb/video.h b/include/linux/usb/video.h new file mode 100644 index 000000000000..be436d9ee479 --- /dev/null +++ b/include/linux/usb/video.h | |||
@@ -0,0 +1,164 @@ | |||
1 | /* | ||
2 | * USB Video Class definitions. | ||
3 | * | ||
4 | * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be> | ||
5 | * | ||
6 | * This file holds USB constants and structures defined by the USB Device | ||
7 | * Class Definition for Video Devices. Unless otherwise stated, comments | ||
8 | * below reference relevant sections of the USB Video Class 1.1 specification | ||
9 | * available at | ||
10 | * | ||
11 | * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip | ||
12 | */ | ||
13 | |||
14 | #ifndef __LINUX_USB_VIDEO_H | ||
15 | #define __LINUX_USB_VIDEO_H | ||
16 | |||
17 | #include <linux/types.h> | ||
18 | |||
19 | /* -------------------------------------------------------------------------- | ||
20 | * UVC constants | ||
21 | */ | ||
22 | |||
23 | /* A.2. Video Interface Subclass Codes */ | ||
24 | #define UVC_SC_UNDEFINED 0x00 | ||
25 | #define UVC_SC_VIDEOCONTROL 0x01 | ||
26 | #define UVC_SC_VIDEOSTREAMING 0x02 | ||
27 | #define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03 | ||
28 | |||
29 | /* A.3. Video Interface Protocol Codes */ | ||
30 | #define UVC_PC_PROTOCOL_UNDEFINED 0x00 | ||
31 | |||
32 | /* A.5. Video Class-Specific VC Interface Descriptor Subtypes */ | ||
33 | #define UVC_VC_DESCRIPTOR_UNDEFINED 0x00 | ||
34 | #define UVC_VC_HEADER 0x01 | ||
35 | #define UVC_VC_INPUT_TERMINAL 0x02 | ||
36 | #define UVC_VC_OUTPUT_TERMINAL 0x03 | ||
37 | #define UVC_VC_SELECTOR_UNIT 0x04 | ||
38 | #define UVC_VC_PROCESSING_UNIT 0x05 | ||
39 | #define UVC_VC_EXTENSION_UNIT 0x06 | ||
40 | |||
41 | /* A.6. Video Class-Specific VS Interface Descriptor Subtypes */ | ||
42 | #define UVC_VS_UNDEFINED 0x00 | ||
43 | #define UVC_VS_INPUT_HEADER 0x01 | ||
44 | #define UVC_VS_OUTPUT_HEADER 0x02 | ||
45 | #define UVC_VS_STILL_IMAGE_FRAME 0x03 | ||
46 | #define UVC_VS_FORMAT_UNCOMPRESSED 0x04 | ||
47 | #define UVC_VS_FRAME_UNCOMPRESSED 0x05 | ||
48 | #define UVC_VS_FORMAT_MJPEG 0x06 | ||
49 | #define UVC_VS_FRAME_MJPEG 0x07 | ||
50 | #define UVC_VS_FORMAT_MPEG2TS 0x0a | ||
51 | #define UVC_VS_FORMAT_DV 0x0c | ||
52 | #define UVC_VS_COLORFORMAT 0x0d | ||
53 | #define UVC_VS_FORMAT_FRAME_BASED 0x10 | ||
54 | #define UVC_VS_FRAME_FRAME_BASED 0x11 | ||
55 | #define UVC_VS_FORMAT_STREAM_BASED 0x12 | ||
56 | |||
57 | /* A.7. Video Class-Specific Endpoint Descriptor Subtypes */ | ||
58 | #define UVC_EP_UNDEFINED 0x00 | ||
59 | #define UVC_EP_GENERAL 0x01 | ||
60 | #define UVC_EP_ENDPOINT 0x02 | ||
61 | #define UVC_EP_INTERRUPT 0x03 | ||
62 | |||
63 | /* A.8. Video Class-Specific Request Codes */ | ||
64 | #define UVC_RC_UNDEFINED 0x00 | ||
65 | #define UVC_SET_CUR 0x01 | ||
66 | #define UVC_GET_CUR 0x81 | ||
67 | #define UVC_GET_MIN 0x82 | ||
68 | #define UVC_GET_MAX 0x83 | ||
69 | #define UVC_GET_RES 0x84 | ||
70 | #define UVC_GET_LEN 0x85 | ||
71 | #define UVC_GET_INFO 0x86 | ||
72 | #define UVC_GET_DEF 0x87 | ||
73 | |||
74 | /* A.9.1. VideoControl Interface Control Selectors */ | ||
75 | #define UVC_VC_CONTROL_UNDEFINED 0x00 | ||
76 | #define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01 | ||
77 | #define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02 | ||
78 | |||
79 | /* A.9.2. Terminal Control Selectors */ | ||
80 | #define UVC_TE_CONTROL_UNDEFINED 0x00 | ||
81 | |||
82 | /* A.9.3. Selector Unit Control Selectors */ | ||
83 | #define UVC_SU_CONTROL_UNDEFINED 0x00 | ||
84 | #define UVC_SU_INPUT_SELECT_CONTROL 0x01 | ||
85 | |||
86 | /* A.9.4. Camera Terminal Control Selectors */ | ||
87 | #define UVC_CT_CONTROL_UNDEFINED 0x00 | ||
88 | #define UVC_CT_SCANNING_MODE_CONTROL 0x01 | ||
89 | #define UVC_CT_AE_MODE_CONTROL 0x02 | ||
90 | #define UVC_CT_AE_PRIORITY_CONTROL 0x03 | ||
91 | #define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 | ||
92 | #define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 | ||
93 | #define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06 | ||
94 | #define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07 | ||
95 | #define UVC_CT_FOCUS_AUTO_CONTROL 0x08 | ||
96 | #define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09 | ||
97 | #define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a | ||
98 | #define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b | ||
99 | #define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c | ||
100 | #define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d | ||
101 | #define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e | ||
102 | #define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f | ||
103 | #define UVC_CT_ROLL_RELATIVE_CONTROL 0x10 | ||
104 | #define UVC_CT_PRIVACY_CONTROL 0x11 | ||
105 | |||
106 | /* A.9.5. Processing Unit Control Selectors */ | ||
107 | #define UVC_PU_CONTROL_UNDEFINED 0x00 | ||
108 | #define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 | ||
109 | #define UVC_PU_BRIGHTNESS_CONTROL 0x02 | ||
110 | #define UVC_PU_CONTRAST_CONTROL 0x03 | ||
111 | #define UVC_PU_GAIN_CONTROL 0x04 | ||
112 | #define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 | ||
113 | #define UVC_PU_HUE_CONTROL 0x06 | ||
114 | #define UVC_PU_SATURATION_CONTROL 0x07 | ||
115 | #define UVC_PU_SHARPNESS_CONTROL 0x08 | ||
116 | #define UVC_PU_GAMMA_CONTROL 0x09 | ||
117 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a | ||
118 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b | ||
119 | #define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c | ||
120 | #define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d | ||
121 | #define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e | ||
122 | #define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f | ||
123 | #define UVC_PU_HUE_AUTO_CONTROL 0x10 | ||
124 | #define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 | ||
125 | #define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 | ||
126 | |||
127 | /* A.9.7. VideoStreaming Interface Control Selectors */ | ||
128 | #define UVC_VS_CONTROL_UNDEFINED 0x00 | ||
129 | #define UVC_VS_PROBE_CONTROL 0x01 | ||
130 | #define UVC_VS_COMMIT_CONTROL 0x02 | ||
131 | #define UVC_VS_STILL_PROBE_CONTROL 0x03 | ||
132 | #define UVC_VS_STILL_COMMIT_CONTROL 0x04 | ||
133 | #define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 | ||
134 | #define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06 | ||
135 | #define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07 | ||
136 | #define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 | ||
137 | #define UVC_VS_SYNC_DELAY_CONTROL 0x09 | ||
138 | |||
139 | /* B.1. USB Terminal Types */ | ||
140 | #define UVC_TT_VENDOR_SPECIFIC 0x0100 | ||
141 | #define UVC_TT_STREAMING 0x0101 | ||
142 | |||
143 | /* B.2. Input Terminal Types */ | ||
144 | #define UVC_ITT_VENDOR_SPECIFIC 0x0200 | ||
145 | #define UVC_ITT_CAMERA 0x0201 | ||
146 | #define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202 | ||
147 | |||
148 | /* B.3. Output Terminal Types */ | ||
149 | #define UVC_OTT_VENDOR_SPECIFIC 0x0300 | ||
150 | #define UVC_OTT_DISPLAY 0x0301 | ||
151 | #define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 | ||
152 | |||
153 | /* B.4. External Terminal Types */ | ||
154 | #define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400 | ||
155 | #define UVC_COMPOSITE_CONNECTOR 0x0401 | ||
156 | #define UVC_SVIDEO_CONNECTOR 0x0402 | ||
157 | #define UVC_COMPONENT_CONNECTOR 0x0403 | ||
158 | |||
159 | /* 2.4.2.2. Status Packet Type */ | ||
160 | #define UVC_STATUS_TYPE_CONTROL 1 | ||
161 | #define UVC_STATUS_TYPE_STREAMING 2 | ||
162 | |||
163 | #endif /* __LINUX_USB_VIDEO_H */ | ||
164 | |||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 74f16876f38d..3689d7d81fe9 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -167,6 +167,7 @@ enum v4l2_ctrl_type { | |||
167 | V4L2_CTRL_TYPE_BUTTON = 4, | 167 | V4L2_CTRL_TYPE_BUTTON = 4, |
168 | V4L2_CTRL_TYPE_INTEGER64 = 5, | 168 | V4L2_CTRL_TYPE_INTEGER64 = 5, |
169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, | 169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, |
170 | V4L2_CTRL_TYPE_STRING = 7, | ||
170 | }; | 171 | }; |
171 | 172 | ||
172 | enum v4l2_tuner_type { | 173 | enum v4l2_tuner_type { |
@@ -252,10 +253,12 @@ struct v4l2_capability { | |||
252 | #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ | 253 | #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ |
253 | #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ | 254 | #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ |
254 | #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ | 255 | #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ |
256 | #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */ | ||
255 | 257 | ||
256 | #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ | 258 | #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ |
257 | #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ | 259 | #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ |
258 | #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ | 260 | #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ |
261 | #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ | ||
259 | 262 | ||
260 | #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ | 263 | #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ |
261 | #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ | 264 | #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ |
@@ -275,7 +278,9 @@ struct v4l2_pix_format { | |||
275 | __u32 priv; /* private data, depends on pixelformat */ | 278 | __u32 priv; /* private data, depends on pixelformat */ |
276 | }; | 279 | }; |
277 | 280 | ||
278 | /* Pixel format FOURCC depth Description */ | 281 | /* Pixel format FOURCC depth Description */ |
282 | |||
283 | /* RGB formats */ | ||
279 | #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ | 284 | #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ |
280 | #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ | 285 | #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ |
281 | #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ | 286 | #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ |
@@ -286,12 +291,20 @@ struct v4l2_pix_format { | |||
286 | #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ | 291 | #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ |
287 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ | 292 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ |
288 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ | 293 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ |
294 | |||
295 | /* Grey formats */ | ||
289 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ | 296 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ |
290 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ | 297 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ |
298 | |||
299 | /* Palette formats */ | ||
291 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ | 300 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ |
301 | |||
302 | /* Luminance+Chrominance formats */ | ||
292 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ | 303 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ |
293 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ | 304 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ |
294 | #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ | 305 | #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ |
306 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ | ||
307 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | ||
295 | #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ | 308 | #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ |
296 | #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ | 309 | #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ |
297 | #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ | 310 | #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ |
@@ -301,6 +314,10 @@ struct v4l2_pix_format { | |||
301 | #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ | 314 | #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ |
302 | #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ | 315 | #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ |
303 | #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ | 316 | #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ |
317 | #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ | ||
318 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ | ||
319 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ | ||
320 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ | ||
304 | 321 | ||
305 | /* two planes -- one Y, one Cr + Cb interleaved */ | 322 | /* two planes -- one Y, one Cr + Cb interleaved */ |
306 | #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ | 323 | #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ |
@@ -308,25 +325,17 @@ struct v4l2_pix_format { | |||
308 | #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ | 325 | #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ |
309 | #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ | 326 | #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ |
310 | 327 | ||
311 | /* The following formats are not defined in the V4L2 specification */ | 328 | /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ |
312 | #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ | ||
313 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ | ||
314 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ | ||
315 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ | ||
316 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ | ||
317 | |||
318 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ | ||
319 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ | 329 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ |
320 | #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ | 330 | #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ |
321 | #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ | 331 | #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ |
322 | 332 | #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10bit raw bayer */ | |
323 | /* | 333 | /* 10bit raw bayer DPCM compressed to 8 bits */ |
324 | * 10bit raw bayer, expanded to 16 bits | ||
325 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | ||
326 | */ | ||
327 | #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') | ||
328 | /* 10bit raw bayer DPCM compressed to 8 bits */ | ||
329 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') | 334 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') |
335 | /* | ||
336 | * 10bit raw bayer, expanded to 16 bits | ||
337 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | ||
338 | */ | ||
330 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ | 339 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ |
331 | 340 | ||
332 | /* compressed formats */ | 341 | /* compressed formats */ |
@@ -350,7 +359,6 @@ struct v4l2_pix_format { | |||
350 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ | 359 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ |
351 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ | 360 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ |
352 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ | 361 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ |
353 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | ||
354 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ | 362 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ |
355 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ | 363 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ |
356 | 364 | ||
@@ -367,6 +375,7 @@ struct v4l2_fmtdesc { | |||
367 | }; | 375 | }; |
368 | 376 | ||
369 | #define V4L2_FMT_FLAG_COMPRESSED 0x0001 | 377 | #define V4L2_FMT_FLAG_COMPRESSED 0x0001 |
378 | #define V4L2_FMT_FLAG_EMULATED 0x0002 | ||
370 | 379 | ||
371 | #if 1 | 380 | #if 1 |
372 | /* Experimental Frame Size and frame rate enumeration */ | 381 | /* Experimental Frame Size and frame rate enumeration */ |
@@ -788,11 +797,12 @@ struct v4l2_control { | |||
788 | 797 | ||
789 | struct v4l2_ext_control { | 798 | struct v4l2_ext_control { |
790 | __u32 id; | 799 | __u32 id; |
791 | __u32 reserved2[2]; | 800 | __u32 size; |
801 | __u32 reserved2[1]; | ||
792 | union { | 802 | union { |
793 | __s32 value; | 803 | __s32 value; |
794 | __s64 value64; | 804 | __s64 value64; |
795 | void *reserved; | 805 | char *string; |
796 | }; | 806 | }; |
797 | } __attribute__ ((packed)); | 807 | } __attribute__ ((packed)); |
798 | 808 | ||
@@ -808,6 +818,7 @@ struct v4l2_ext_controls { | |||
808 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ | 818 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ |
809 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ | 819 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ |
810 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ | 820 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ |
821 | #define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */ | ||
811 | 822 | ||
812 | #define V4L2_CTRL_ID_MASK (0x0fffffff) | 823 | #define V4L2_CTRL_ID_MASK (0x0fffffff) |
813 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) | 824 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) |
@@ -1147,6 +1158,39 @@ enum v4l2_exposure_auto_type { | |||
1147 | 1158 | ||
1148 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) | 1159 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) |
1149 | 1160 | ||
1161 | /* FM Modulator class control IDs */ | ||
1162 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) | ||
1163 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) | ||
1164 | |||
1165 | #define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1) | ||
1166 | #define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2) | ||
1167 | #define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3) | ||
1168 | #define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) | ||
1169 | #define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) | ||
1170 | |||
1171 | #define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) | ||
1172 | #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65) | ||
1173 | #define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66) | ||
1174 | |||
1175 | #define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80) | ||
1176 | #define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81) | ||
1177 | #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82) | ||
1178 | #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83) | ||
1179 | #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84) | ||
1180 | |||
1181 | #define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96) | ||
1182 | #define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97) | ||
1183 | #define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98) | ||
1184 | |||
1185 | #define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112) | ||
1186 | enum v4l2_preemphasis { | ||
1187 | V4L2_PREEMPHASIS_DISABLED = 0, | ||
1188 | V4L2_PREEMPHASIS_50_uS = 1, | ||
1189 | V4L2_PREEMPHASIS_75_uS = 2, | ||
1190 | }; | ||
1191 | #define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113) | ||
1192 | #define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114) | ||
1193 | |||
1150 | /* | 1194 | /* |
1151 | * T U N I N G | 1195 | * T U N I N G |
1152 | */ | 1196 | */ |
@@ -1181,6 +1225,7 @@ struct v4l2_modulator { | |||
1181 | #define V4L2_TUNER_CAP_LANG2 0x0020 | 1225 | #define V4L2_TUNER_CAP_LANG2 0x0020 |
1182 | #define V4L2_TUNER_CAP_SAP 0x0020 | 1226 | #define V4L2_TUNER_CAP_SAP 0x0020 |
1183 | #define V4L2_TUNER_CAP_LANG1 0x0040 | 1227 | #define V4L2_TUNER_CAP_LANG1 0x0040 |
1228 | #define V4L2_TUNER_CAP_RDS 0x0080 | ||
1184 | 1229 | ||
1185 | /* Flags for the 'rxsubchans' field */ | 1230 | /* Flags for the 'rxsubchans' field */ |
1186 | #define V4L2_TUNER_SUB_MONO 0x0001 | 1231 | #define V4L2_TUNER_SUB_MONO 0x0001 |
@@ -1188,6 +1233,7 @@ struct v4l2_modulator { | |||
1188 | #define V4L2_TUNER_SUB_LANG2 0x0004 | 1233 | #define V4L2_TUNER_SUB_LANG2 0x0004 |
1189 | #define V4L2_TUNER_SUB_SAP 0x0004 | 1234 | #define V4L2_TUNER_SUB_SAP 0x0004 |
1190 | #define V4L2_TUNER_SUB_LANG1 0x0008 | 1235 | #define V4L2_TUNER_SUB_LANG1 0x0008 |
1236 | #define V4L2_TUNER_SUB_RDS 0x0010 | ||
1191 | 1237 | ||
1192 | /* Values for the 'audmode' field */ | 1238 | /* Values for the 'audmode' field */ |
1193 | #define V4L2_TUNER_MODE_MONO 0x0000 | 1239 | #define V4L2_TUNER_MODE_MONO 0x0000 |
@@ -1213,6 +1259,27 @@ struct v4l2_hw_freq_seek { | |||
1213 | }; | 1259 | }; |
1214 | 1260 | ||
1215 | /* | 1261 | /* |
1262 | * R D S | ||
1263 | */ | ||
1264 | |||
1265 | struct v4l2_rds_data { | ||
1266 | __u8 lsb; | ||
1267 | __u8 msb; | ||
1268 | __u8 block; | ||
1269 | } __attribute__ ((packed)); | ||
1270 | |||
1271 | #define V4L2_RDS_BLOCK_MSK 0x7 | ||
1272 | #define V4L2_RDS_BLOCK_A 0 | ||
1273 | #define V4L2_RDS_BLOCK_B 1 | ||
1274 | #define V4L2_RDS_BLOCK_C 2 | ||
1275 | #define V4L2_RDS_BLOCK_D 3 | ||
1276 | #define V4L2_RDS_BLOCK_C_ALT 4 | ||
1277 | #define V4L2_RDS_BLOCK_INVALID 7 | ||
1278 | |||
1279 | #define V4L2_RDS_BLOCK_CORRECTED 0x40 | ||
1280 | #define V4L2_RDS_BLOCK_ERROR 0x80 | ||
1281 | |||
1282 | /* | ||
1216 | * A U D I O | 1283 | * A U D I O |
1217 | */ | 1284 | */ |
1218 | struct v4l2_audio { | 1285 | struct v4l2_audio { |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index a43ebec3a7b9..227c2a585e4f 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
@@ -115,4 +115,10 @@ extern rwlock_t vmlist_lock; | |||
115 | extern struct vm_struct *vmlist; | 115 | extern struct vm_struct *vmlist; |
116 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); | 116 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); |
117 | 117 | ||
118 | struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, | ||
119 | const size_t *sizes, int nr_vms, | ||
120 | size_t align, gfp_t gfp_mask); | ||
121 | |||
122 | void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); | ||
123 | |||
118 | #endif /* _LINUX_VMALLOC_H */ | 124 | #endif /* _LINUX_VMALLOC_H */ |
diff --git a/include/linux/wait.h b/include/linux/wait.h index 6788e1a4d4ca..cf3c2f5dba51 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -77,7 +77,14 @@ struct task_struct; | |||
77 | #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ | 77 | #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ |
78 | { .flags = word, .bit_nr = bit, } | 78 | { .flags = word, .bit_nr = bit, } |
79 | 79 | ||
80 | extern void init_waitqueue_head(wait_queue_head_t *q); | 80 | extern void __init_waitqueue_head(wait_queue_head_t *q, struct lock_class_key *); |
81 | |||
82 | #define init_waitqueue_head(q) \ | ||
83 | do { \ | ||
84 | static struct lock_class_key __key; \ | ||
85 | \ | ||
86 | __init_waitqueue_head((q), &__key); \ | ||
87 | } while (0) | ||
81 | 88 | ||
82 | #ifdef CONFIG_LOCKDEP | 89 | #ifdef CONFIG_LOCKDEP |
83 | # define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ | 90 | # define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ |
diff --git a/include/linux/wireless.h b/include/linux/wireless.h index cb24204851f7..5b4c6c772a9b 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h | |||
@@ -1132,6 +1132,14 @@ struct __compat_iw_event { | |||
1132 | }; | 1132 | }; |
1133 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) | 1133 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) |
1134 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) | 1134 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) |
1135 | |||
1136 | /* Size of the various events for compat */ | ||
1137 | #define IW_EV_COMPAT_CHAR_LEN (IW_EV_COMPAT_LCP_LEN + IFNAMSIZ) | ||
1138 | #define IW_EV_COMPAT_UINT_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(__u32)) | ||
1139 | #define IW_EV_COMPAT_FREQ_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_freq)) | ||
1140 | #define IW_EV_COMPAT_PARAM_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_param)) | ||
1141 | #define IW_EV_COMPAT_ADDR_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct sockaddr)) | ||
1142 | #define IW_EV_COMPAT_QUAL_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_quality)) | ||
1135 | #define IW_EV_COMPAT_POINT_LEN \ | 1143 | #define IW_EV_COMPAT_POINT_LEN \ |
1136 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ | 1144 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ |
1137 | IW_EV_COMPAT_POINT_OFF) | 1145 | IW_EV_COMPAT_POINT_OFF) |
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h index 6f69968eab24..0c9878123d5f 100644 --- a/include/linux/wm97xx.h +++ b/include/linux/wm97xx.h | |||
@@ -16,6 +16,12 @@ | |||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | 17 | ||
18 | /* | 18 | /* |
19 | * WM97xx variants | ||
20 | */ | ||
21 | #define WM97xx_GENERIC 0x0000 | ||
22 | #define WM97xx_WM1613 0x1613 | ||
23 | |||
24 | /* | ||
19 | * WM97xx AC97 Touchscreen registers | 25 | * WM97xx AC97 Touchscreen registers |
20 | */ | 26 | */ |
21 | #define AC97_WM97XX_DIGITISER1 0x76 | 27 | #define AC97_WM97XX_DIGITISER1 0x76 |
@@ -283,6 +289,7 @@ struct wm97xx { | |||
283 | unsigned pen_is_down:1; /* Pen is down */ | 289 | unsigned pen_is_down:1; /* Pen is down */ |
284 | unsigned aux_waiting:1; /* aux measurement waiting */ | 290 | unsigned aux_waiting:1; /* aux measurement waiting */ |
285 | unsigned pen_probably_down:1; /* used in polling mode */ | 291 | unsigned pen_probably_down:1; /* used in polling mode */ |
292 | u16 variant; /* WM97xx chip variant */ | ||
286 | u16 suspend_mode; /* PRP in suspend mode */ | 293 | u16 suspend_mode; /* PRP in suspend mode */ |
287 | }; | 294 | }; |
288 | 295 | ||
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 13e1adf55c4c..6273fa97b527 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -240,6 +240,21 @@ static inline int cancel_delayed_work(struct delayed_work *work) | |||
240 | return ret; | 240 | return ret; |
241 | } | 241 | } |
242 | 242 | ||
243 | /* | ||
244 | * Like above, but uses del_timer() instead of del_timer_sync(). This means, | ||
245 | * if it returns 0 the timer function may be running and the queueing is in | ||
246 | * progress. | ||
247 | */ | ||
248 | static inline int __cancel_delayed_work(struct delayed_work *work) | ||
249 | { | ||
250 | int ret; | ||
251 | |||
252 | ret = del_timer(&work->timer); | ||
253 | if (ret) | ||
254 | work_clear_pending(&work->work); | ||
255 | return ret; | ||
256 | } | ||
257 | |||
243 | extern int cancel_delayed_work_sync(struct delayed_work *work); | 258 | extern int cancel_delayed_work_sync(struct delayed_work *work); |
244 | 259 | ||
245 | /* Obsolete. use cancel_delayed_work_sync() */ | 260 | /* Obsolete. use cancel_delayed_work_sync() */ |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 3224820c8514..d347632f1861 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -14,17 +14,6 @@ extern struct list_head inode_in_use; | |||
14 | extern struct list_head inode_unused; | 14 | extern struct list_head inode_unused; |
15 | 15 | ||
16 | /* | 16 | /* |
17 | * Yes, writeback.h requires sched.h | ||
18 | * No, sched.h is not included from here. | ||
19 | */ | ||
20 | static inline int task_is_pdflush(struct task_struct *task) | ||
21 | { | ||
22 | return task->flags & PF_FLUSHER; | ||
23 | } | ||
24 | |||
25 | #define current_is_pdflush() task_is_pdflush(current) | ||
26 | |||
27 | /* | ||
28 | * fs/fs-writeback.c | 17 | * fs/fs-writeback.c |
29 | */ | 18 | */ |
30 | enum writeback_sync_modes { | 19 | enum writeback_sync_modes { |
@@ -40,6 +29,8 @@ enum writeback_sync_modes { | |||
40 | struct writeback_control { | 29 | struct writeback_control { |
41 | struct backing_dev_info *bdi; /* If !NULL, only write back this | 30 | struct backing_dev_info *bdi; /* If !NULL, only write back this |
42 | queue */ | 31 | queue */ |
32 | struct super_block *sb; /* if !NULL, only write inodes from | ||
33 | this super_block */ | ||
43 | enum writeback_sync_modes sync_mode; | 34 | enum writeback_sync_modes sync_mode; |
44 | unsigned long *older_than_this; /* If !NULL, only write back inodes | 35 | unsigned long *older_than_this; /* If !NULL, only write back inodes |
45 | older than this */ | 36 | older than this */ |
@@ -76,9 +67,13 @@ struct writeback_control { | |||
76 | /* | 67 | /* |
77 | * fs/fs-writeback.c | 68 | * fs/fs-writeback.c |
78 | */ | 69 | */ |
79 | void writeback_inodes(struct writeback_control *wbc); | 70 | struct bdi_writeback; |
80 | int inode_wait(void *); | 71 | int inode_wait(void *); |
81 | void sync_inodes_sb(struct super_block *, int wait); | 72 | long writeback_inodes_sb(struct super_block *); |
73 | long sync_inodes_sb(struct super_block *); | ||
74 | void writeback_inodes_wbc(struct writeback_control *wbc); | ||
75 | long wb_do_writeback(struct bdi_writeback *wb, int force_wait); | ||
76 | void wakeup_flusher_threads(long nr_pages); | ||
82 | 77 | ||
83 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 78 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
84 | static inline void wait_on_inode(struct inode *inode) | 79 | static inline void wait_on_inode(struct inode *inode) |
@@ -98,7 +93,6 @@ static inline void inode_sync_wait(struct inode *inode) | |||
98 | /* | 93 | /* |
99 | * mm/page-writeback.c | 94 | * mm/page-writeback.c |
100 | */ | 95 | */ |
101 | int wakeup_pdflush(long nr_pages); | ||
102 | void laptop_io_completion(void); | 96 | void laptop_io_completion(void); |
103 | void laptop_sync_completion(void); | 97 | void laptop_sync_completion(void); |
104 | void throttle_vm_writeout(gfp_t gfp_mask); | 98 | void throttle_vm_writeout(gfp_t gfp_mask); |
@@ -150,17 +144,12 @@ balance_dirty_pages_ratelimited(struct address_space *mapping) | |||
150 | typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc, | 144 | typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc, |
151 | void *data); | 145 | void *data); |
152 | 146 | ||
153 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); | ||
154 | int generic_writepages(struct address_space *mapping, | 147 | int generic_writepages(struct address_space *mapping, |
155 | struct writeback_control *wbc); | 148 | struct writeback_control *wbc); |
156 | int write_cache_pages(struct address_space *mapping, | 149 | int write_cache_pages(struct address_space *mapping, |
157 | struct writeback_control *wbc, writepage_t writepage, | 150 | struct writeback_control *wbc, writepage_t writepage, |
158 | void *data); | 151 | void *data); |
159 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); | 152 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); |
160 | int sync_page_range(struct inode *inode, struct address_space *mapping, | ||
161 | loff_t pos, loff_t count); | ||
162 | int sync_page_range_nolock(struct inode *inode, struct address_space *mapping, | ||
163 | loff_t pos, loff_t count); | ||
164 | void set_page_dirty_balance(struct page *page, int page_mkwrite); | 153 | void set_page_dirty_balance(struct page *page, int page_mkwrite); |
165 | void writeback_set_ratelimit(void); | 154 | void writeback_set_ratelimit(void); |
166 | 155 | ||
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index d131e352cfe1..5c84af8c5f6f 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -49,6 +49,7 @@ struct xattr_handler { | |||
49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); | 49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); |
50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); | 50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); |
51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | 51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); |
52 | int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int); | ||
52 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); | 53 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); |
53 | int vfs_removexattr(struct dentry *, const char *); | 54 | int vfs_removexattr(struct dentry *, const char *); |
54 | 55 | ||