diff options
Diffstat (limited to 'mm/highmem.c')
| -rw-r--r-- | mm/highmem.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/mm/highmem.c b/mm/highmem.c index 25878cc49daa..9c1e627f282e 100644 --- a/mm/highmem.c +++ b/mm/highmem.c | |||
| @@ -426,16 +426,21 @@ void __init page_address_init(void) | |||
| 426 | 426 | ||
| 427 | void debug_kmap_atomic(enum km_type type) | 427 | void debug_kmap_atomic(enum km_type type) |
| 428 | { | 428 | { |
| 429 | static unsigned warn_count = 10; | 429 | static int warn_count = 10; |
| 430 | 430 | ||
| 431 | if (unlikely(warn_count == 0)) | 431 | if (unlikely(warn_count < 0)) |
| 432 | return; | 432 | return; |
| 433 | 433 | ||
| 434 | if (unlikely(in_interrupt())) { | 434 | if (unlikely(in_interrupt())) { |
| 435 | if (in_irq()) { | 435 | if (in_nmi()) { |
| 436 | if (type != KM_NMI && type != KM_NMI_PTE) { | ||
| 437 | WARN_ON(1); | ||
| 438 | warn_count--; | ||
| 439 | } | ||
| 440 | } else if (in_irq()) { | ||
| 436 | if (type != KM_IRQ0 && type != KM_IRQ1 && | 441 | if (type != KM_IRQ0 && type != KM_IRQ1 && |
| 437 | type != KM_BIO_SRC_IRQ && type != KM_BIO_DST_IRQ && | 442 | type != KM_BIO_SRC_IRQ && type != KM_BIO_DST_IRQ && |
| 438 | type != KM_BOUNCE_READ) { | 443 | type != KM_BOUNCE_READ && type != KM_IRQ_PTE) { |
| 439 | WARN_ON(1); | 444 | WARN_ON(1); |
| 440 | warn_count--; | 445 | warn_count--; |
| 441 | } | 446 | } |
| @@ -452,7 +457,9 @@ void debug_kmap_atomic(enum km_type type) | |||
| 452 | } | 457 | } |
| 453 | 458 | ||
| 454 | if (type == KM_IRQ0 || type == KM_IRQ1 || type == KM_BOUNCE_READ || | 459 | if (type == KM_IRQ0 || type == KM_IRQ1 || type == KM_BOUNCE_READ || |
| 455 | type == KM_BIO_SRC_IRQ || type == KM_BIO_DST_IRQ) { | 460 | type == KM_BIO_SRC_IRQ || type == KM_BIO_DST_IRQ || |
| 461 | type == KM_IRQ_PTE || type == KM_NMI || | ||
| 462 | type == KM_NMI_PTE ) { | ||
| 456 | if (!irqs_disabled()) { | 463 | if (!irqs_disabled()) { |
| 457 | WARN_ON(1); | 464 | WARN_ON(1); |
| 458 | warn_count--; | 465 | warn_count--; |
