diff options
| author | David S. Miller <davem@davemloft.net> | 2008-07-27 19:51:21 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-07-27 19:51:21 -0400 |
| commit | 281c7413ed914623d3245299a4761b6b27ab9fdb (patch) | |
| tree | 182b5222a7ad4b77c32f7845ea777ca665d7def2 /include | |
| parent | 2ab61b01110aa04cd853c619a74881e3225a5e24 (diff) | |
| parent | c9272c4f9fbe2087beb3392f526dc5b19efaa56b (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'include')
25 files changed, 348 insertions, 91 deletions
diff --git a/include/Kbuild b/include/Kbuild index bdca155028ec..d8c3e3cbf416 100644 --- a/include/Kbuild +++ b/include/Kbuild | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | # Top-level Makefile calls into asm-$(ARCH) | ||
| 2 | # List only non-arch directories below | ||
| 3 | |||
| 1 | header-y += asm-generic/ | 4 | header-y += asm-generic/ |
| 2 | header-y += linux/ | 5 | header-y += linux/ |
| 3 | header-y += sound/ | 6 | header-y += sound/ |
| @@ -5,5 +8,3 @@ header-y += mtd/ | |||
| 5 | header-y += rdma/ | 8 | header-y += rdma/ |
| 6 | header-y += video/ | 9 | header-y += video/ |
| 7 | header-y += drm/ | 10 | header-y += drm/ |
| 8 | |||
| 9 | header-y += asm-$(ARCH)/ | ||
diff --git a/include/asm-arm/arch-pnx4008/irqs.h b/include/asm-arm/arch-pnx4008/irqs.h index 13ec7ed0f501..a25d18f2d87a 100644 --- a/include/asm-arm/arch-pnx4008/irqs.h +++ b/include/asm-arm/arch-pnx4008/irqs.h | |||
| @@ -135,30 +135,30 @@ | |||
| 135 | 135 | ||
| 136 | #define PNX4008_IRQ_TYPES \ | 136 | #define PNX4008_IRQ_TYPES \ |
| 137 | { /*IRQ #'s: */ \ | 137 | { /*IRQ #'s: */ \ |
| 138 | IRQT_LOW, IRQT_LOW, IRQT_LOW, IRQT_HIGH, /* 0, 1, 2, 3 */ \ | 138 | IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH, /* 0, 1, 2, 3 */ \ |
| 139 | IRQT_LOW, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 4, 5, 6, 7 */ \ | 139 | IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 4, 5, 6, 7 */ \ |
| 140 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 8, 9,10,11 */ \ | 140 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 8, 9,10,11 */ \ |
| 141 | IRQT_LOW, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 12,13,14,15 */ \ | 141 | IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 12,13,14,15 */ \ |
| 142 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 16,17,18,19 */ \ | 142 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 16,17,18,19 */ \ |
| 143 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 20,21,22,23 */ \ | 143 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 20,21,22,23 */ \ |
| 144 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 24,25,26,27 */ \ | 144 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 24,25,26,27 */ \ |
| 145 | IRQT_HIGH, IRQT_HIGH, IRQT_LOW, IRQT_LOW, /* 28,29,30,31 */ \ | 145 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_LOW, /* 28,29,30,31 */ \ |
| 146 | IRQT_HIGH, IRQT_LOW, IRQT_HIGH, IRQT_HIGH, /* 32,33,34,35 */ \ | 146 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 32,33,34,35 */ \ |
| 147 | IRQT_HIGH, IRQT_HIGH, IRQT_FALLING, IRQT_HIGH, /* 36,37,38,39 */ \ | 147 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_EDGE_FALLING, IRQ_TYPE_LEVEL_HIGH, /* 36,37,38,39 */ \ |
| 148 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 40,41,42,43 */ \ | 148 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 40,41,42,43 */ \ |
| 149 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 44,45,46,47 */ \ | 149 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 44,45,46,47 */ \ |
| 150 | IRQT_HIGH, IRQT_HIGH, IRQT_LOW, IRQT_LOW, /* 48,49,50,51 */ \ | 150 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_LOW, /* 48,49,50,51 */ \ |
| 151 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 52,53,54,55 */ \ | 151 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 52,53,54,55 */ \ |
| 152 | IRQT_HIGH, IRQT_HIGH, IRQT_LOW, IRQT_HIGH, /* 56,57,58,59 */ \ | 152 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH, /* 56,57,58,59 */ \ |
| 153 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 60,61,62,63 */ \ | 153 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 60,61,62,63 */ \ |
| 154 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 64,65,66,67 */ \ | 154 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 64,65,66,67 */ \ |
| 155 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 68,69,70,71 */ \ | 155 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 68,69,70,71 */ \ |
| 156 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 72,73,74,75 */ \ | 156 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 72,73,74,75 */ \ |
| 157 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 76,77,78,79 */ \ | 157 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 76,77,78,79 */ \ |
| 158 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 80,81,82,83 */ \ | 158 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 80,81,82,83 */ \ |
| 159 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 84,85,86,87 */ \ | 159 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 84,85,86,87 */ \ |
| 160 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 88,89,90,91 */ \ | 160 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 88,89,90,91 */ \ |
| 161 | IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, IRQT_HIGH, /* 92,93,94,95 */ \ | 161 | IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, IRQ_TYPE_LEVEL_HIGH, /* 92,93,94,95 */ \ |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | /* Start Enable Pin Interrupts - table 58 page 66 */ | 164 | /* Start Enable Pin Interrupts - table 58 page 66 */ |
diff --git a/include/asm-arm/arch-pxa/idp.h b/include/asm-arm/arch-pxa/idp.h index b6952534a4e1..21aa8ac35c1c 100644 --- a/include/asm-arm/arch-pxa/idp.h +++ b/include/asm-arm/arch-pxa/idp.h | |||
| @@ -138,18 +138,18 @@ | |||
| 138 | #define TOUCH_PANEL_IRQ IRQ_GPIO(5) | 138 | #define TOUCH_PANEL_IRQ IRQ_GPIO(5) |
| 139 | #define IDE_IRQ IRQ_GPIO(21) | 139 | #define IDE_IRQ IRQ_GPIO(21) |
| 140 | 140 | ||
| 141 | #define TOUCH_PANEL_IRQ_EDGE IRQT_FALLING | 141 | #define TOUCH_PANEL_IRQ_EDGE IRQ_TYPE_EDGE_FALLING |
| 142 | 142 | ||
| 143 | #define ETHERNET_IRQ IRQ_GPIO(4) | 143 | #define ETHERNET_IRQ IRQ_GPIO(4) |
| 144 | #define ETHERNET_IRQ_EDGE IRQT_RISING | 144 | #define ETHERNET_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 145 | 145 | ||
| 146 | #define IDE_IRQ_EDGE IRQT_RISING | 146 | #define IDE_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 147 | 147 | ||
| 148 | #define PCMCIA_S0_CD_VALID IRQ_GPIO(7) | 148 | #define PCMCIA_S0_CD_VALID IRQ_GPIO(7) |
| 149 | #define PCMCIA_S0_CD_VALID_EDGE IRQT_BOTHEDGE | 149 | #define PCMCIA_S0_CD_VALID_EDGE IRQ_TYPE_EDGE_BOTH |
| 150 | 150 | ||
| 151 | #define PCMCIA_S1_CD_VALID IRQ_GPIO(8) | 151 | #define PCMCIA_S1_CD_VALID IRQ_GPIO(8) |
| 152 | #define PCMCIA_S1_CD_VALID_EDGE IRQT_BOTHEDGE | 152 | #define PCMCIA_S1_CD_VALID_EDGE IRQ_TYPE_EDGE_BOTH |
| 153 | 153 | ||
| 154 | #define PCMCIA_S0_RDYINT IRQ_GPIO(19) | 154 | #define PCMCIA_S0_RDYINT IRQ_GPIO(19) |
| 155 | #define PCMCIA_S1_RDYINT IRQ_GPIO(22) | 155 | #define PCMCIA_S1_RDYINT IRQ_GPIO(22) |
diff --git a/include/asm-arm/arch-pxa/pcm990_baseboard.h b/include/asm-arm/arch-pxa/pcm990_baseboard.h index b699d0d7bdb2..2e2013179063 100644 --- a/include/asm-arm/arch-pxa/pcm990_baseboard.h +++ b/include/asm-arm/arch-pxa/pcm990_baseboard.h | |||
| @@ -29,14 +29,14 @@ | |||
| 29 | /* CPLD's interrupt controller is connected to PCM-027 GPIO 9 */ | 29 | /* CPLD's interrupt controller is connected to PCM-027 GPIO 9 */ |
| 30 | #define PCM990_CTRL_INT_IRQ_GPIO 9 | 30 | #define PCM990_CTRL_INT_IRQ_GPIO 9 |
| 31 | #define PCM990_CTRL_INT_IRQ IRQ_GPIO(PCM990_CTRL_INT_IRQ_GPIO) | 31 | #define PCM990_CTRL_INT_IRQ IRQ_GPIO(PCM990_CTRL_INT_IRQ_GPIO) |
| 32 | #define PCM990_CTRL_INT_IRQ_EDGE IRQT_RISING | 32 | #define PCM990_CTRL_INT_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 33 | #define PCM990_CTRL_PHYS PXA_CS1_PHYS /* 16-Bit */ | 33 | #define PCM990_CTRL_PHYS PXA_CS1_PHYS /* 16-Bit */ |
| 34 | #define PCM990_CTRL_BASE 0xea000000 | 34 | #define PCM990_CTRL_BASE 0xea000000 |
| 35 | #define PCM990_CTRL_SIZE (1*1024*1024) | 35 | #define PCM990_CTRL_SIZE (1*1024*1024) |
| 36 | 36 | ||
| 37 | #define PCM990_CTRL_PWR_IRQ_GPIO 14 | 37 | #define PCM990_CTRL_PWR_IRQ_GPIO 14 |
| 38 | #define PCM990_CTRL_PWR_IRQ IRQ_GPIO(PCM990_CTRL_PWR_IRQ_GPIO) | 38 | #define PCM990_CTRL_PWR_IRQ IRQ_GPIO(PCM990_CTRL_PWR_IRQ_GPIO) |
| 39 | #define PCM990_CTRL_PWR_IRQ_EDGE IRQT_RISING | 39 | #define PCM990_CTRL_PWR_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 40 | 40 | ||
| 41 | /* visible CPLD (U7) registers */ | 41 | /* visible CPLD (U7) registers */ |
| 42 | #define PCM990_CTRL_REG0 0x0000 /* RESET REGISTER */ | 42 | #define PCM990_CTRL_REG0 0x0000 /* RESET REGISTER */ |
| @@ -133,7 +133,7 @@ | |||
| 133 | */ | 133 | */ |
| 134 | #define PCM990_IDE_IRQ_GPIO 13 | 134 | #define PCM990_IDE_IRQ_GPIO 13 |
| 135 | #define PCM990_IDE_IRQ IRQ_GPIO(PCM990_IDE_IRQ_GPIO) | 135 | #define PCM990_IDE_IRQ IRQ_GPIO(PCM990_IDE_IRQ_GPIO) |
| 136 | #define PCM990_IDE_IRQ_EDGE IRQT_RISING | 136 | #define PCM990_IDE_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 137 | #define PCM990_IDE_PLD_PHYS 0x20000000 /* 16 bit wide */ | 137 | #define PCM990_IDE_PLD_PHYS 0x20000000 /* 16 bit wide */ |
| 138 | #define PCM990_IDE_PLD_BASE 0xee000000 | 138 | #define PCM990_IDE_PLD_BASE 0xee000000 |
| 139 | #define PCM990_IDE_PLD_SIZE (1*1024*1024) | 139 | #define PCM990_IDE_PLD_SIZE (1*1024*1024) |
| @@ -189,11 +189,11 @@ | |||
| 189 | */ | 189 | */ |
| 190 | #define PCM990_CF_IRQ_GPIO 11 | 190 | #define PCM990_CF_IRQ_GPIO 11 |
| 191 | #define PCM990_CF_IRQ IRQ_GPIO(PCM990_CF_IRQ_GPIO) | 191 | #define PCM990_CF_IRQ IRQ_GPIO(PCM990_CF_IRQ_GPIO) |
| 192 | #define PCM990_CF_IRQ_EDGE IRQT_RISING | 192 | #define PCM990_CF_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 193 | 193 | ||
| 194 | #define PCM990_CF_CD_GPIO 12 | 194 | #define PCM990_CF_CD_GPIO 12 |
| 195 | #define PCM990_CF_CD IRQ_GPIO(PCM990_CF_CD_GPIO) | 195 | #define PCM990_CF_CD IRQ_GPIO(PCM990_CF_CD_GPIO) |
| 196 | #define PCM990_CF_CD_EDGE IRQT_RISING | 196 | #define PCM990_CF_CD_EDGE IRQ_TYPE_EDGE_RISING |
| 197 | 197 | ||
| 198 | #define PCM990_CF_PLD_PHYS 0x30000000 /* 16 bit wide */ | 198 | #define PCM990_CF_PLD_PHYS 0x30000000 /* 16 bit wide */ |
| 199 | #define PCM990_CF_PLD_BASE 0xef000000 | 199 | #define PCM990_CF_PLD_BASE 0xef000000 |
| @@ -259,14 +259,14 @@ | |||
| 259 | */ | 259 | */ |
| 260 | #define PCM990_AC97_IRQ_GPIO 10 | 260 | #define PCM990_AC97_IRQ_GPIO 10 |
| 261 | #define PCM990_AC97_IRQ IRQ_GPIO(PCM990_AC97_IRQ_GPIO) | 261 | #define PCM990_AC97_IRQ IRQ_GPIO(PCM990_AC97_IRQ_GPIO) |
| 262 | #define PCM990_AC97_IRQ_EDGE IRQT_RISING | 262 | #define PCM990_AC97_IRQ_EDGE IRQ_TYPE_EDGE_RISING |
| 263 | 263 | ||
| 264 | /* | 264 | /* |
| 265 | * MMC phyCORE | 265 | * MMC phyCORE |
| 266 | */ | 266 | */ |
| 267 | #define PCM990_MMC0_IRQ_GPIO 9 | 267 | #define PCM990_MMC0_IRQ_GPIO 9 |
| 268 | #define PCM990_MMC0_IRQ IRQ_GPIO(PCM990_MMC0_IRQ_GPIO) | 268 | #define PCM990_MMC0_IRQ IRQ_GPIO(PCM990_MMC0_IRQ_GPIO) |
| 269 | #define PCM990_MMC0_IRQ_EDGE IRQT_FALLING | 269 | #define PCM990_MMC0_IRQ_EDGE IRQ_TYPE_EDGE_FALLING |
| 270 | 270 | ||
| 271 | /* | 271 | /* |
| 272 | * USB phyCore | 272 | * USB phyCore |
diff --git a/include/asm-arm/arch-pxa/pxa25x-udc.h b/include/asm-arm/arch-pxa/pxa25x-udc.h index 840305916b6d..1b80a4805a60 100644 --- a/include/asm-arm/arch-pxa/pxa25x-udc.h +++ b/include/asm-arm/arch-pxa/pxa25x-udc.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | #define _ASM_ARCH_PXA25X_UDC_H | 2 | #define _ASM_ARCH_PXA25X_UDC_H |
| 3 | 3 | ||
| 4 | #ifdef _ASM_ARCH_PXA27X_UDC_H | 4 | #ifdef _ASM_ARCH_PXA27X_UDC_H |
| 5 | #error You can't include both PXA25x and PXA27x UDC support | 5 | #error "You can't include both PXA25x and PXA27x UDC support" |
| 6 | #endif | 6 | #endif |
| 7 | 7 | ||
| 8 | #define UDC_RES1 __REG(0x40600004) /* UDC Undocumented - Reserved1 */ | 8 | #define UDC_RES1 __REG(0x40600004) /* UDC Undocumented - Reserved1 */ |
diff --git a/include/asm-arm/arch-sa1100/ide.h b/include/asm-arm/arch-sa1100/ide.h index b14cbda01dc3..193f6c15f4dd 100644 --- a/include/asm-arm/arch-sa1100/ide.h +++ b/include/asm-arm/arch-sa1100/ide.h | |||
| @@ -61,7 +61,7 @@ ide_init_default_hwifs(void) | |||
| 61 | 61 | ||
| 62 | /* Enable GPIO as interrupt line */ | 62 | /* Enable GPIO as interrupt line */ |
| 63 | GPDR &= ~LART_GPIO_IDE; | 63 | GPDR &= ~LART_GPIO_IDE; |
| 64 | set_irq_type(LART_IRQ_IDE, IRQT_RISING); | 64 | set_irq_type(LART_IRQ_IDE, IRQ_TYPE_EDGE_RISING); |
| 65 | 65 | ||
| 66 | /* set PCMCIA interface timing */ | 66 | /* set PCMCIA interface timing */ |
| 67 | MECR = 0x00060006; | 67 | MECR = 0x00060006; |
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h index 5c60bfc1a84d..9a1db20e032a 100644 --- a/include/asm-arm/bitops.h +++ b/include/asm-arm/bitops.h | |||
| @@ -277,9 +277,16 @@ static inline int constant_fls(int x) | |||
| 277 | * the clz instruction for much better code efficiency. | 277 | * the clz instruction for much better code efficiency. |
| 278 | */ | 278 | */ |
| 279 | 279 | ||
| 280 | #define fls(x) \ | 280 | #define __fls(x) \ |
| 281 | ( __builtin_constant_p(x) ? constant_fls(x) : \ | 281 | ( __builtin_constant_p(x) ? constant_fls(x) : \ |
| 282 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) | 282 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) |
| 283 | |||
| 284 | /* Implement fls() in C so that 64-bit args are suitably truncated */ | ||
| 285 | static inline int fls(int x) | ||
| 286 | { | ||
| 287 | return __fls(x); | ||
| 288 | } | ||
| 289 | |||
| 283 | #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); }) | 290 | #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); }) |
| 284 | #define __ffs(x) (ffs(x) - 1) | 291 | #define __ffs(x) (ffs(x) - 1) |
| 285 | #define ffz(x) __ffs( ~(x) ) | 292 | #define ffz(x) __ffs( ~(x) ) |
diff --git a/include/asm-arm/cacheflush.h b/include/asm-arm/cacheflush.h index 03cf1ee977b7..e68a1cbcc852 100644 --- a/include/asm-arm/cacheflush.h +++ b/include/asm-arm/cacheflush.h | |||
| @@ -459,15 +459,19 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt, | |||
| 459 | #define __cacheid_vivt_asid_tagged_instr(val) (__cacheid_type_v7(val) ? ((val & (3 << 14)) == (1 << 14)) : 0) | 459 | #define __cacheid_vivt_asid_tagged_instr(val) (__cacheid_type_v7(val) ? ((val & (3 << 14)) == (1 << 14)) : 0) |
| 460 | 460 | ||
| 461 | #if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT) | 461 | #if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT) |
| 462 | 462 | /* | |
| 463 | * VIVT caches only | ||
| 464 | */ | ||
| 463 | #define cache_is_vivt() 1 | 465 | #define cache_is_vivt() 1 |
| 464 | #define cache_is_vipt() 0 | 466 | #define cache_is_vipt() 0 |
| 465 | #define cache_is_vipt_nonaliasing() 0 | 467 | #define cache_is_vipt_nonaliasing() 0 |
| 466 | #define cache_is_vipt_aliasing() 0 | 468 | #define cache_is_vipt_aliasing() 0 |
| 467 | #define icache_is_vivt_asid_tagged() 0 | 469 | #define icache_is_vivt_asid_tagged() 0 |
| 468 | 470 | ||
| 469 | #elif defined(CONFIG_CPU_CACHE_VIPT) | 471 | #elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT) |
| 470 | 472 | /* | |
| 473 | * VIPT caches only | ||
| 474 | */ | ||
| 471 | #define cache_is_vivt() 0 | 475 | #define cache_is_vivt() 0 |
| 472 | #define cache_is_vipt() 1 | 476 | #define cache_is_vipt() 1 |
| 473 | #define cache_is_vipt_nonaliasing() \ | 477 | #define cache_is_vipt_nonaliasing() \ |
| @@ -489,7 +493,12 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt, | |||
| 489 | }) | 493 | }) |
| 490 | 494 | ||
| 491 | #else | 495 | #else |
| 492 | 496 | /* | |
| 497 | * VIVT or VIPT caches. Note that this is unreliable since ARM926 | ||
| 498 | * and V6 CPUs satisfy the "(val & (15 << 25)) == (14 << 25)" test. | ||
| 499 | * There's no way to tell from the CacheType register what type (!) | ||
| 500 | * the cache is. | ||
| 501 | */ | ||
| 493 | #define cache_is_vivt() \ | 502 | #define cache_is_vivt() \ |
| 494 | ({ \ | 503 | ({ \ |
| 495 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ | 504 | unsigned int __val = read_cpuid(CPUID_CACHETYPE); \ |
diff --git a/include/asm-arm/irq.h b/include/asm-arm/irq.h index 1b882a255e35..9cb01907e43b 100644 --- a/include/asm-arm/irq.h +++ b/include/asm-arm/irq.h | |||
| @@ -19,23 +19,6 @@ | |||
| 19 | #define NO_IRQ ((unsigned int)(-1)) | 19 | #define NO_IRQ ((unsigned int)(-1)) |
| 20 | #endif | 20 | #endif |
| 21 | 21 | ||
| 22 | |||
| 23 | /* | ||
| 24 | * Migration helpers | ||
| 25 | */ | ||
| 26 | #define __IRQT_FALEDGE IRQ_TYPE_EDGE_FALLING | ||
| 27 | #define __IRQT_RISEDGE IRQ_TYPE_EDGE_RISING | ||
| 28 | #define __IRQT_LOWLVL IRQ_TYPE_LEVEL_LOW | ||
| 29 | #define __IRQT_HIGHLVL IRQ_TYPE_LEVEL_HIGH | ||
| 30 | |||
| 31 | #define IRQT_NOEDGE (0) | ||
| 32 | #define IRQT_RISING (__IRQT_RISEDGE) | ||
| 33 | #define IRQT_FALLING (__IRQT_FALEDGE) | ||
| 34 | #define IRQT_BOTHEDGE (__IRQT_RISEDGE|__IRQT_FALEDGE) | ||
| 35 | #define IRQT_LOW (__IRQT_LOWLVL) | ||
| 36 | #define IRQT_HIGH (__IRQT_HIGHLVL) | ||
| 37 | #define IRQT_PROBE IRQ_TYPE_PROBE | ||
| 38 | |||
| 39 | #ifndef __ASSEMBLY__ | 22 | #ifndef __ASSEMBLY__ |
| 40 | struct irqaction; | 23 | struct irqaction; |
| 41 | extern void migrate_irqs(void); | 24 | extern void migrate_irqs(void); |
diff --git a/include/asm-arm/pci.h b/include/asm-arm/pci.h index 75feb1574a69..2d84792f2e12 100644 --- a/include/asm-arm/pci.h +++ b/include/asm-arm/pci.h | |||
| @@ -78,6 +78,14 @@ pcibios_select_root(struct pci_dev *pdev, struct resource *res) | |||
| 78 | return root; | 78 | return root; |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | /* | ||
| 82 | * Dummy implementation; always return 0. | ||
| 83 | */ | ||
| 84 | static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | ||
| 85 | { | ||
| 86 | return 0; | ||
| 87 | } | ||
| 88 | |||
| 81 | #endif /* __KERNEL__ */ | 89 | #endif /* __KERNEL__ */ |
| 82 | 90 | ||
| 83 | #endif | 91 | #endif |
diff --git a/include/asm-avr32/arch-at32ap/board.h b/include/asm-avr32/arch-at32ap/board.h index 893aa6d0cd11..e60e9076544d 100644 --- a/include/asm-avr32/arch-at32ap/board.h +++ b/include/asm-avr32/arch-at32ap/board.h | |||
| @@ -82,7 +82,15 @@ struct mci_platform_data; | |||
| 82 | struct platform_device * | 82 | struct platform_device * |
| 83 | at32_add_device_mci(unsigned int id, struct mci_platform_data *data); | 83 | at32_add_device_mci(unsigned int id, struct mci_platform_data *data); |
| 84 | 84 | ||
| 85 | struct platform_device *at32_add_device_ac97c(unsigned int id); | 85 | struct ac97c_platform_data { |
| 86 | unsigned short dma_rx_periph_id; | ||
| 87 | unsigned short dma_tx_periph_id; | ||
| 88 | unsigned short dma_controller_id; | ||
| 89 | int reset_pin; | ||
| 90 | }; | ||
| 91 | struct platform_device * | ||
| 92 | at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data); | ||
| 93 | |||
| 86 | struct platform_device *at32_add_device_abdac(unsigned int id); | 94 | struct platform_device *at32_add_device_abdac(unsigned int id); |
| 87 | struct platform_device *at32_add_device_psif(unsigned int id); | 95 | struct platform_device *at32_add_device_psif(unsigned int id); |
| 88 | 96 | ||
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 9cd44b162ba1..6d88a923c945 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -221,6 +221,7 @@ | |||
| 221 | * during second ld run in second ld pass when generating System.map */ | 221 | * during second ld run in second ld pass when generating System.map */ |
| 222 | #define TEXT_TEXT \ | 222 | #define TEXT_TEXT \ |
| 223 | ALIGN_FUNCTION(); \ | 223 | ALIGN_FUNCTION(); \ |
| 224 | *(.text.hot) \ | ||
| 224 | *(.text) \ | 225 | *(.text) \ |
| 225 | *(.ref.text) \ | 226 | *(.ref.text) \ |
| 226 | *(.text.init.refok) \ | 227 | *(.text.init.refok) \ |
| @@ -230,7 +231,8 @@ | |||
| 230 | CPU_KEEP(init.text) \ | 231 | CPU_KEEP(init.text) \ |
| 231 | CPU_KEEP(exit.text) \ | 232 | CPU_KEEP(exit.text) \ |
| 232 | MEM_KEEP(init.text) \ | 233 | MEM_KEEP(init.text) \ |
| 233 | MEM_KEEP(exit.text) | 234 | MEM_KEEP(exit.text) \ |
| 235 | *(.text.unlikely) | ||
| 234 | 236 | ||
| 235 | 237 | ||
| 236 | /* sched.text is aling to function alignment to secure we have same | 238 | /* sched.text is aling to function alignment to secure we have same |
diff --git a/include/asm-powerpc/kvm_ppc.h b/include/asm-powerpc/kvm_ppc.h index 5a21115228af..a8b068792260 100644 --- a/include/asm-powerpc/kvm_ppc.h +++ b/include/asm-powerpc/kvm_ppc.h | |||
| @@ -61,7 +61,8 @@ extern int kvmppc_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu); | |||
| 61 | 61 | ||
| 62 | extern void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, | 62 | extern void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, |
| 63 | u64 asid, u32 flags); | 63 | u64 asid, u32 flags); |
| 64 | extern void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, u64 eaddr, u64 asid); | 64 | extern void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, gva_t eaddr, |
| 65 | gva_t eend, u32 asid); | ||
| 65 | extern void kvmppc_mmu_priv_switch(struct kvm_vcpu *vcpu, int usermode); | 66 | extern void kvmppc_mmu_priv_switch(struct kvm_vcpu *vcpu, int usermode); |
| 66 | 67 | ||
| 67 | extern void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu); | 68 | extern void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu); |
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h index 3234dd5b3511..3c55e4107dcc 100644 --- a/include/asm-s390/kvm_host.h +++ b/include/asm-s390/kvm_host.h | |||
| @@ -111,7 +111,7 @@ struct kvm_vcpu_stat { | |||
| 111 | u32 exit_validity; | 111 | u32 exit_validity; |
| 112 | u32 exit_instruction; | 112 | u32 exit_instruction; |
| 113 | u32 instruction_lctl; | 113 | u32 instruction_lctl; |
| 114 | u32 instruction_lctg; | 114 | u32 instruction_lctlg; |
| 115 | u32 exit_program_interruption; | 115 | u32 exit_program_interruption; |
| 116 | u32 exit_instr_and_program; | 116 | u32 exit_instr_and_program; |
| 117 | u32 deliver_emergency_signal; | 117 | u32 deliver_emergency_signal; |
| @@ -231,5 +231,5 @@ struct kvm_arch{ | |||
| 231 | struct kvm_s390_float_interrupt float_int; | 231 | struct kvm_s390_float_interrupt float_int; |
| 232 | }; | 232 | }; |
| 233 | 233 | ||
| 234 | extern int sie64a(struct kvm_s390_sie_block *, __u64 *); | 234 | extern int sie64a(struct kvm_s390_sie_block *, unsigned long *); |
| 235 | #endif | 235 | #endif |
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index fdde0bedaa90..bc34dc21f178 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h | |||
| @@ -556,6 +556,7 @@ int kvm_fix_hypercall(struct kvm_vcpu *vcpu); | |||
| 556 | int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code); | 556 | int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code); |
| 557 | 557 | ||
| 558 | void kvm_enable_tdp(void); | 558 | void kvm_enable_tdp(void); |
| 559 | void kvm_disable_tdp(void); | ||
| 559 | 560 | ||
| 560 | int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3); | 561 | int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3); |
| 561 | int complete_pio(struct kvm_vcpu *vcpu); | 562 | int complete_pio(struct kvm_vcpu *vcpu); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index ffe479ba0779..35a78415accc 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -748,6 +748,7 @@ | |||
| 748 | #define PCI_VENDOR_ID_TI 0x104c | 748 | #define PCI_VENDOR_ID_TI 0x104c |
| 749 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 | 749 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 |
| 750 | #define PCI_DEVICE_ID_TI_4450 0x8011 | 750 | #define PCI_DEVICE_ID_TI_4450 0x8011 |
| 751 | #define PCI_DEVICE_ID_TI_TSB43AB22 0x8023 | ||
| 751 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 | 752 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 |
| 752 | #define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033 | 753 | #define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033 |
| 753 | #define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 | 754 | #define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034 |
diff --git a/include/linux/sched.h b/include/linux/sched.h index f59318a0099b..5270d449ff9d 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -505,9 +505,6 @@ struct signal_struct { | |||
| 505 | unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; | 505 | unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; |
| 506 | unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; | 506 | unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; |
| 507 | unsigned long inblock, oublock, cinblock, coublock; | 507 | unsigned long inblock, oublock, cinblock, coublock; |
| 508 | #ifdef CONFIG_TASK_XACCT | ||
| 509 | u64 rchar, wchar, syscr, syscw; | ||
| 510 | #endif | ||
| 511 | struct task_io_accounting ioac; | 508 | struct task_io_accounting ioac; |
| 512 | 509 | ||
| 513 | /* | 510 | /* |
| @@ -1256,10 +1253,6 @@ struct task_struct { | |||
| 1256 | 1253 | ||
| 1257 | unsigned long ptrace_message; | 1254 | unsigned long ptrace_message; |
| 1258 | siginfo_t *last_siginfo; /* For ptrace use. */ | 1255 | siginfo_t *last_siginfo; /* For ptrace use. */ |
| 1259 | #ifdef CONFIG_TASK_XACCT | ||
| 1260 | /* i/o counters(bytes read/written, #syscalls */ | ||
| 1261 | u64 rchar, wchar, syscr, syscw; | ||
| 1262 | #endif | ||
| 1263 | struct task_io_accounting ioac; | 1256 | struct task_io_accounting ioac; |
| 1264 | #if defined(CONFIG_TASK_XACCT) | 1257 | #if defined(CONFIG_TASK_XACCT) |
| 1265 | u64 acct_rss_mem1; /* accumulated rss usage */ | 1258 | u64 acct_rss_mem1; /* accumulated rss usage */ |
| @@ -2190,22 +2183,22 @@ extern long sched_group_rt_period(struct task_group *tg); | |||
| 2190 | #ifdef CONFIG_TASK_XACCT | 2183 | #ifdef CONFIG_TASK_XACCT |
| 2191 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) | 2184 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) |
| 2192 | { | 2185 | { |
| 2193 | tsk->rchar += amt; | 2186 | tsk->ioac.rchar += amt; |
| 2194 | } | 2187 | } |
| 2195 | 2188 | ||
| 2196 | static inline void add_wchar(struct task_struct *tsk, ssize_t amt) | 2189 | static inline void add_wchar(struct task_struct *tsk, ssize_t amt) |
| 2197 | { | 2190 | { |
| 2198 | tsk->wchar += amt; | 2191 | tsk->ioac.wchar += amt; |
| 2199 | } | 2192 | } |
| 2200 | 2193 | ||
| 2201 | static inline void inc_syscr(struct task_struct *tsk) | 2194 | static inline void inc_syscr(struct task_struct *tsk) |
| 2202 | { | 2195 | { |
| 2203 | tsk->syscr++; | 2196 | tsk->ioac.syscr++; |
| 2204 | } | 2197 | } |
| 2205 | 2198 | ||
| 2206 | static inline void inc_syscw(struct task_struct *tsk) | 2199 | static inline void inc_syscw(struct task_struct *tsk) |
| 2207 | { | 2200 | { |
| 2208 | tsk->syscw++; | 2201 | tsk->ioac.syscw++; |
| 2209 | } | 2202 | } |
| 2210 | #else | 2203 | #else |
| 2211 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) | 2204 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) |
diff --git a/include/linux/task_io_accounting.h b/include/linux/task_io_accounting.h index 44d00e9cceea..5e88afc9a2fb 100644 --- a/include/linux/task_io_accounting.h +++ b/include/linux/task_io_accounting.h | |||
| @@ -8,8 +8,19 @@ | |||
| 8 | * Blame akpm@osdl.org for all this. | 8 | * Blame akpm@osdl.org for all this. |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #ifdef CONFIG_TASK_IO_ACCOUNTING | ||
| 12 | struct task_io_accounting { | 11 | struct task_io_accounting { |
| 12 | #ifdef CONFIG_TASK_XACCT | ||
| 13 | /* bytes read */ | ||
| 14 | u64 rchar; | ||
| 15 | /* bytes written */ | ||
| 16 | u64 wchar; | ||
| 17 | /* # of read syscalls */ | ||
| 18 | u64 syscr; | ||
| 19 | /* # of write syscalls */ | ||
| 20 | u64 syscw; | ||
| 21 | #endif /* CONFIG_TASK_XACCT */ | ||
| 22 | |||
| 23 | #ifdef CONFIG_TASK_IO_ACCOUNTING | ||
| 13 | /* | 24 | /* |
| 14 | * The number of bytes which this task has caused to be read from | 25 | * The number of bytes which this task has caused to be read from |
| 15 | * storage. | 26 | * storage. |
| @@ -30,8 +41,5 @@ struct task_io_accounting { | |||
| 30 | * information loss in doing that. | 41 | * information loss in doing that. |
| 31 | */ | 42 | */ |
| 32 | u64 cancelled_write_bytes; | 43 | u64 cancelled_write_bytes; |
| 44 | #endif /* CONFIG_TASK_IO_ACCOUNTING */ | ||
| 33 | }; | 45 | }; |
| 34 | #else | ||
| 35 | struct task_io_accounting { | ||
| 36 | }; | ||
| 37 | #endif | ||
diff --git a/include/linux/task_io_accounting_ops.h b/include/linux/task_io_accounting_ops.h index ff46c6fad79d..4d090f9ee608 100644 --- a/include/linux/task_io_accounting_ops.h +++ b/include/linux/task_io_accounting_ops.h | |||
| @@ -40,9 +40,17 @@ static inline void task_io_account_cancelled_write(size_t bytes) | |||
| 40 | current->ioac.cancelled_write_bytes += bytes; | 40 | current->ioac.cancelled_write_bytes += bytes; |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | static inline void task_io_accounting_init(struct task_struct *tsk) | 43 | static inline void task_io_accounting_init(struct task_io_accounting *ioac) |
| 44 | { | 44 | { |
| 45 | memset(&tsk->ioac, 0, sizeof(tsk->ioac)); | 45 | memset(ioac, 0, sizeof(*ioac)); |
| 46 | } | ||
| 47 | |||
| 48 | static inline void task_blk_io_accounting_add(struct task_io_accounting *dst, | ||
| 49 | struct task_io_accounting *src) | ||
| 50 | { | ||
| 51 | dst->read_bytes += src->read_bytes; | ||
| 52 | dst->write_bytes += src->write_bytes; | ||
| 53 | dst->cancelled_write_bytes += src->cancelled_write_bytes; | ||
| 46 | } | 54 | } |
| 47 | 55 | ||
| 48 | #else | 56 | #else |
| @@ -69,9 +77,37 @@ static inline void task_io_account_cancelled_write(size_t bytes) | |||
| 69 | { | 77 | { |
| 70 | } | 78 | } |
| 71 | 79 | ||
| 72 | static inline void task_io_accounting_init(struct task_struct *tsk) | 80 | static inline void task_io_accounting_init(struct task_io_accounting *ioac) |
| 81 | { | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void task_blk_io_accounting_add(struct task_io_accounting *dst, | ||
| 85 | struct task_io_accounting *src) | ||
| 73 | { | 86 | { |
| 74 | } | 87 | } |
| 75 | 88 | ||
| 76 | #endif /* CONFIG_TASK_IO_ACCOUNTING */ | 89 | #endif /* CONFIG_TASK_IO_ACCOUNTING */ |
| 77 | #endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */ | 90 | |
| 91 | #ifdef CONFIG_TASK_XACCT | ||
| 92 | static inline void task_chr_io_accounting_add(struct task_io_accounting *dst, | ||
| 93 | struct task_io_accounting *src) | ||
| 94 | { | ||
| 95 | dst->rchar += src->rchar; | ||
| 96 | dst->wchar += src->wchar; | ||
| 97 | dst->syscr += src->syscr; | ||
| 98 | dst->syscw += src->syscw; | ||
| 99 | } | ||
| 100 | #else | ||
| 101 | static inline void task_chr_io_accounting_add(struct task_io_accounting *dst, | ||
| 102 | struct task_io_accounting *src) | ||
| 103 | { | ||
| 104 | } | ||
| 105 | #endif /* CONFIG_TASK_XACCT */ | ||
| 106 | |||
| 107 | static inline void task_io_accounting_add(struct task_io_accounting *dst, | ||
| 108 | struct task_io_accounting *src) | ||
| 109 | { | ||
| 110 | task_chr_io_accounting_add(dst, src); | ||
| 111 | task_blk_io_accounting_add(dst, src); | ||
| 112 | } | ||
| 113 | #endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */ | ||
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 00137a7769ee..5c40cc537d4c 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -106,6 +106,7 @@ | |||
| 106 | #define VARIABLE_LENGTH_CMD 0x7f | 106 | #define VARIABLE_LENGTH_CMD 0x7f |
| 107 | #define REPORT_LUNS 0xa0 | 107 | #define REPORT_LUNS 0xa0 |
| 108 | #define MAINTENANCE_IN 0xa3 | 108 | #define MAINTENANCE_IN 0xa3 |
| 109 | #define MAINTENANCE_OUT 0xa4 | ||
| 109 | #define MOVE_MEDIUM 0xa5 | 110 | #define MOVE_MEDIUM 0xa5 |
| 110 | #define EXCHANGE_MEDIUM 0xa6 | 111 | #define EXCHANGE_MEDIUM 0xa6 |
| 111 | #define READ_12 0xa8 | 112 | #define READ_12 0xa8 |
| @@ -125,6 +126,8 @@ | |||
| 125 | #define SAI_READ_CAPACITY_16 0x10 | 126 | #define SAI_READ_CAPACITY_16 0x10 |
| 126 | /* values for maintenance in */ | 127 | /* values for maintenance in */ |
| 127 | #define MI_REPORT_TARGET_PGS 0x0a | 128 | #define MI_REPORT_TARGET_PGS 0x0a |
| 129 | /* values for maintenance out */ | ||
| 130 | #define MO_SET_TARGET_PGS 0x0a | ||
| 128 | 131 | ||
| 129 | /* Values for T10/04-262r7 */ | 132 | /* Values for T10/04-262r7 */ |
| 130 | #define ATA_16 0x85 /* 16-byte pass-thru */ | 133 | #define ATA_16 0x85 /* 16-byte pass-thru */ |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 66c944849d6b..f9f6e793575c 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -77,6 +77,9 @@ struct scsi_cmnd { | |||
| 77 | int allowed; | 77 | int allowed; |
| 78 | int timeout_per_command; | 78 | int timeout_per_command; |
| 79 | 79 | ||
| 80 | unsigned char prot_op; | ||
| 81 | unsigned char prot_type; | ||
| 82 | |||
| 80 | unsigned short cmd_len; | 83 | unsigned short cmd_len; |
| 81 | enum dma_data_direction sc_data_direction; | 84 | enum dma_data_direction sc_data_direction; |
| 82 | 85 | ||
| @@ -87,6 +90,8 @@ struct scsi_cmnd { | |||
| 87 | 90 | ||
| 88 | /* These elements define the operation we ultimately want to perform */ | 91 | /* These elements define the operation we ultimately want to perform */ |
| 89 | struct scsi_data_buffer sdb; | 92 | struct scsi_data_buffer sdb; |
| 93 | struct scsi_data_buffer *prot_sdb; | ||
| 94 | |||
| 90 | unsigned underflow; /* Return error if less than | 95 | unsigned underflow; /* Return error if less than |
| 91 | this amount is transferred */ | 96 | this amount is transferred */ |
| 92 | 97 | ||
| @@ -208,4 +213,85 @@ static inline int scsi_sg_copy_to_buffer(struct scsi_cmnd *cmd, | |||
| 208 | buf, buflen); | 213 | buf, buflen); |
| 209 | } | 214 | } |
| 210 | 215 | ||
| 216 | /* | ||
| 217 | * The operations below are hints that tell the controller driver how | ||
| 218 | * to handle I/Os with DIF or similar types of protection information. | ||
| 219 | */ | ||
| 220 | enum scsi_prot_operations { | ||
| 221 | /* Normal I/O */ | ||
| 222 | SCSI_PROT_NORMAL = 0, | ||
| 223 | |||
| 224 | /* OS-HBA: Protected, HBA-Target: Unprotected */ | ||
| 225 | SCSI_PROT_READ_INSERT, | ||
| 226 | SCSI_PROT_WRITE_STRIP, | ||
| 227 | |||
| 228 | /* OS-HBA: Unprotected, HBA-Target: Protected */ | ||
| 229 | SCSI_PROT_READ_STRIP, | ||
| 230 | SCSI_PROT_WRITE_INSERT, | ||
| 231 | |||
| 232 | /* OS-HBA: Protected, HBA-Target: Protected */ | ||
| 233 | SCSI_PROT_READ_PASS, | ||
| 234 | SCSI_PROT_WRITE_PASS, | ||
| 235 | |||
| 236 | /* OS-HBA: Protected, HBA-Target: Protected, checksum conversion */ | ||
| 237 | SCSI_PROT_READ_CONVERT, | ||
| 238 | SCSI_PROT_WRITE_CONVERT, | ||
| 239 | }; | ||
| 240 | |||
| 241 | static inline void scsi_set_prot_op(struct scsi_cmnd *scmd, unsigned char op) | ||
| 242 | { | ||
| 243 | scmd->prot_op = op; | ||
| 244 | } | ||
| 245 | |||
| 246 | static inline unsigned char scsi_get_prot_op(struct scsi_cmnd *scmd) | ||
| 247 | { | ||
| 248 | return scmd->prot_op; | ||
| 249 | } | ||
| 250 | |||
| 251 | /* | ||
| 252 | * The controller usually does not know anything about the target it | ||
| 253 | * is communicating with. However, when DIX is enabled the controller | ||
| 254 | * must be know target type so it can verify the protection | ||
| 255 | * information passed along with the I/O. | ||
| 256 | */ | ||
| 257 | enum scsi_prot_target_type { | ||
| 258 | SCSI_PROT_DIF_TYPE0 = 0, | ||
| 259 | SCSI_PROT_DIF_TYPE1, | ||
| 260 | SCSI_PROT_DIF_TYPE2, | ||
| 261 | SCSI_PROT_DIF_TYPE3, | ||
| 262 | }; | ||
| 263 | |||
| 264 | static inline void scsi_set_prot_type(struct scsi_cmnd *scmd, unsigned char type) | ||
| 265 | { | ||
| 266 | scmd->prot_type = type; | ||
| 267 | } | ||
| 268 | |||
| 269 | static inline unsigned char scsi_get_prot_type(struct scsi_cmnd *scmd) | ||
| 270 | { | ||
| 271 | return scmd->prot_type; | ||
| 272 | } | ||
| 273 | |||
| 274 | static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd) | ||
| 275 | { | ||
| 276 | return scmd->request->sector; | ||
| 277 | } | ||
| 278 | |||
| 279 | static inline unsigned scsi_prot_sg_count(struct scsi_cmnd *cmd) | ||
| 280 | { | ||
| 281 | return cmd->prot_sdb ? cmd->prot_sdb->table.nents : 0; | ||
| 282 | } | ||
| 283 | |||
| 284 | static inline struct scatterlist *scsi_prot_sglist(struct scsi_cmnd *cmd) | ||
| 285 | { | ||
| 286 | return cmd->prot_sdb ? cmd->prot_sdb->table.sgl : NULL; | ||
| 287 | } | ||
| 288 | |||
| 289 | static inline struct scsi_data_buffer *scsi_prot(struct scsi_cmnd *cmd) | ||
| 290 | { | ||
| 291 | return cmd->prot_sdb; | ||
| 292 | } | ||
| 293 | |||
| 294 | #define scsi_for_each_prot_sg(cmd, sg, nseg, __i) \ | ||
| 295 | for_each_sg(scsi_prot_sglist(cmd), sg, nseg, __i) | ||
| 296 | |||
| 211 | #endif /* _SCSI_SCSI_CMND_H */ | 297 | #endif /* _SCSI_SCSI_CMND_H */ |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 6467f78b191f..291d56a19167 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -140,7 +140,8 @@ struct scsi_device { | |||
| 140 | unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */ | 140 | unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */ |
| 141 | unsigned guess_capacity:1; /* READ_CAPACITY might be too high by 1 */ | 141 | unsigned guess_capacity:1; /* READ_CAPACITY might be too high by 1 */ |
| 142 | unsigned retry_hwerror:1; /* Retry HARDWARE_ERROR */ | 142 | unsigned retry_hwerror:1; /* Retry HARDWARE_ERROR */ |
| 143 | unsigned last_sector_bug:1; /* Always read last sector in a 1 sector read */ | 143 | unsigned last_sector_bug:1; /* do not use multisector accesses on |
| 144 | SD_LAST_BUGGY_SECTORS */ | ||
| 144 | 145 | ||
| 145 | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ | 146 | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ |
| 146 | struct list_head event_list; /* asserted events */ | 147 | struct list_head event_list; /* asserted events */ |
| @@ -167,15 +168,22 @@ struct scsi_device { | |||
| 167 | unsigned long sdev_data[0]; | 168 | unsigned long sdev_data[0]; |
| 168 | } __attribute__((aligned(sizeof(unsigned long)))); | 169 | } __attribute__((aligned(sizeof(unsigned long)))); |
| 169 | 170 | ||
| 171 | struct scsi_dh_devlist { | ||
| 172 | char *vendor; | ||
| 173 | char *model; | ||
| 174 | }; | ||
| 175 | |||
| 170 | struct scsi_device_handler { | 176 | struct scsi_device_handler { |
| 171 | /* Used by the infrastructure */ | 177 | /* Used by the infrastructure */ |
| 172 | struct list_head list; /* list of scsi_device_handlers */ | 178 | struct list_head list; /* list of scsi_device_handlers */ |
| 173 | struct notifier_block nb; | ||
| 174 | 179 | ||
| 175 | /* Filled by the hardware handler */ | 180 | /* Filled by the hardware handler */ |
| 176 | struct module *module; | 181 | struct module *module; |
| 177 | const char *name; | 182 | const char *name; |
| 183 | const struct scsi_dh_devlist *devlist; | ||
| 178 | int (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *); | 184 | int (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *); |
| 185 | int (*attach)(struct scsi_device *); | ||
| 186 | void (*detach)(struct scsi_device *); | ||
| 179 | int (*activate)(struct scsi_device *); | 187 | int (*activate)(struct scsi_device *); |
| 180 | int (*prep_fn)(struct scsi_device *, struct request *); | 188 | int (*prep_fn)(struct scsi_device *, struct request *); |
| 181 | }; | 189 | }; |
| @@ -416,6 +424,11 @@ static inline int scsi_device_enclosure(struct scsi_device *sdev) | |||
| 416 | return sdev->inquiry[6] & (1<<6); | 424 | return sdev->inquiry[6] & (1<<6); |
| 417 | } | 425 | } |
| 418 | 426 | ||
| 427 | static inline int scsi_device_protection(struct scsi_device *sdev) | ||
| 428 | { | ||
| 429 | return sdev->inquiry[5] & (1<<0); | ||
| 430 | } | ||
| 431 | |||
| 419 | #define MODULE_ALIAS_SCSI_DEVICE(type) \ | 432 | #define MODULE_ALIAS_SCSI_DEVICE(type) \ |
| 420 | MODULE_ALIAS("scsi:t-" __stringify(type) "*") | 433 | MODULE_ALIAS("scsi:t-" __stringify(type) "*") |
| 421 | #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x" | 434 | #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x" |
diff --git a/include/scsi/scsi_dh.h b/include/scsi/scsi_dh.h index 3ad2303d1a16..33efce20c26c 100644 --- a/include/scsi/scsi_dh.h +++ b/include/scsi/scsi_dh.h | |||
| @@ -32,6 +32,7 @@ enum { | |||
| 32 | */ | 32 | */ |
| 33 | SCSI_DH_DEV_FAILED, /* generic device error */ | 33 | SCSI_DH_DEV_FAILED, /* generic device error */ |
| 34 | SCSI_DH_DEV_TEMP_BUSY, | 34 | SCSI_DH_DEV_TEMP_BUSY, |
| 35 | SCSI_DH_DEV_UNSUPP, /* device handler not supported */ | ||
| 35 | SCSI_DH_DEVICE_MAX, /* max device blkerr definition */ | 36 | SCSI_DH_DEVICE_MAX, /* max device blkerr definition */ |
| 36 | 37 | ||
| 37 | /* | 38 | /* |
| @@ -57,6 +58,8 @@ enum { | |||
| 57 | #if defined(CONFIG_SCSI_DH) || defined(CONFIG_SCSI_DH_MODULE) | 58 | #if defined(CONFIG_SCSI_DH) || defined(CONFIG_SCSI_DH_MODULE) |
| 58 | extern int scsi_dh_activate(struct request_queue *); | 59 | extern int scsi_dh_activate(struct request_queue *); |
| 59 | extern int scsi_dh_handler_exist(const char *); | 60 | extern int scsi_dh_handler_exist(const char *); |
| 61 | extern int scsi_dh_attach(struct request_queue *, const char *); | ||
| 62 | extern void scsi_dh_detach(struct request_queue *); | ||
| 60 | #else | 63 | #else |
| 61 | static inline int scsi_dh_activate(struct request_queue *req) | 64 | static inline int scsi_dh_activate(struct request_queue *req) |
| 62 | { | 65 | { |
| @@ -66,4 +69,12 @@ static inline int scsi_dh_handler_exist(const char *name) | |||
| 66 | { | 69 | { |
| 67 | return 0; | 70 | return 0; |
| 68 | } | 71 | } |
| 72 | static inline int scsi_dh_attach(struct request_queue *req, const char *name) | ||
| 73 | { | ||
| 74 | return SCSI_DH_NOSYS; | ||
| 75 | } | ||
| 76 | static inline void scsi_dh_detach(struct request_queue *q) | ||
| 77 | { | ||
| 78 | return; | ||
| 79 | } | ||
| 69 | #endif | 80 | #endif |
diff --git a/include/scsi/scsi_eh.h b/include/scsi/scsi_eh.h index 2a9add21267d..06a8790893ef 100644 --- a/include/scsi/scsi_eh.h +++ b/include/scsi/scsi_eh.h | |||
| @@ -74,7 +74,9 @@ struct scsi_eh_save { | |||
| 74 | /* saved state */ | 74 | /* saved state */ |
| 75 | int result; | 75 | int result; |
| 76 | enum dma_data_direction data_direction; | 76 | enum dma_data_direction data_direction; |
| 77 | unsigned underflow; | ||
| 77 | unsigned char cmd_len; | 78 | unsigned char cmd_len; |
| 79 | unsigned char prot_op; | ||
| 78 | unsigned char *cmnd; | 80 | unsigned char *cmnd; |
| 79 | struct scsi_data_buffer sdb; | 81 | struct scsi_data_buffer sdb; |
| 80 | struct request *next_rq; | 82 | struct request *next_rq; |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index a594bac4a77d..44a55d1bf530 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -547,7 +547,7 @@ struct Scsi_Host { | |||
| 547 | unsigned int host_failed; /* commands that failed. */ | 547 | unsigned int host_failed; /* commands that failed. */ |
| 548 | unsigned int host_eh_scheduled; /* EH scheduled without command */ | 548 | unsigned int host_eh_scheduled; /* EH scheduled without command */ |
| 549 | 549 | ||
| 550 | unsigned short host_no; /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */ | 550 | unsigned int host_no; /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */ |
| 551 | int resetting; /* if set, it means that last_reset is a valid value */ | 551 | int resetting; /* if set, it means that last_reset is a valid value */ |
| 552 | unsigned long last_reset; | 552 | unsigned long last_reset; |
| 553 | 553 | ||
| @@ -636,6 +636,10 @@ struct Scsi_Host { | |||
| 636 | */ | 636 | */ |
| 637 | unsigned int max_host_blocked; | 637 | unsigned int max_host_blocked; |
| 638 | 638 | ||
| 639 | /* Protection Information */ | ||
| 640 | unsigned int prot_capabilities; | ||
| 641 | unsigned char prot_guard_type; | ||
| 642 | |||
| 639 | /* | 643 | /* |
| 640 | * q used for scsi_tgt msgs, async events or any other requests that | 644 | * q used for scsi_tgt msgs, async events or any other requests that |
| 641 | * need to be processed in userspace | 645 | * need to be processed in userspace |
| @@ -756,6 +760,86 @@ extern struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost, | |||
| 756 | extern void scsi_free_host_dev(struct scsi_device *); | 760 | extern void scsi_free_host_dev(struct scsi_device *); |
| 757 | extern struct scsi_device *scsi_get_host_dev(struct Scsi_Host *); | 761 | extern struct scsi_device *scsi_get_host_dev(struct Scsi_Host *); |
| 758 | 762 | ||
| 763 | /* | ||
| 764 | * DIF defines the exchange of protection information between | ||
| 765 | * initiator and SBC block device. | ||
| 766 | * | ||
| 767 | * DIX defines the exchange of protection information between OS and | ||
| 768 | * initiator. | ||
| 769 | */ | ||
| 770 | enum scsi_host_prot_capabilities { | ||
| 771 | SHOST_DIF_TYPE1_PROTECTION = 1 << 0, /* T10 DIF Type 1 */ | ||
| 772 | SHOST_DIF_TYPE2_PROTECTION = 1 << 1, /* T10 DIF Type 2 */ | ||
| 773 | SHOST_DIF_TYPE3_PROTECTION = 1 << 2, /* T10 DIF Type 3 */ | ||
| 774 | |||
| 775 | SHOST_DIX_TYPE0_PROTECTION = 1 << 3, /* DIX between OS and HBA only */ | ||
| 776 | SHOST_DIX_TYPE1_PROTECTION = 1 << 4, /* DIX with DIF Type 1 */ | ||
| 777 | SHOST_DIX_TYPE2_PROTECTION = 1 << 5, /* DIX with DIF Type 2 */ | ||
| 778 | SHOST_DIX_TYPE3_PROTECTION = 1 << 6, /* DIX with DIF Type 3 */ | ||
| 779 | }; | ||
| 780 | |||
| 781 | /* | ||
| 782 | * SCSI hosts which support the Data Integrity Extensions must | ||
| 783 | * indicate their capabilities by setting the prot_capabilities using | ||
| 784 | * this call. | ||
| 785 | */ | ||
| 786 | static inline void scsi_host_set_prot(struct Scsi_Host *shost, unsigned int mask) | ||
| 787 | { | ||
| 788 | shost->prot_capabilities = mask; | ||
| 789 | } | ||
| 790 | |||
| 791 | static inline unsigned int scsi_host_get_prot(struct Scsi_Host *shost) | ||
| 792 | { | ||
| 793 | return shost->prot_capabilities; | ||
| 794 | } | ||
| 795 | |||
| 796 | static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type) | ||
| 797 | { | ||
| 798 | switch (target_type) { | ||
| 799 | case 1: return shost->prot_capabilities & SHOST_DIF_TYPE1_PROTECTION; | ||
| 800 | case 2: return shost->prot_capabilities & SHOST_DIF_TYPE2_PROTECTION; | ||
| 801 | case 3: return shost->prot_capabilities & SHOST_DIF_TYPE3_PROTECTION; | ||
| 802 | } | ||
| 803 | |||
| 804 | return 0; | ||
| 805 | } | ||
| 806 | |||
| 807 | static inline unsigned int scsi_host_dix_capable(struct Scsi_Host *shost, unsigned int target_type) | ||
| 808 | { | ||
| 809 | switch (target_type) { | ||
| 810 | case 0: return shost->prot_capabilities & SHOST_DIX_TYPE0_PROTECTION; | ||
| 811 | case 1: return shost->prot_capabilities & SHOST_DIX_TYPE1_PROTECTION; | ||
| 812 | case 2: return shost->prot_capabilities & SHOST_DIX_TYPE2_PROTECTION; | ||
| 813 | case 3: return shost->prot_capabilities & SHOST_DIX_TYPE3_PROTECTION; | ||
| 814 | } | ||
| 815 | |||
| 816 | return 0; | ||
| 817 | } | ||
| 818 | |||
| 819 | /* | ||
| 820 | * All DIX-capable initiators must support the T10-mandated CRC | ||
| 821 | * checksum. Controllers can optionally implement the IP checksum | ||
| 822 | * scheme which has much lower impact on system performance. Note | ||
| 823 | * that the main rationale for the checksum is to match integrity | ||
| 824 | * metadata with data. Detecting bit errors are a job for ECC memory | ||
| 825 | * and buses. | ||
| 826 | */ | ||
| 827 | |||
| 828 | enum scsi_host_guard_type { | ||
| 829 | SHOST_DIX_GUARD_CRC = 1 << 0, | ||
| 830 | SHOST_DIX_GUARD_IP = 1 << 1, | ||
| 831 | }; | ||
| 832 | |||
| 833 | static inline void scsi_host_set_guard(struct Scsi_Host *shost, unsigned char type) | ||
| 834 | { | ||
| 835 | shost->prot_guard_type = type; | ||
| 836 | } | ||
| 837 | |||
| 838 | static inline unsigned char scsi_host_get_guard(struct Scsi_Host *shost) | ||
| 839 | { | ||
| 840 | return shost->prot_guard_type; | ||
| 841 | } | ||
| 842 | |||
| 759 | /* legacy interfaces */ | 843 | /* legacy interfaces */ |
| 760 | extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int); | 844 | extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int); |
| 761 | extern void scsi_unregister(struct Scsi_Host *); | 845 | extern void scsi_unregister(struct Scsi_Host *); |
