diff options
28 files changed, 198 insertions, 114 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index b940424f8ccc..0dc7e3cbeffa 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
| @@ -37,7 +37,6 @@ config SUPERH32 | |||
| 37 | select HAVE_FTRACE_MCOUNT_RECORD | 37 | select HAVE_FTRACE_MCOUNT_RECORD |
| 38 | select HAVE_DYNAMIC_FTRACE | 38 | select HAVE_DYNAMIC_FTRACE |
| 39 | select HAVE_FUNCTION_TRACE_MCOUNT_TEST | 39 | select HAVE_FUNCTION_TRACE_MCOUNT_TEST |
| 40 | select HAVE_FTRACE_SYSCALLS | ||
| 41 | select HAVE_FUNCTION_GRAPH_TRACER | 40 | select HAVE_FUNCTION_GRAPH_TRACER |
| 42 | select HAVE_ARCH_KGDB | 41 | select HAVE_ARCH_KGDB |
| 43 | select ARCH_HIBERNATION_POSSIBLE if MMU | 42 | select ARCH_HIBERNATION_POSSIBLE if MMU |
diff --git a/arch/sh/boards/mach-landisk/gio.c b/arch/sh/boards/mach-landisk/gio.c index 25cdf7358000..528013188196 100644 --- a/arch/sh/boards/mach-landisk/gio.c +++ b/arch/sh/boards/mach-landisk/gio.c | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | */ | 14 | */ |
| 15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/smp_lock.h> | ||
| 18 | #include <linux/kdev_t.h> | 17 | #include <linux/kdev_t.h> |
| 19 | #include <linux/cdev.h> | 18 | #include <linux/cdev.h> |
| 20 | #include <linux/fs.h> | 19 | #include <linux/fs.h> |
| @@ -35,7 +34,7 @@ static int gio_open(struct inode *inode, struct file *filp) | |||
| 35 | int minor; | 34 | int minor; |
| 36 | int ret = -ENOENT; | 35 | int ret = -ENOENT; |
| 37 | 36 | ||
| 38 | lock_kernel(); | 37 | preempt_disable(); |
| 39 | minor = MINOR(inode->i_rdev); | 38 | minor = MINOR(inode->i_rdev); |
| 40 | if (minor < DEVCOUNT) { | 39 | if (minor < DEVCOUNT) { |
| 41 | if (openCnt > 0) { | 40 | if (openCnt > 0) { |
| @@ -45,7 +44,7 @@ static int gio_open(struct inode *inode, struct file *filp) | |||
| 45 | ret = 0; | 44 | ret = 0; |
| 46 | } | 45 | } |
| 47 | } | 46 | } |
| 48 | unlock_kernel(); | 47 | preempt_enable(); |
| 49 | return ret; | 48 | return ret; |
| 50 | } | 49 | } |
| 51 | 50 | ||
| @@ -60,8 +59,7 @@ static int gio_close(struct inode *inode, struct file *filp) | |||
| 60 | return 0; | 59 | return 0; |
| 61 | } | 60 | } |
| 62 | 61 | ||
| 63 | static int gio_ioctl(struct inode *inode, struct file *filp, | 62 | static long gio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
| 64 | unsigned int cmd, unsigned long arg) | ||
| 65 | { | 63 | { |
| 66 | unsigned int data; | 64 | unsigned int data; |
| 67 | static unsigned int addr = 0; | 65 | static unsigned int addr = 0; |
| @@ -129,7 +127,7 @@ static const struct file_operations gio_fops = { | |||
| 129 | .owner = THIS_MODULE, | 127 | .owner = THIS_MODULE, |
| 130 | .open = gio_open, /* open */ | 128 | .open = gio_open, /* open */ |
| 131 | .release = gio_close, /* release */ | 129 | .release = gio_close, /* release */ |
| 132 | .ioctl = gio_ioctl, /* ioctl */ | 130 | .unlocked_ioctl = gio_ioctl, |
| 133 | }; | 131 | }; |
| 134 | 132 | ||
| 135 | static int __init gio_init(void) | 133 | static int __init gio_init(void) |
diff --git a/arch/sh/mm/cache-sh4.c b/arch/sh/mm/cache-sh4.c index a98c7d8984fa..519e2d16cd06 100644 --- a/arch/sh/mm/cache-sh4.c +++ b/arch/sh/mm/cache-sh4.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #define MAX_DCACHE_PAGES 64 /* XXX: Tune for ways */ | 26 | #define MAX_DCACHE_PAGES 64 /* XXX: Tune for ways */ |
| 27 | #define MAX_ICACHE_PAGES 32 | 27 | #define MAX_ICACHE_PAGES 32 |
| 28 | 28 | ||
| 29 | static void __flush_cache_4096(unsigned long addr, unsigned long phys, | 29 | static void __flush_cache_one(unsigned long addr, unsigned long phys, |
| 30 | unsigned long exec_offset); | 30 | unsigned long exec_offset); |
| 31 | 31 | ||
| 32 | /* | 32 | /* |
| @@ -89,8 +89,7 @@ static void __uses_jump_to_uncached sh4_flush_icache_range(void *args) | |||
| 89 | local_irq_restore(flags); | 89 | local_irq_restore(flags); |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | static inline void flush_cache_4096(unsigned long start, | 92 | static inline void flush_cache_one(unsigned long start, unsigned long phys) |
| 93 | unsigned long phys) | ||
| 94 | { | 93 | { |
| 95 | unsigned long flags, exec_offset = 0; | 94 | unsigned long flags, exec_offset = 0; |
| 96 | 95 | ||
| @@ -103,8 +102,7 @@ static inline void flush_cache_4096(unsigned long start, | |||
| 103 | exec_offset = 0x20000000; | 102 | exec_offset = 0x20000000; |
| 104 | 103 | ||
| 105 | local_irq_save(flags); | 104 | local_irq_save(flags); |
| 106 | __flush_cache_4096(start | SH_CACHE_ASSOC, | 105 | __flush_cache_one(start | SH_CACHE_ASSOC, P1SEGADDR(phys), exec_offset); |
| 107 | P1SEGADDR(phys), exec_offset); | ||
| 108 | local_irq_restore(flags); | 106 | local_irq_restore(flags); |
| 109 | } | 107 | } |
| 110 | 108 | ||
| @@ -129,8 +127,8 @@ static void sh4_flush_dcache_page(void *arg) | |||
| 129 | 127 | ||
| 130 | /* Loop all the D-cache */ | 128 | /* Loop all the D-cache */ |
| 131 | n = boot_cpu_data.dcache.n_aliases; | 129 | n = boot_cpu_data.dcache.n_aliases; |
| 132 | for (i = 0; i < n; i++, addr += 4096) | 130 | for (i = 0; i < n; i++, addr += PAGE_SIZE) |
| 133 | flush_cache_4096(addr, phys); | 131 | flush_cache_one(addr, phys); |
| 134 | } | 132 | } |
| 135 | 133 | ||
| 136 | wmb(); | 134 | wmb(); |
| @@ -318,11 +316,11 @@ static void sh4_flush_cache_page(void *args) | |||
| 318 | /* We only need to flush D-cache when we have alias */ | 316 | /* We only need to flush D-cache when we have alias */ |
| 319 | if ((address^phys) & alias_mask) { | 317 | if ((address^phys) & alias_mask) { |
| 320 | /* Loop 4K of the D-cache */ | 318 | /* Loop 4K of the D-cache */ |
| 321 | flush_cache_4096( | 319 | flush_cache_one( |
| 322 | CACHE_OC_ADDRESS_ARRAY | (address & alias_mask), | 320 | CACHE_OC_ADDRESS_ARRAY | (address & alias_mask), |
| 323 | phys); | 321 | phys); |
| 324 | /* Loop another 4K of the D-cache */ | 322 | /* Loop another 4K of the D-cache */ |
| 325 | flush_cache_4096( | 323 | flush_cache_one( |
| 326 | CACHE_OC_ADDRESS_ARRAY | (phys & alias_mask), | 324 | CACHE_OC_ADDRESS_ARRAY | (phys & alias_mask), |
| 327 | phys); | 325 | phys); |
| 328 | } | 326 | } |
| @@ -337,7 +335,7 @@ static void sh4_flush_cache_page(void *args) | |||
| 337 | * kernel has never executed the code through its identity | 335 | * kernel has never executed the code through its identity |
| 338 | * translation. | 336 | * translation. |
| 339 | */ | 337 | */ |
| 340 | flush_cache_4096( | 338 | flush_cache_one( |
| 341 | CACHE_IC_ADDRESS_ARRAY | (address & alias_mask), | 339 | CACHE_IC_ADDRESS_ARRAY | (address & alias_mask), |
| 342 | phys); | 340 | phys); |
| 343 | } | 341 | } |
| @@ -393,7 +391,7 @@ static void sh4_flush_cache_range(void *args) | |||
| 393 | } | 391 | } |
| 394 | 392 | ||
| 395 | /** | 393 | /** |
| 396 | * __flush_cache_4096 | 394 | * __flush_cache_one |
| 397 | * | 395 | * |
| 398 | * @addr: address in memory mapped cache array | 396 | * @addr: address in memory mapped cache array |
| 399 | * @phys: P1 address to flush (has to match tags if addr has 'A' bit | 397 | * @phys: P1 address to flush (has to match tags if addr has 'A' bit |
| @@ -406,7 +404,7 @@ static void sh4_flush_cache_range(void *args) | |||
| 406 | * operation (purge/write-back) is selected by the lower 2 bits of | 404 | * operation (purge/write-back) is selected by the lower 2 bits of |
| 407 | * 'phys'. | 405 | * 'phys'. |
| 408 | */ | 406 | */ |
| 409 | static void __flush_cache_4096(unsigned long addr, unsigned long phys, | 407 | static void __flush_cache_one(unsigned long addr, unsigned long phys, |
| 410 | unsigned long exec_offset) | 408 | unsigned long exec_offset) |
| 411 | { | 409 | { |
| 412 | int way_count; | 410 | int way_count; |
diff --git a/arch/sh/mm/cache.c b/arch/sh/mm/cache.c index 5e1091be9dc4..a2dc7f9ecc51 100644 --- a/arch/sh/mm/cache.c +++ b/arch/sh/mm/cache.c | |||
| @@ -265,6 +265,8 @@ static void __init emit_cache_params(void) | |||
| 265 | 265 | ||
| 266 | void __init cpu_cache_init(void) | 266 | void __init cpu_cache_init(void) |
| 267 | { | 267 | { |
| 268 | unsigned int cache_disabled = !(__raw_readl(CCR) & CCR_CACHE_ENABLE); | ||
| 269 | |||
| 268 | compute_alias(&boot_cpu_data.icache); | 270 | compute_alias(&boot_cpu_data.icache); |
| 269 | compute_alias(&boot_cpu_data.dcache); | 271 | compute_alias(&boot_cpu_data.dcache); |
| 270 | compute_alias(&boot_cpu_data.scache); | 272 | compute_alias(&boot_cpu_data.scache); |
| @@ -273,6 +275,13 @@ void __init cpu_cache_init(void) | |||
| 273 | __flush_purge_region = noop__flush_region; | 275 | __flush_purge_region = noop__flush_region; |
| 274 | __flush_invalidate_region = noop__flush_region; | 276 | __flush_invalidate_region = noop__flush_region; |
| 275 | 277 | ||
| 278 | /* | ||
| 279 | * No flushing is necessary in the disabled cache case so we can | ||
| 280 | * just keep the noop functions in local_flush_..() and __flush_..() | ||
| 281 | */ | ||
| 282 | if (unlikely(cache_disabled)) | ||
| 283 | goto skip; | ||
| 284 | |||
| 276 | if (boot_cpu_data.family == CPU_FAMILY_SH2) { | 285 | if (boot_cpu_data.family == CPU_FAMILY_SH2) { |
| 277 | extern void __weak sh2_cache_init(void); | 286 | extern void __weak sh2_cache_init(void); |
| 278 | 287 | ||
| @@ -312,5 +321,6 @@ void __init cpu_cache_init(void) | |||
| 312 | sh5_cache_init(); | 321 | sh5_cache_init(); |
| 313 | } | 322 | } |
| 314 | 323 | ||
| 324 | skip: | ||
| 315 | emit_cache_params(); | 325 | emit_cache_params(); |
| 316 | } | 326 | } |
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c index 585edebe12cf..49c552c060e9 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c | |||
| @@ -82,7 +82,7 @@ static int aes_set_key_common(struct crypto_tfm *tfm, void *raw_ctx, | |||
| 82 | return -EINVAL; | 82 | return -EINVAL; |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | if (irq_fpu_usable()) | 85 | if (!irq_fpu_usable()) |
| 86 | err = crypto_aes_expand_key(ctx, in_key, key_len); | 86 | err = crypto_aes_expand_key(ctx, in_key, key_len); |
| 87 | else { | 87 | else { |
| 88 | kernel_fpu_begin(); | 88 | kernel_fpu_begin(); |
| @@ -103,7 +103,7 @@ static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | |||
| 103 | { | 103 | { |
| 104 | struct crypto_aes_ctx *ctx = aes_ctx(crypto_tfm_ctx(tfm)); | 104 | struct crypto_aes_ctx *ctx = aes_ctx(crypto_tfm_ctx(tfm)); |
| 105 | 105 | ||
| 106 | if (irq_fpu_usable()) | 106 | if (!irq_fpu_usable()) |
| 107 | crypto_aes_encrypt_x86(ctx, dst, src); | 107 | crypto_aes_encrypt_x86(ctx, dst, src); |
| 108 | else { | 108 | else { |
| 109 | kernel_fpu_begin(); | 109 | kernel_fpu_begin(); |
| @@ -116,7 +116,7 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | |||
| 116 | { | 116 | { |
| 117 | struct crypto_aes_ctx *ctx = aes_ctx(crypto_tfm_ctx(tfm)); | 117 | struct crypto_aes_ctx *ctx = aes_ctx(crypto_tfm_ctx(tfm)); |
| 118 | 118 | ||
| 119 | if (irq_fpu_usable()) | 119 | if (!irq_fpu_usable()) |
| 120 | crypto_aes_decrypt_x86(ctx, dst, src); | 120 | crypto_aes_decrypt_x86(ctx, dst, src); |
| 121 | else { | 121 | else { |
| 122 | kernel_fpu_begin(); | 122 | kernel_fpu_begin(); |
| @@ -342,7 +342,7 @@ static int ablk_encrypt(struct ablkcipher_request *req) | |||
| 342 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); | 342 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); |
| 343 | struct async_aes_ctx *ctx = crypto_ablkcipher_ctx(tfm); | 343 | struct async_aes_ctx *ctx = crypto_ablkcipher_ctx(tfm); |
| 344 | 344 | ||
| 345 | if (irq_fpu_usable()) { | 345 | if (!irq_fpu_usable()) { |
| 346 | struct ablkcipher_request *cryptd_req = | 346 | struct ablkcipher_request *cryptd_req = |
| 347 | ablkcipher_request_ctx(req); | 347 | ablkcipher_request_ctx(req); |
| 348 | memcpy(cryptd_req, req, sizeof(*req)); | 348 | memcpy(cryptd_req, req, sizeof(*req)); |
| @@ -363,7 +363,7 @@ static int ablk_decrypt(struct ablkcipher_request *req) | |||
| 363 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); | 363 | struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(req); |
| 364 | struct async_aes_ctx *ctx = crypto_ablkcipher_ctx(tfm); | 364 | struct async_aes_ctx *ctx = crypto_ablkcipher_ctx(tfm); |
| 365 | 365 | ||
| 366 | if (irq_fpu_usable()) { | 366 | if (!irq_fpu_usable()) { |
| 367 | struct ablkcipher_request *cryptd_req = | 367 | struct ablkcipher_request *cryptd_req = |
| 368 | ablkcipher_request_ctx(req); | 368 | ablkcipher_request_ctx(req); |
| 369 | memcpy(cryptd_req, req, sizeof(*req)); | 369 | memcpy(cryptd_req, req, sizeof(*req)); |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index b1a257746a19..a06f5d6375a8 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -575,7 +575,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 575 | { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 }, /* ATI SB700/800 */ | 575 | { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 }, /* ATI SB700/800 */ |
| 576 | 576 | ||
| 577 | /* AMD */ | 577 | /* AMD */ |
| 578 | { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD SB900 */ | 578 | { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */ |
| 579 | /* AMD is using RAID class only for ahci controllers */ | 579 | /* AMD is using RAID class only for ahci controllers */ |
| 580 | { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | 580 | { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, |
| 581 | PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci }, | 581 | PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci }, |
| @@ -605,6 +605,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 605 | { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_yesncq }, /* MCP67 */ | 605 | { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_yesncq }, /* MCP67 */ |
| 606 | { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_yesncq }, /* MCP67 */ | 606 | { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_yesncq }, /* MCP67 */ |
| 607 | { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_yesncq }, /* MCP67 */ | 607 | { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_yesncq }, /* MCP67 */ |
| 608 | { PCI_VDEVICE(NVIDIA, 0x0580), board_ahci_yesncq }, /* Linux ID */ | ||
| 608 | { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_yesncq }, /* MCP73 */ | 609 | { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_yesncq }, /* MCP73 */ |
| 609 | { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_yesncq }, /* MCP73 */ | 610 | { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_yesncq }, /* MCP73 */ |
| 610 | { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_yesncq }, /* MCP73 */ | 611 | { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_yesncq }, /* MCP73 */ |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index b525a0981348..d7f0f1b1ae3e 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -5028,12 +5028,14 @@ void ata_qc_complete(struct ata_queued_cmd *qc) | |||
| 5028 | qc->flags |= ATA_QCFLAG_FAILED; | 5028 | qc->flags |= ATA_QCFLAG_FAILED; |
| 5029 | 5029 | ||
| 5030 | if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) { | 5030 | if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) { |
| 5031 | if (!ata_tag_internal(qc->tag)) { | 5031 | /* always fill result TF for failed qc */ |
| 5032 | /* always fill result TF for failed qc */ | 5032 | fill_result_tf(qc); |
| 5033 | fill_result_tf(qc); | 5033 | |
| 5034 | if (!ata_tag_internal(qc->tag)) | ||
| 5034 | ata_qc_schedule_eh(qc); | 5035 | ata_qc_schedule_eh(qc); |
| 5035 | return; | 5036 | else |
| 5036 | } | 5037 | __ata_qc_complete(qc); |
| 5038 | return; | ||
| 5037 | } | 5039 | } |
| 5038 | 5040 | ||
| 5039 | WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN); | 5041 | WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN); |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 0a97822da211..bba2ae5df1c2 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
| @@ -2981,12 +2981,14 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link, | |||
| 2981 | * device detection messages backwards. | 2981 | * device detection messages backwards. |
| 2982 | */ | 2982 | */ |
| 2983 | ata_for_each_dev(dev, link, ALL) { | 2983 | ata_for_each_dev(dev, link, ALL) { |
| 2984 | if (!(new_mask & (1 << dev->devno)) || | 2984 | if (!(new_mask & (1 << dev->devno))) |
| 2985 | dev->class == ATA_DEV_PMP) | ||
| 2986 | continue; | 2985 | continue; |
| 2987 | 2986 | ||
| 2988 | dev->class = ehc->classes[dev->devno]; | 2987 | dev->class = ehc->classes[dev->devno]; |
| 2989 | 2988 | ||
| 2989 | if (dev->class == ATA_DEV_PMP) | ||
| 2990 | continue; | ||
| 2991 | |||
| 2990 | ehc->i.flags |= ATA_EHI_PRINTINFO; | 2992 | ehc->i.flags |= ATA_EHI_PRINTINFO; |
| 2991 | rc = ata_dev_configure(dev); | 2993 | rc = ata_dev_configure(dev); |
| 2992 | ehc->i.flags &= ~ATA_EHI_PRINTINFO; | 2994 | ehc->i.flags &= ~ATA_EHI_PRINTINFO; |
diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c index aa4b3f6ae771..ae4454d4e955 100644 --- a/drivers/ata/pata_atiixp.c +++ b/drivers/ata/pata_atiixp.c | |||
| @@ -246,7 +246,7 @@ static const struct pci_device_id atiixp[] = { | |||
| 246 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), }, | 246 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), }, |
| 247 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), }, | 247 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), }, |
| 248 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), }, | 248 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), }, |
| 249 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_SB900_IDE), }, | 249 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_HUDSON2_IDE), }, |
| 250 | 250 | ||
| 251 | { }, | 251 | { }, |
| 252 | }; | 252 | }; |
diff --git a/drivers/ata/pata_sc1200.c b/drivers/ata/pata_sc1200.c index f49814d6fd2e..3bbed8322ecf 100644 --- a/drivers/ata/pata_sc1200.c +++ b/drivers/ata/pata_sc1200.c | |||
| @@ -235,8 +235,7 @@ static int sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
| 235 | .udma_mask = ATA_UDMA2, | 235 | .udma_mask = ATA_UDMA2, |
| 236 | .port_ops = &sc1200_port_ops | 236 | .port_ops = &sc1200_port_ops |
| 237 | }; | 237 | }; |
| 238 | /* Can't enable port 2 yet, see top comments */ | 238 | const struct ata_port_info *ppi[] = { &info, NULL }; |
| 239 | const struct ata_port_info *ppi[] = { &info, }; | ||
| 240 | 239 | ||
| 241 | return ata_pci_sff_init_one(dev, ppi, &sc1200_sht, NULL); | 240 | return ata_pci_sff_init_one(dev, ppi, &sc1200_sht, NULL); |
| 242 | } | 241 | } |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 45657cacec43..88984b803d6d 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
| @@ -111,7 +111,7 @@ static const struct via_isa_bridge { | |||
| 111 | { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 111 | { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 112 | { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA }, | 112 | { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA }, |
| 113 | { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES }, | 113 | { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES }, |
| 114 | { "vt6415", PCI_DEVICE_ID_VIA_6415, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES }, | 114 | { "vt6415", PCI_DEVICE_ID_VIA_6415, 0x00, 0xff, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES }, |
| 115 | { "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 115 | { "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 116 | { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 116 | { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
| 117 | { "vt8235", PCI_DEVICE_ID_VIA_8235, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | 117 | { "vt8235", PCI_DEVICE_ID_VIA_8235, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 17f9ff9067a2..6f5093b7c8c5 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -1382,6 +1382,25 @@ static int mv_qc_defer(struct ata_queued_cmd *qc) | |||
| 1382 | */ | 1382 | */ |
| 1383 | if (pp->pp_flags & MV_PP_FLAG_DELAYED_EH) | 1383 | if (pp->pp_flags & MV_PP_FLAG_DELAYED_EH) |
| 1384 | return ATA_DEFER_PORT; | 1384 | return ATA_DEFER_PORT; |
| 1385 | |||
| 1386 | /* PIO commands need exclusive link: no other commands [DMA or PIO] | ||
| 1387 | * can run concurrently. | ||
| 1388 | * set excl_link when we want to send a PIO command in DMA mode | ||
| 1389 | * or a non-NCQ command in NCQ mode. | ||
| 1390 | * When we receive a command from that link, and there are no | ||
| 1391 | * outstanding commands, mark a flag to clear excl_link and let | ||
| 1392 | * the command go through. | ||
| 1393 | */ | ||
| 1394 | if (unlikely(ap->excl_link)) { | ||
| 1395 | if (link == ap->excl_link) { | ||
| 1396 | if (ap->nr_active_links) | ||
| 1397 | return ATA_DEFER_PORT; | ||
| 1398 | qc->flags |= ATA_QCFLAG_CLEAR_EXCL; | ||
| 1399 | return 0; | ||
| 1400 | } else | ||
| 1401 | return ATA_DEFER_PORT; | ||
| 1402 | } | ||
| 1403 | |||
| 1385 | /* | 1404 | /* |
| 1386 | * If the port is completely idle, then allow the new qc. | 1405 | * If the port is completely idle, then allow the new qc. |
| 1387 | */ | 1406 | */ |
| @@ -1395,8 +1414,14 @@ static int mv_qc_defer(struct ata_queued_cmd *qc) | |||
| 1395 | * doesn't allow it. | 1414 | * doesn't allow it. |
| 1396 | */ | 1415 | */ |
| 1397 | if ((pp->pp_flags & MV_PP_FLAG_EDMA_EN) && | 1416 | if ((pp->pp_flags & MV_PP_FLAG_EDMA_EN) && |
| 1398 | (pp->pp_flags & MV_PP_FLAG_NCQ_EN) && ata_is_ncq(qc->tf.protocol)) | 1417 | (pp->pp_flags & MV_PP_FLAG_NCQ_EN)) { |
| 1399 | return 0; | 1418 | if (ata_is_ncq(qc->tf.protocol)) |
| 1419 | return 0; | ||
| 1420 | else { | ||
| 1421 | ap->excl_link = link; | ||
| 1422 | return ATA_DEFER_PORT; | ||
| 1423 | } | ||
| 1424 | } | ||
| 1400 | 1425 | ||
| 1401 | return ATA_DEFER_PORT; | 1426 | return ATA_DEFER_PORT; |
| 1402 | } | 1427 | } |
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index 86a40582999c..1eb4e020eb5c 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
| @@ -1594,9 +1594,21 @@ static int nv_hardreset(struct ata_link *link, unsigned int *class, | |||
| 1594 | !ata_dev_enabled(link->device)) | 1594 | !ata_dev_enabled(link->device)) |
| 1595 | sata_link_hardreset(link, sata_deb_timing_hotplug, deadline, | 1595 | sata_link_hardreset(link, sata_deb_timing_hotplug, deadline, |
| 1596 | NULL, NULL); | 1596 | NULL, NULL); |
| 1597 | else if (!(ehc->i.flags & ATA_EHI_QUIET)) | 1597 | else { |
| 1598 | ata_link_printk(link, KERN_INFO, | 1598 | const unsigned long *timing = sata_ehc_deb_timing(ehc); |
| 1599 | "nv: skipping hardreset on occupied port\n"); | 1599 | int rc; |
| 1600 | |||
| 1601 | if (!(ehc->i.flags & ATA_EHI_QUIET)) | ||
| 1602 | ata_link_printk(link, KERN_INFO, "nv: skipping " | ||
| 1603 | "hardreset on occupied port\n"); | ||
| 1604 | |||
| 1605 | /* make sure the link is online */ | ||
| 1606 | rc = sata_link_resume(link, timing, deadline); | ||
| 1607 | /* whine about phy resume failure but proceed */ | ||
| 1608 | if (rc && rc != -EOPNOTSUPP) | ||
| 1609 | ata_link_printk(link, KERN_WARNING, "failed to resume " | ||
| 1610 | "link (errno=%d)\n", rc); | ||
| 1611 | } | ||
| 1600 | 1612 | ||
| 1601 | /* device signature acquisition is unreliable */ | 1613 | /* device signature acquisition is unreliable */ |
| 1602 | return -EAGAIN; | 1614 | return -EAGAIN; |
diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c index 76cb6b345e7b..0af80577dc7b 100644 --- a/drivers/crypto/padlock-sha.c +++ b/drivers/crypto/padlock-sha.c | |||
| @@ -24,6 +24,12 @@ | |||
| 24 | #include <asm/i387.h> | 24 | #include <asm/i387.h> |
| 25 | #include "padlock.h" | 25 | #include "padlock.h" |
| 26 | 26 | ||
| 27 | #ifdef CONFIG_64BIT | ||
| 28 | #define STACK_ALIGN 16 | ||
| 29 | #else | ||
| 30 | #define STACK_ALIGN 4 | ||
| 31 | #endif | ||
| 32 | |||
| 27 | struct padlock_sha_desc { | 33 | struct padlock_sha_desc { |
| 28 | struct shash_desc fallback; | 34 | struct shash_desc fallback; |
| 29 | }; | 35 | }; |
| @@ -64,7 +70,9 @@ static int padlock_sha1_finup(struct shash_desc *desc, const u8 *in, | |||
| 64 | /* We can't store directly to *out as it may be unaligned. */ | 70 | /* We can't store directly to *out as it may be unaligned. */ |
| 65 | /* BTW Don't reduce the buffer size below 128 Bytes! | 71 | /* BTW Don't reduce the buffer size below 128 Bytes! |
| 66 | * PadLock microcode needs it that big. */ | 72 | * PadLock microcode needs it that big. */ |
| 67 | char result[128] __attribute__ ((aligned(PADLOCK_ALIGNMENT))); | 73 | char buf[128 + PADLOCK_ALIGNMENT - STACK_ALIGN] __attribute__ |
| 74 | ((aligned(STACK_ALIGN))); | ||
| 75 | char *result = PTR_ALIGN(&buf[0], PADLOCK_ALIGNMENT); | ||
| 68 | struct padlock_sha_desc *dctx = shash_desc_ctx(desc); | 76 | struct padlock_sha_desc *dctx = shash_desc_ctx(desc); |
| 69 | struct sha1_state state; | 77 | struct sha1_state state; |
| 70 | unsigned int space; | 78 | unsigned int space; |
| @@ -128,7 +136,9 @@ static int padlock_sha256_finup(struct shash_desc *desc, const u8 *in, | |||
| 128 | /* We can't store directly to *out as it may be unaligned. */ | 136 | /* We can't store directly to *out as it may be unaligned. */ |
| 129 | /* BTW Don't reduce the buffer size below 128 Bytes! | 137 | /* BTW Don't reduce the buffer size below 128 Bytes! |
| 130 | * PadLock microcode needs it that big. */ | 138 | * PadLock microcode needs it that big. */ |
| 131 | char result[128] __attribute__ ((aligned(PADLOCK_ALIGNMENT))); | 139 | char buf[128 + PADLOCK_ALIGNMENT - STACK_ALIGN] __attribute__ |
| 140 | ((aligned(STACK_ALIGN))); | ||
| 141 | char *result = PTR_ALIGN(&buf[0], PADLOCK_ALIGNMENT); | ||
| 132 | struct padlock_sha_desc *dctx = shash_desc_ctx(desc); | 142 | struct padlock_sha_desc *dctx = shash_desc_ctx(desc); |
| 133 | struct sha256_state state; | 143 | struct sha256_state state; |
| 134 | unsigned int space; | 144 | unsigned int space; |
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 4f4ac82382f7..d4560d9d5a83 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c | |||
| @@ -1122,7 +1122,7 @@ static void k8_read_dram_base_limit(struct amd64_pvt *pvt, int dram) | |||
| 1122 | debugf0("Reading K8_DRAM_BASE_LOW failed\n"); | 1122 | debugf0("Reading K8_DRAM_BASE_LOW failed\n"); |
| 1123 | 1123 | ||
| 1124 | /* Extract parts into separate data entries */ | 1124 | /* Extract parts into separate data entries */ |
| 1125 | pvt->dram_base[dram] = ((u64) low & 0xFFFF0000) << 24; | 1125 | pvt->dram_base[dram] = ((u64) low & 0xFFFF0000) << 8; |
| 1126 | pvt->dram_IntlvEn[dram] = (low >> 8) & 0x7; | 1126 | pvt->dram_IntlvEn[dram] = (low >> 8) & 0x7; |
| 1127 | pvt->dram_rw_en[dram] = (low & 0x3); | 1127 | pvt->dram_rw_en[dram] = (low & 0x3); |
| 1128 | 1128 | ||
| @@ -1135,7 +1135,7 @@ static void k8_read_dram_base_limit(struct amd64_pvt *pvt, int dram) | |||
| 1135 | * Extract parts into separate data entries. Limit is the HIGHEST memory | 1135 | * Extract parts into separate data entries. Limit is the HIGHEST memory |
| 1136 | * location of the region, so lower 24 bits need to be all ones | 1136 | * location of the region, so lower 24 bits need to be all ones |
| 1137 | */ | 1137 | */ |
| 1138 | pvt->dram_limit[dram] = (((u64) low & 0xFFFF0000) << 24) | 0x00FFFFFF; | 1138 | pvt->dram_limit[dram] = (((u64) low & 0xFFFF0000) << 8) | 0x00FFFFFF; |
| 1139 | pvt->dram_IntlvSel[dram] = (low >> 8) & 0x7; | 1139 | pvt->dram_IntlvSel[dram] = (low >> 8) & 0x7; |
| 1140 | pvt->dram_DstNode[dram] = (low & 0x7); | 1140 | pvt->dram_DstNode[dram] = (low & 0x7); |
| 1141 | } | 1141 | } |
| @@ -1369,7 +1369,7 @@ static void f10_read_dram_base_limit(struct amd64_pvt *pvt, int dram) | |||
| 1369 | pvt->dram_IntlvEn[dram] = (low_base >> 8) & 0x7; | 1369 | pvt->dram_IntlvEn[dram] = (low_base >> 8) & 0x7; |
| 1370 | 1370 | ||
| 1371 | pvt->dram_base[dram] = (((u64)high_base & 0x000000FF) << 40) | | 1371 | pvt->dram_base[dram] = (((u64)high_base & 0x000000FF) << 40) | |
| 1372 | (((u64)low_base & 0xFFFF0000) << 24); | 1372 | (((u64)low_base & 0xFFFF0000) << 8); |
| 1373 | 1373 | ||
| 1374 | low_offset = K8_DRAM_LIMIT_LOW + (dram << 3); | 1374 | low_offset = K8_DRAM_LIMIT_LOW + (dram << 3); |
| 1375 | high_offset = F10_DRAM_LIMIT_HIGH + (dram << 3); | 1375 | high_offset = F10_DRAM_LIMIT_HIGH + (dram << 3); |
| @@ -1391,7 +1391,7 @@ static void f10_read_dram_base_limit(struct amd64_pvt *pvt, int dram) | |||
| 1391 | * memory location of the region, so low 24 bits need to be all ones. | 1391 | * memory location of the region, so low 24 bits need to be all ones. |
| 1392 | */ | 1392 | */ |
| 1393 | pvt->dram_limit[dram] = (((u64)high_limit & 0x000000FF) << 40) | | 1393 | pvt->dram_limit[dram] = (((u64)high_limit & 0x000000FF) << 40) | |
| 1394 | (((u64) low_limit & 0xFFFF0000) << 24) | | 1394 | (((u64) low_limit & 0xFFFF0000) << 8) | |
| 1395 | 0x00FFFFFF; | 1395 | 0x00FFFFFF; |
| 1396 | } | 1396 | } |
| 1397 | 1397 | ||
diff --git a/drivers/ide/atiixp.c b/drivers/ide/atiixp.c index 6396c3ad3252..837322b10a4c 100644 --- a/drivers/ide/atiixp.c +++ b/drivers/ide/atiixp.c | |||
| @@ -177,7 +177,7 @@ static const struct pci_device_id atiixp_pci_tbl[] = { | |||
| 177 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), 0 }, | 177 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), 0 }, |
| 178 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), 1 }, | 178 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), 1 }, |
| 179 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), 0 }, | 179 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), 0 }, |
| 180 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_SB900_IDE), 0 }, | 180 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_HUDSON2_IDE), 0 }, |
| 181 | { 0, }, | 181 | { 0, }, |
| 182 | }; | 182 | }; |
| 183 | MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); | 183 | MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); |
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c index 556acff3952f..7dbe652efb5a 100644 --- a/drivers/md/dm-exception-store.c +++ b/drivers/md/dm-exception-store.c | |||
| @@ -138,16 +138,6 @@ int dm_exception_store_type_unregister(struct dm_exception_store_type *type) | |||
| 138 | } | 138 | } |
| 139 | EXPORT_SYMBOL(dm_exception_store_type_unregister); | 139 | EXPORT_SYMBOL(dm_exception_store_type_unregister); |
| 140 | 140 | ||
| 141 | /* | ||
| 142 | * Round a number up to the nearest 'size' boundary. size must | ||
| 143 | * be a power of 2. | ||
| 144 | */ | ||
| 145 | static ulong round_up(ulong n, ulong size) | ||
| 146 | { | ||
| 147 | size--; | ||
| 148 | return (n + size) & ~size; | ||
| 149 | } | ||
| 150 | |||
| 151 | static int set_chunk_size(struct dm_exception_store *store, | 141 | static int set_chunk_size(struct dm_exception_store *store, |
| 152 | const char *chunk_size_arg, char **error) | 142 | const char *chunk_size_arg, char **error) |
| 153 | { | 143 | { |
| @@ -155,7 +145,8 @@ static int set_chunk_size(struct dm_exception_store *store, | |||
| 155 | char *value; | 145 | char *value; |
| 156 | 146 | ||
| 157 | chunk_size_ulong = simple_strtoul(chunk_size_arg, &value, 10); | 147 | chunk_size_ulong = simple_strtoul(chunk_size_arg, &value, 10); |
| 158 | if (*chunk_size_arg == '\0' || *value != '\0') { | 148 | if (*chunk_size_arg == '\0' || *value != '\0' || |
| 149 | chunk_size_ulong > UINT_MAX) { | ||
| 159 | *error = "Invalid chunk size"; | 150 | *error = "Invalid chunk size"; |
| 160 | return -EINVAL; | 151 | return -EINVAL; |
| 161 | } | 152 | } |
| @@ -165,40 +156,35 @@ static int set_chunk_size(struct dm_exception_store *store, | |||
| 165 | return 0; | 156 | return 0; |
| 166 | } | 157 | } |
| 167 | 158 | ||
| 168 | /* | 159 | return dm_exception_store_set_chunk_size(store, |
| 169 | * Chunk size must be multiple of page size. Silently | 160 | (unsigned) chunk_size_ulong, |
| 170 | * round up if it's not. | ||
| 171 | */ | ||
| 172 | chunk_size_ulong = round_up(chunk_size_ulong, PAGE_SIZE >> 9); | ||
| 173 | |||
| 174 | return dm_exception_store_set_chunk_size(store, chunk_size_ulong, | ||
| 175 | error); | 161 | error); |
| 176 | } | 162 | } |
| 177 | 163 | ||
| 178 | int dm_exception_store_set_chunk_size(struct dm_exception_store *store, | 164 | int dm_exception_store_set_chunk_size(struct dm_exception_store *store, |
| 179 | unsigned long chunk_size_ulong, | 165 | unsigned chunk_size, |
| 180 | char **error) | 166 | char **error) |
| 181 | { | 167 | { |
| 182 | /* Check chunk_size is a power of 2 */ | 168 | /* Check chunk_size is a power of 2 */ |
| 183 | if (!is_power_of_2(chunk_size_ulong)) { | 169 | if (!is_power_of_2(chunk_size)) { |
| 184 | *error = "Chunk size is not a power of 2"; | 170 | *error = "Chunk size is not a power of 2"; |
| 185 | return -EINVAL; | 171 | return -EINVAL; |
| 186 | } | 172 | } |
| 187 | 173 | ||
| 188 | /* Validate the chunk size against the device block size */ | 174 | /* Validate the chunk size against the device block size */ |
| 189 | if (chunk_size_ulong % (bdev_logical_block_size(store->cow->bdev) >> 9)) { | 175 | if (chunk_size % (bdev_logical_block_size(store->cow->bdev) >> 9)) { |
| 190 | *error = "Chunk size is not a multiple of device blocksize"; | 176 | *error = "Chunk size is not a multiple of device blocksize"; |
| 191 | return -EINVAL; | 177 | return -EINVAL; |
| 192 | } | 178 | } |
| 193 | 179 | ||
| 194 | if (chunk_size_ulong > INT_MAX >> SECTOR_SHIFT) { | 180 | if (chunk_size > INT_MAX >> SECTOR_SHIFT) { |
| 195 | *error = "Chunk size is too high"; | 181 | *error = "Chunk size is too high"; |
| 196 | return -EINVAL; | 182 | return -EINVAL; |
| 197 | } | 183 | } |
| 198 | 184 | ||
| 199 | store->chunk_size = chunk_size_ulong; | 185 | store->chunk_size = chunk_size; |
| 200 | store->chunk_mask = chunk_size_ulong - 1; | 186 | store->chunk_mask = chunk_size - 1; |
| 201 | store->chunk_shift = ffs(chunk_size_ulong) - 1; | 187 | store->chunk_shift = ffs(chunk_size) - 1; |
| 202 | 188 | ||
| 203 | return 0; | 189 | return 0; |
| 204 | } | 190 | } |
| @@ -251,7 +237,7 @@ int dm_exception_store_create(struct dm_target *ti, int argc, char **argv, | |||
| 251 | 237 | ||
| 252 | r = set_chunk_size(tmp_store, argv[2], &ti->error); | 238 | r = set_chunk_size(tmp_store, argv[2], &ti->error); |
| 253 | if (r) | 239 | if (r) |
| 254 | goto bad_cow; | 240 | goto bad_ctr; |
| 255 | 241 | ||
| 256 | r = type->ctr(tmp_store, 0, NULL); | 242 | r = type->ctr(tmp_store, 0, NULL); |
| 257 | if (r) { | 243 | if (r) { |
diff --git a/drivers/md/dm-exception-store.h b/drivers/md/dm-exception-store.h index 812c71872ba0..8a223a48802c 100644 --- a/drivers/md/dm-exception-store.h +++ b/drivers/md/dm-exception-store.h | |||
| @@ -101,9 +101,9 @@ struct dm_exception_store { | |||
| 101 | struct dm_dev *cow; | 101 | struct dm_dev *cow; |
| 102 | 102 | ||
| 103 | /* Size of data blocks saved - must be a power of 2 */ | 103 | /* Size of data blocks saved - must be a power of 2 */ |
| 104 | chunk_t chunk_size; | 104 | unsigned chunk_size; |
| 105 | chunk_t chunk_mask; | 105 | unsigned chunk_mask; |
| 106 | chunk_t chunk_shift; | 106 | unsigned chunk_shift; |
| 107 | 107 | ||
| 108 | void *context; | 108 | void *context; |
| 109 | }; | 109 | }; |
| @@ -169,7 +169,7 @@ int dm_exception_store_type_register(struct dm_exception_store_type *type); | |||
| 169 | int dm_exception_store_type_unregister(struct dm_exception_store_type *type); | 169 | int dm_exception_store_type_unregister(struct dm_exception_store_type *type); |
| 170 | 170 | ||
| 171 | int dm_exception_store_set_chunk_size(struct dm_exception_store *store, | 171 | int dm_exception_store_set_chunk_size(struct dm_exception_store *store, |
| 172 | unsigned long chunk_size_ulong, | 172 | unsigned chunk_size, |
| 173 | char **error); | 173 | char **error); |
| 174 | 174 | ||
| 175 | int dm_exception_store_create(struct dm_target *ti, int argc, char **argv, | 175 | int dm_exception_store_create(struct dm_target *ti, int argc, char **argv, |
diff --git a/drivers/md/dm-log-userspace-base.c b/drivers/md/dm-log-userspace-base.c index 652bd33109e3..7ac2c1450d10 100644 --- a/drivers/md/dm-log-userspace-base.c +++ b/drivers/md/dm-log-userspace-base.c | |||
| @@ -156,7 +156,7 @@ static int userspace_ctr(struct dm_dirty_log *log, struct dm_target *ti, | |||
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | /* The ptr value is sufficient for local unique id */ | 158 | /* The ptr value is sufficient for local unique id */ |
| 159 | lc->luid = (uint64_t)lc; | 159 | lc->luid = (unsigned long)lc; |
| 160 | 160 | ||
| 161 | lc->ti = ti; | 161 | lc->ti = ti; |
| 162 | 162 | ||
diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c index d5b2e08750d5..0c746420c008 100644 --- a/drivers/md/dm-snap-persistent.c +++ b/drivers/md/dm-snap-persistent.c | |||
| @@ -284,12 +284,13 @@ static int read_header(struct pstore *ps, int *new_snapshot) | |||
| 284 | { | 284 | { |
| 285 | int r; | 285 | int r; |
| 286 | struct disk_header *dh; | 286 | struct disk_header *dh; |
| 287 | chunk_t chunk_size; | 287 | unsigned chunk_size; |
| 288 | int chunk_size_supplied = 1; | 288 | int chunk_size_supplied = 1; |
| 289 | char *chunk_err; | 289 | char *chunk_err; |
| 290 | 290 | ||
| 291 | /* | 291 | /* |
| 292 | * Use default chunk size (or hardsect_size, if larger) if none supplied | 292 | * Use default chunk size (or logical_block_size, if larger) |
| 293 | * if none supplied | ||
| 293 | */ | 294 | */ |
| 294 | if (!ps->store->chunk_size) { | 295 | if (!ps->store->chunk_size) { |
| 295 | ps->store->chunk_size = max(DM_CHUNK_SIZE_DEFAULT_SECTORS, | 296 | ps->store->chunk_size = max(DM_CHUNK_SIZE_DEFAULT_SECTORS, |
| @@ -334,10 +335,9 @@ static int read_header(struct pstore *ps, int *new_snapshot) | |||
| 334 | return 0; | 335 | return 0; |
| 335 | 336 | ||
| 336 | if (chunk_size_supplied) | 337 | if (chunk_size_supplied) |
| 337 | DMWARN("chunk size %llu in device metadata overrides " | 338 | DMWARN("chunk size %u in device metadata overrides " |
| 338 | "table chunk size of %llu.", | 339 | "table chunk size of %u.", |
| 339 | (unsigned long long)chunk_size, | 340 | chunk_size, ps->store->chunk_size); |
| 340 | (unsigned long long)ps->store->chunk_size); | ||
| 341 | 341 | ||
| 342 | /* We had a bogus chunk_size. Fix stuff up. */ | 342 | /* We had a bogus chunk_size. Fix stuff up. */ |
| 343 | free_area(ps); | 343 | free_area(ps); |
| @@ -345,8 +345,8 @@ static int read_header(struct pstore *ps, int *new_snapshot) | |||
| 345 | r = dm_exception_store_set_chunk_size(ps->store, chunk_size, | 345 | r = dm_exception_store_set_chunk_size(ps->store, chunk_size, |
| 346 | &chunk_err); | 346 | &chunk_err); |
| 347 | if (r) { | 347 | if (r) { |
| 348 | DMERR("invalid on-disk chunk size %llu: %s.", | 348 | DMERR("invalid on-disk chunk size %u: %s.", |
| 349 | (unsigned long long)chunk_size, chunk_err); | 349 | chunk_size, chunk_err); |
| 350 | return r; | 350 | return r; |
| 351 | } | 351 | } |
| 352 | 352 | ||
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 57f1bf7f3b7a..3a3ba46e6d4b 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
| @@ -296,6 +296,7 @@ static void __insert_origin(struct origin *o) | |||
| 296 | */ | 296 | */ |
| 297 | static int register_snapshot(struct dm_snapshot *snap) | 297 | static int register_snapshot(struct dm_snapshot *snap) |
| 298 | { | 298 | { |
| 299 | struct dm_snapshot *l; | ||
| 299 | struct origin *o, *new_o; | 300 | struct origin *o, *new_o; |
| 300 | struct block_device *bdev = snap->origin->bdev; | 301 | struct block_device *bdev = snap->origin->bdev; |
| 301 | 302 | ||
| @@ -319,7 +320,11 @@ static int register_snapshot(struct dm_snapshot *snap) | |||
| 319 | __insert_origin(o); | 320 | __insert_origin(o); |
| 320 | } | 321 | } |
| 321 | 322 | ||
| 322 | list_add_tail(&snap->list, &o->snapshots); | 323 | /* Sort the list according to chunk size, largest-first smallest-last */ |
| 324 | list_for_each_entry(l, &o->snapshots, list) | ||
| 325 | if (l->store->chunk_size < snap->store->chunk_size) | ||
| 326 | break; | ||
| 327 | list_add_tail(&snap->list, &l->list); | ||
| 323 | 328 | ||
| 324 | up_write(&_origins_lock); | 329 | up_write(&_origins_lock); |
| 325 | return 0; | 330 | return 0; |
| @@ -668,6 +673,11 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) | |||
| 668 | bio_list_init(&s->queued_bios); | 673 | bio_list_init(&s->queued_bios); |
| 669 | INIT_WORK(&s->queued_bios_work, flush_queued_bios); | 674 | INIT_WORK(&s->queued_bios_work, flush_queued_bios); |
| 670 | 675 | ||
| 676 | if (!s->store->chunk_size) { | ||
| 677 | ti->error = "Chunk size not set"; | ||
| 678 | goto bad_load_and_register; | ||
| 679 | } | ||
| 680 | |||
| 671 | /* Add snapshot to the list of snapshots for this origin */ | 681 | /* Add snapshot to the list of snapshots for this origin */ |
| 672 | /* Exceptions aren't triggered till snapshot_resume() is called */ | 682 | /* Exceptions aren't triggered till snapshot_resume() is called */ |
| 673 | if (register_snapshot(s)) { | 683 | if (register_snapshot(s)) { |
| @@ -951,7 +961,7 @@ static void start_copy(struct dm_snap_pending_exception *pe) | |||
| 951 | 961 | ||
| 952 | src.bdev = bdev; | 962 | src.bdev = bdev; |
| 953 | src.sector = chunk_to_sector(s->store, pe->e.old_chunk); | 963 | src.sector = chunk_to_sector(s->store, pe->e.old_chunk); |
| 954 | src.count = min(s->store->chunk_size, dev_size - src.sector); | 964 | src.count = min((sector_t)s->store->chunk_size, dev_size - src.sector); |
| 955 | 965 | ||
| 956 | dest.bdev = s->store->cow->bdev; | 966 | dest.bdev = s->store->cow->bdev; |
| 957 | dest.sector = chunk_to_sector(s->store, pe->e.new_chunk); | 967 | dest.sector = chunk_to_sector(s->store, pe->e.new_chunk); |
| @@ -1142,6 +1152,8 @@ static int snapshot_status(struct dm_target *ti, status_type_t type, | |||
| 1142 | unsigned sz = 0; | 1152 | unsigned sz = 0; |
| 1143 | struct dm_snapshot *snap = ti->private; | 1153 | struct dm_snapshot *snap = ti->private; |
| 1144 | 1154 | ||
| 1155 | down_write(&snap->lock); | ||
| 1156 | |||
| 1145 | switch (type) { | 1157 | switch (type) { |
| 1146 | case STATUSTYPE_INFO: | 1158 | case STATUSTYPE_INFO: |
| 1147 | if (!snap->valid) | 1159 | if (!snap->valid) |
| @@ -1173,6 +1185,8 @@ static int snapshot_status(struct dm_target *ti, status_type_t type, | |||
| 1173 | break; | 1185 | break; |
| 1174 | } | 1186 | } |
| 1175 | 1187 | ||
| 1188 | up_write(&snap->lock); | ||
| 1189 | |||
| 1176 | return 0; | 1190 | return 0; |
| 1177 | } | 1191 | } |
| 1178 | 1192 | ||
| @@ -1388,7 +1402,7 @@ static void origin_resume(struct dm_target *ti) | |||
| 1388 | struct dm_dev *dev = ti->private; | 1402 | struct dm_dev *dev = ti->private; |
| 1389 | struct dm_snapshot *snap; | 1403 | struct dm_snapshot *snap; |
| 1390 | struct origin *o; | 1404 | struct origin *o; |
| 1391 | chunk_t chunk_size = 0; | 1405 | unsigned chunk_size = 0; |
| 1392 | 1406 | ||
| 1393 | down_read(&_origins_lock); | 1407 | down_read(&_origins_lock); |
| 1394 | o = __lookup_origin(dev->bdev); | 1408 | o = __lookup_origin(dev->bdev); |
| @@ -1465,7 +1479,7 @@ static int __init dm_snapshot_init(void) | |||
| 1465 | r = dm_register_target(&snapshot_target); | 1479 | r = dm_register_target(&snapshot_target); |
| 1466 | if (r) { | 1480 | if (r) { |
| 1467 | DMERR("snapshot target register failed %d", r); | 1481 | DMERR("snapshot target register failed %d", r); |
| 1468 | return r; | 1482 | goto bad_register_snapshot_target; |
| 1469 | } | 1483 | } |
| 1470 | 1484 | ||
| 1471 | r = dm_register_target(&origin_target); | 1485 | r = dm_register_target(&origin_target); |
| @@ -1522,6 +1536,9 @@ bad2: | |||
| 1522 | dm_unregister_target(&origin_target); | 1536 | dm_unregister_target(&origin_target); |
| 1523 | bad1: | 1537 | bad1: |
| 1524 | dm_unregister_target(&snapshot_target); | 1538 | dm_unregister_target(&snapshot_target); |
| 1539 | |||
| 1540 | bad_register_snapshot_target: | ||
| 1541 | dm_exception_store_exit(); | ||
| 1525 | return r; | 1542 | return r; |
| 1526 | } | 1543 | } |
| 1527 | 1544 | ||
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 376f1ab48a24..724efc63904d 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
| @@ -47,6 +47,7 @@ struct dm_io { | |||
| 47 | atomic_t io_count; | 47 | atomic_t io_count; |
| 48 | struct bio *bio; | 48 | struct bio *bio; |
| 49 | unsigned long start_time; | 49 | unsigned long start_time; |
| 50 | spinlock_t endio_lock; | ||
| 50 | }; | 51 | }; |
| 51 | 52 | ||
| 52 | /* | 53 | /* |
| @@ -578,8 +579,12 @@ static void dec_pending(struct dm_io *io, int error) | |||
| 578 | struct mapped_device *md = io->md; | 579 | struct mapped_device *md = io->md; |
| 579 | 580 | ||
| 580 | /* Push-back supersedes any I/O errors */ | 581 | /* Push-back supersedes any I/O errors */ |
| 581 | if (error && !(io->error > 0 && __noflush_suspending(md))) | 582 | if (unlikely(error)) { |
| 582 | io->error = error; | 583 | spin_lock_irqsave(&io->endio_lock, flags); |
| 584 | if (!(io->error > 0 && __noflush_suspending(md))) | ||
| 585 | io->error = error; | ||
| 586 | spin_unlock_irqrestore(&io->endio_lock, flags); | ||
| 587 | } | ||
| 583 | 588 | ||
| 584 | if (atomic_dec_and_test(&io->io_count)) { | 589 | if (atomic_dec_and_test(&io->io_count)) { |
| 585 | if (io->error == DM_ENDIO_REQUEUE) { | 590 | if (io->error == DM_ENDIO_REQUEUE) { |
| @@ -1226,6 +1231,7 @@ static void __split_and_process_bio(struct mapped_device *md, struct bio *bio) | |||
| 1226 | atomic_set(&ci.io->io_count, 1); | 1231 | atomic_set(&ci.io->io_count, 1); |
| 1227 | ci.io->bio = bio; | 1232 | ci.io->bio = bio; |
| 1228 | ci.io->md = md; | 1233 | ci.io->md = md; |
| 1234 | spin_lock_init(&ci.io->endio_lock); | ||
| 1229 | ci.sector = bio->bi_sector; | 1235 | ci.sector = bio->bi_sector; |
| 1230 | ci.sector_count = bio_sectors(bio); | 1236 | ci.sector_count = bio_sectors(bio); |
| 1231 | if (unlikely(bio_empty_barrier(bio))) | 1237 | if (unlikely(bio_empty_barrier(bio))) |
| @@ -1822,6 +1828,7 @@ static struct mapped_device *alloc_dev(int minor) | |||
| 1822 | bad_bdev: | 1828 | bad_bdev: |
| 1823 | destroy_workqueue(md->wq); | 1829 | destroy_workqueue(md->wq); |
| 1824 | bad_thread: | 1830 | bad_thread: |
| 1831 | del_gendisk(md->disk); | ||
| 1825 | put_disk(md->disk); | 1832 | put_disk(md->disk); |
| 1826 | bad_disk: | 1833 | bad_disk: |
| 1827 | blk_cleanup_queue(md->queue); | 1834 | blk_cleanup_queue(md->queue); |
diff --git a/drivers/mmc/host/at91_mci.c b/drivers/mmc/host/at91_mci.c index e556d42cc45a..63924e0c7ea9 100644 --- a/drivers/mmc/host/at91_mci.c +++ b/drivers/mmc/host/at91_mci.c | |||
| @@ -72,7 +72,6 @@ | |||
| 72 | #include <asm/irq.h> | 72 | #include <asm/irq.h> |
| 73 | #include <asm/gpio.h> | 73 | #include <asm/gpio.h> |
| 74 | 74 | ||
| 75 | #include <asm/mach/mmc.h> | ||
| 76 | #include <mach/board.h> | 75 | #include <mach/board.h> |
| 77 | #include <mach/cpu.h> | 76 | #include <mach/cpu.h> |
| 78 | #include <mach/at91_mci.h> | 77 | #include <mach/at91_mci.h> |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index a790b1771f9f..245d2cdb4765 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -1009,7 +1009,7 @@ DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, | |||
| 1009 | 1009 | ||
| 1010 | static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev) | 1010 | static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev) |
| 1011 | { | 1011 | { |
| 1012 | /* set SBX00 SATA in IDE mode to AHCI mode */ | 1012 | /* set SBX00/Hudson-2 SATA in IDE mode to AHCI mode */ |
| 1013 | u8 tmp; | 1013 | u8 tmp; |
| 1014 | 1014 | ||
| 1015 | pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &tmp); | 1015 | pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &tmp); |
| @@ -1028,8 +1028,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk | |||
| 1028 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode); | 1028 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode); |
| 1029 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); | 1029 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); |
| 1030 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); | 1030 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); |
| 1031 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_SB900_SATA_IDE, quirk_amd_ide_mode); | 1031 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE, quirk_amd_ide_mode); |
| 1032 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_SB900_SATA_IDE, quirk_amd_ide_mode); | 1032 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE, quirk_amd_ide_mode); |
| 1033 | 1033 | ||
| 1034 | /* | 1034 | /* |
| 1035 | * Serverworks CSB5 IDE does not fully support native mode | 1035 | * Serverworks CSB5 IDE does not fully support native mode |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index a2c18acb8568..90be551b80c1 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
| @@ -1253,6 +1253,7 @@ static int nfs_parse_mount_options(char *raw, | |||
| 1253 | default: | 1253 | default: |
| 1254 | dfprintk(MOUNT, "NFS: unrecognized " | 1254 | dfprintk(MOUNT, "NFS: unrecognized " |
| 1255 | "transport protocol\n"); | 1255 | "transport protocol\n"); |
| 1256 | kfree(string); | ||
| 1256 | return 0; | 1257 | return 0; |
| 1257 | } | 1258 | } |
| 1258 | break; | 1259 | break; |
| @@ -777,36 +777,55 @@ pipe_rdwr_release(struct inode *inode, struct file *filp) | |||
| 777 | static int | 777 | static int |
| 778 | pipe_read_open(struct inode *inode, struct file *filp) | 778 | pipe_read_open(struct inode *inode, struct file *filp) |
| 779 | { | 779 | { |
| 780 | /* We could have perhaps used atomic_t, but this and friends | 780 | int ret = -ENOENT; |
| 781 | below are the only places. So it doesn't seem worthwhile. */ | 781 | |
| 782 | mutex_lock(&inode->i_mutex); | 782 | mutex_lock(&inode->i_mutex); |
| 783 | inode->i_pipe->readers++; | 783 | |
| 784 | if (inode->i_pipe) { | ||
| 785 | ret = 0; | ||
| 786 | inode->i_pipe->readers++; | ||
| 787 | } | ||
| 788 | |||
| 784 | mutex_unlock(&inode->i_mutex); | 789 | mutex_unlock(&inode->i_mutex); |
| 785 | 790 | ||
| 786 | return 0; | 791 | return ret; |
| 787 | } | 792 | } |
| 788 | 793 | ||
| 789 | static int | 794 | static int |
| 790 | pipe_write_open(struct inode *inode, struct file *filp) | 795 | pipe_write_open(struct inode *inode, struct file *filp) |
| 791 | { | 796 | { |
| 797 | int ret = -ENOENT; | ||
| 798 | |||
| 792 | mutex_lock(&inode->i_mutex); | 799 | mutex_lock(&inode->i_mutex); |
| 793 | inode->i_pipe->writers++; | 800 | |
| 801 | if (inode->i_pipe) { | ||
| 802 | ret = 0; | ||
| 803 | inode->i_pipe->writers++; | ||
| 804 | } | ||
| 805 | |||
| 794 | mutex_unlock(&inode->i_mutex); | 806 | mutex_unlock(&inode->i_mutex); |
| 795 | 807 | ||
| 796 | return 0; | 808 | return ret; |
| 797 | } | 809 | } |
| 798 | 810 | ||
| 799 | static int | 811 | static int |
| 800 | pipe_rdwr_open(struct inode *inode, struct file *filp) | 812 | pipe_rdwr_open(struct inode *inode, struct file *filp) |
| 801 | { | 813 | { |
| 814 | int ret = -ENOENT; | ||
| 815 | |||
| 802 | mutex_lock(&inode->i_mutex); | 816 | mutex_lock(&inode->i_mutex); |
| 803 | if (filp->f_mode & FMODE_READ) | 817 | |
| 804 | inode->i_pipe->readers++; | 818 | if (inode->i_pipe) { |
| 805 | if (filp->f_mode & FMODE_WRITE) | 819 | ret = 0; |
| 806 | inode->i_pipe->writers++; | 820 | if (filp->f_mode & FMODE_READ) |
| 821 | inode->i_pipe->readers++; | ||
| 822 | if (filp->f_mode & FMODE_WRITE) | ||
| 823 | inode->i_pipe->writers++; | ||
| 824 | } | ||
| 825 | |||
| 807 | mutex_unlock(&inode->i_mutex); | 826 | mutex_unlock(&inode->i_mutex); |
| 808 | 827 | ||
| 809 | return 0; | 828 | return ret; |
| 810 | } | 829 | } |
| 811 | 830 | ||
| 812 | /* | 831 | /* |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f490e7a7307a..86257a412732 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -379,9 +379,6 @@ | |||
| 379 | #define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c | 379 | #define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c |
| 380 | #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 | 380 | #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 |
| 381 | #define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c | 381 | #define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c |
| 382 | /* AMD SB Chipset */ | ||
| 383 | #define PCI_DEVICE_ID_AMD_SB900_IDE 0x780c | ||
| 384 | #define PCI_DEVICE_ID_AMD_SB900_SATA_IDE 0x7800 | ||
| 385 | 382 | ||
| 386 | #define PCI_VENDOR_ID_VLSI 0x1004 | 383 | #define PCI_VENDOR_ID_VLSI 0x1004 |
| 387 | #define PCI_DEVICE_ID_VLSI_82C592 0x0005 | 384 | #define PCI_DEVICE_ID_VLSI_82C592 0x0005 |
| @@ -553,9 +550,10 @@ | |||
| 553 | #define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096 | 550 | #define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096 |
| 554 | #define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097 | 551 | #define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097 |
| 555 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A | 552 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A |
| 556 | |||
| 557 | #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 | 553 | #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 |
| 558 | #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 | 554 | #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 |
| 555 | #define PCI_DEVICE_ID_AMD_HUDSON2_IDE 0x780c | ||
| 556 | #define PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE 0x7800 | ||
| 559 | 557 | ||
| 560 | #define PCI_VENDOR_ID_TRIDENT 0x1023 | 558 | #define PCI_VENDOR_ID_TRIDENT 0x1023 |
| 561 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 | 559 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 |
diff --git a/kernel/power/suspend_test.c b/kernel/power/suspend_test.c index 17d8bb1acf9c..25596e450ac7 100644 --- a/kernel/power/suspend_test.c +++ b/kernel/power/suspend_test.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * The time it takes is system-specific though, so when we test this | 19 | * The time it takes is system-specific though, so when we test this |
| 20 | * during system bootup we allow a LOT of time. | 20 | * during system bootup we allow a LOT of time. |
| 21 | */ | 21 | */ |
| 22 | #define TEST_SUSPEND_SECONDS 5 | 22 | #define TEST_SUSPEND_SECONDS 10 |
| 23 | 23 | ||
| 24 | static unsigned long suspend_test_start_time; | 24 | static unsigned long suspend_test_start_time; |
| 25 | 25 | ||
| @@ -49,7 +49,8 @@ void suspend_test_finish(const char *label) | |||
| 49 | * has some performance issues. The stack dump of a WARN_ON | 49 | * has some performance issues. The stack dump of a WARN_ON |
| 50 | * is more likely to get the right attention than a printk... | 50 | * is more likely to get the right attention than a printk... |
| 51 | */ | 51 | */ |
| 52 | WARN(msec > (TEST_SUSPEND_SECONDS * 1000), "Component: %s\n", label); | 52 | WARN(msec > (TEST_SUSPEND_SECONDS * 1000), |
| 53 | "Component: %s, time: %u\n", label, msec); | ||
| 53 | } | 54 | } |
| 54 | 55 | ||
| 55 | /* | 56 | /* |
