diff options
| author | Marcelo Tosatti <mtosatti@redhat.com> | 2012-04-19 16:06:26 -0400 |
|---|---|---|
| committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-04-19 16:06:26 -0400 |
| commit | eac0556750e727ff39144a9a9e59d5ccf1fc0e2a (patch) | |
| tree | f5ccff7795b2ad5e47f17fb475599c526f533e79 /kernel | |
| parent | f71fa31f9f7ac33cba12b8897983f950ad2c7a5b (diff) | |
| parent | 19853301ef3289bda2d5264c1093e74efddaeab9 (diff) | |
Merge branch 'linus' into queue
Merge reason: development work has dependency on kvm patches merged
upstream.
Conflicts:
Documentation/feature-removal-schedule.txt
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/cred.c | 2 | ||||
| -rw-r--r-- | kernel/irq/Kconfig | 2 | ||||
| -rw-r--r-- | kernel/irq/irqdomain.c | 47 | ||||
| -rw-r--r-- | kernel/irq_work.c | 1 | ||||
| -rw-r--r-- | kernel/itimer.c | 8 | ||||
| -rw-r--r-- | kernel/panic.c | 2 | ||||
| -rw-r--r-- | kernel/time/Kconfig | 4 | ||||
| -rw-r--r-- | kernel/time/tick-broadcast.c | 4 | ||||
| -rw-r--r-- | kernel/time/tick-sched.c | 4 |
9 files changed, 37 insertions, 37 deletions
diff --git a/kernel/cred.c b/kernel/cred.c index 97b36eeca4c9..e70683d9ec32 100644 --- a/kernel/cred.c +++ b/kernel/cred.c | |||
| @@ -386,6 +386,8 @@ int copy_creds(struct task_struct *p, unsigned long clone_flags) | |||
| 386 | struct cred *new; | 386 | struct cred *new; |
| 387 | int ret; | 387 | int ret; |
| 388 | 388 | ||
| 389 | p->replacement_session_keyring = NULL; | ||
| 390 | |||
| 389 | if ( | 391 | if ( |
| 390 | #ifdef CONFIG_KEYS | 392 | #ifdef CONFIG_KEYS |
| 391 | !p->cred->thread_keyring && | 393 | !p->cred->thread_keyring && |
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig index cf1a4a68ce44..d1a758bc972a 100644 --- a/kernel/irq/Kconfig +++ b/kernel/irq/Kconfig | |||
| @@ -62,7 +62,7 @@ config IRQ_DOMAIN_DEBUG | |||
| 62 | help | 62 | help |
| 63 | This option will show the mapping relationship between hardware irq | 63 | This option will show the mapping relationship between hardware irq |
| 64 | numbers and Linux irq numbers. The mapping is exposed via debugfs | 64 | numbers and Linux irq numbers. The mapping is exposed via debugfs |
| 65 | in the file "virq_mapping". | 65 | in the file "irq_domain_mapping". |
| 66 | 66 | ||
| 67 | If you don't know what this means you don't need it. | 67 | If you don't know what this means you don't need it. |
| 68 | 68 | ||
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 3601f3fbf67c..0e0ba5f840b2 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c | |||
| @@ -23,7 +23,6 @@ static LIST_HEAD(irq_domain_list); | |||
| 23 | static DEFINE_MUTEX(irq_domain_mutex); | 23 | static DEFINE_MUTEX(irq_domain_mutex); |
| 24 | 24 | ||
| 25 | static DEFINE_MUTEX(revmap_trees_mutex); | 25 | static DEFINE_MUTEX(revmap_trees_mutex); |
| 26 | static unsigned int irq_virq_count = NR_IRQS; | ||
| 27 | static struct irq_domain *irq_default_domain; | 26 | static struct irq_domain *irq_default_domain; |
| 28 | 27 | ||
| 29 | /** | 28 | /** |
| @@ -184,13 +183,16 @@ struct irq_domain *irq_domain_add_linear(struct device_node *of_node, | |||
| 184 | } | 183 | } |
| 185 | 184 | ||
| 186 | struct irq_domain *irq_domain_add_nomap(struct device_node *of_node, | 185 | struct irq_domain *irq_domain_add_nomap(struct device_node *of_node, |
| 186 | unsigned int max_irq, | ||
| 187 | const struct irq_domain_ops *ops, | 187 | const struct irq_domain_ops *ops, |
| 188 | void *host_data) | 188 | void *host_data) |
| 189 | { | 189 | { |
| 190 | struct irq_domain *domain = irq_domain_alloc(of_node, | 190 | struct irq_domain *domain = irq_domain_alloc(of_node, |
| 191 | IRQ_DOMAIN_MAP_NOMAP, ops, host_data); | 191 | IRQ_DOMAIN_MAP_NOMAP, ops, host_data); |
| 192 | if (domain) | 192 | if (domain) { |
| 193 | domain->revmap_data.nomap.max_irq = max_irq ? max_irq : ~0; | ||
| 193 | irq_domain_add(domain); | 194 | irq_domain_add(domain); |
| 195 | } | ||
| 194 | return domain; | 196 | return domain; |
| 195 | } | 197 | } |
| 196 | 198 | ||
| @@ -262,22 +264,6 @@ void irq_set_default_host(struct irq_domain *domain) | |||
| 262 | irq_default_domain = domain; | 264 | irq_default_domain = domain; |
| 263 | } | 265 | } |
| 264 | 266 | ||
| 265 | /** | ||
| 266 | * irq_set_virq_count() - Set the maximum number of linux irqs | ||
| 267 | * @count: number of linux irqs, capped with NR_IRQS | ||
| 268 | * | ||
| 269 | * This is mainly for use by platforms like iSeries who want to program | ||
| 270 | * the virtual irq number in the controller to avoid the reverse mapping | ||
| 271 | */ | ||
| 272 | void irq_set_virq_count(unsigned int count) | ||
| 273 | { | ||
| 274 | pr_debug("irq: Trying to set virq count to %d\n", count); | ||
| 275 | |||
| 276 | BUG_ON(count < NUM_ISA_INTERRUPTS); | ||
| 277 | if (count < NR_IRQS) | ||
| 278 | irq_virq_count = count; | ||
| 279 | } | ||
| 280 | |||
| 281 | static int irq_setup_virq(struct irq_domain *domain, unsigned int virq, | 267 | static int irq_setup_virq(struct irq_domain *domain, unsigned int virq, |
| 282 | irq_hw_number_t hwirq) | 268 | irq_hw_number_t hwirq) |
| 283 | { | 269 | { |
| @@ -320,13 +306,12 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) | |||
| 320 | pr_debug("irq: create_direct virq allocation failed\n"); | 306 | pr_debug("irq: create_direct virq allocation failed\n"); |
| 321 | return 0; | 307 | return 0; |
| 322 | } | 308 | } |
| 323 | if (virq >= irq_virq_count) { | 309 | if (virq >= domain->revmap_data.nomap.max_irq) { |
| 324 | pr_err("ERROR: no free irqs available below %i maximum\n", | 310 | pr_err("ERROR: no free irqs available below %i maximum\n", |
| 325 | irq_virq_count); | 311 | domain->revmap_data.nomap.max_irq); |
| 326 | irq_free_desc(virq); | 312 | irq_free_desc(virq); |
| 327 | return 0; | 313 | return 0; |
| 328 | } | 314 | } |
| 329 | |||
| 330 | pr_debug("irq: create_direct obtained virq %d\n", virq); | 315 | pr_debug("irq: create_direct obtained virq %d\n", virq); |
| 331 | 316 | ||
| 332 | if (irq_setup_virq(domain, virq, virq)) { | 317 | if (irq_setup_virq(domain, virq, virq)) { |
| @@ -350,7 +335,8 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) | |||
| 350 | unsigned int irq_create_mapping(struct irq_domain *domain, | 335 | unsigned int irq_create_mapping(struct irq_domain *domain, |
| 351 | irq_hw_number_t hwirq) | 336 | irq_hw_number_t hwirq) |
| 352 | { | 337 | { |
| 353 | unsigned int virq, hint; | 338 | unsigned int hint; |
| 339 | int virq; | ||
| 354 | 340 | ||
| 355 | pr_debug("irq: irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq); | 341 | pr_debug("irq: irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq); |
| 356 | 342 | ||
| @@ -377,13 +363,13 @@ unsigned int irq_create_mapping(struct irq_domain *domain, | |||
| 377 | return irq_domain_legacy_revmap(domain, hwirq); | 363 | return irq_domain_legacy_revmap(domain, hwirq); |
| 378 | 364 | ||
| 379 | /* Allocate a virtual interrupt number */ | 365 | /* Allocate a virtual interrupt number */ |
| 380 | hint = hwirq % irq_virq_count; | 366 | hint = hwirq % nr_irqs; |
| 381 | if (hint == 0) | 367 | if (hint == 0) |
| 382 | hint++; | 368 | hint++; |
| 383 | virq = irq_alloc_desc_from(hint, 0); | 369 | virq = irq_alloc_desc_from(hint, 0); |
| 384 | if (!virq) | 370 | if (virq <= 0) |
| 385 | virq = irq_alloc_desc_from(1, 0); | 371 | virq = irq_alloc_desc_from(1, 0); |
| 386 | if (!virq) { | 372 | if (virq <= 0) { |
| 387 | pr_debug("irq: -> virq allocation failed\n"); | 373 | pr_debug("irq: -> virq allocation failed\n"); |
| 388 | return 0; | 374 | return 0; |
| 389 | } | 375 | } |
| @@ -515,7 +501,7 @@ unsigned int irq_find_mapping(struct irq_domain *domain, | |||
| 515 | irq_hw_number_t hwirq) | 501 | irq_hw_number_t hwirq) |
| 516 | { | 502 | { |
| 517 | unsigned int i; | 503 | unsigned int i; |
| 518 | unsigned int hint = hwirq % irq_virq_count; | 504 | unsigned int hint = hwirq % nr_irqs; |
| 519 | 505 | ||
| 520 | /* Look for default domain if nececssary */ | 506 | /* Look for default domain if nececssary */ |
| 521 | if (domain == NULL) | 507 | if (domain == NULL) |
| @@ -536,7 +522,7 @@ unsigned int irq_find_mapping(struct irq_domain *domain, | |||
| 536 | if (data && (data->domain == domain) && (data->hwirq == hwirq)) | 522 | if (data && (data->domain == domain) && (data->hwirq == hwirq)) |
| 537 | return i; | 523 | return i; |
| 538 | i++; | 524 | i++; |
| 539 | if (i >= irq_virq_count) | 525 | if (i >= nr_irqs) |
| 540 | i = 1; | 526 | i = 1; |
| 541 | } while(i != hint); | 527 | } while(i != hint); |
| 542 | return 0; | 528 | return 0; |
| @@ -642,8 +628,9 @@ static int virq_debug_show(struct seq_file *m, void *private) | |||
| 642 | void *data; | 628 | void *data; |
| 643 | int i; | 629 | int i; |
| 644 | 630 | ||
| 645 | seq_printf(m, "%-5s %-7s %-15s %-18s %s\n", "virq", "hwirq", | 631 | seq_printf(m, "%-5s %-7s %-15s %-*s %s\n", "irq", "hwirq", |
| 646 | "chip name", "chip data", "domain name"); | 632 | "chip name", (int)(2 * sizeof(void *) + 2), "chip data", |
| 633 | "domain name"); | ||
| 647 | 634 | ||
| 648 | for (i = 1; i < nr_irqs; i++) { | 635 | for (i = 1; i < nr_irqs; i++) { |
| 649 | desc = irq_to_desc(i); | 636 | desc = irq_to_desc(i); |
| @@ -666,7 +653,7 @@ static int virq_debug_show(struct seq_file *m, void *private) | |||
| 666 | seq_printf(m, "%-15s ", p); | 653 | seq_printf(m, "%-15s ", p); |
| 667 | 654 | ||
| 668 | data = irq_desc_get_chip_data(desc); | 655 | data = irq_desc_get_chip_data(desc); |
| 669 | seq_printf(m, "0x%16p ", data); | 656 | seq_printf(m, data ? "0x%p " : " %p ", data); |
| 670 | 657 | ||
| 671 | if (desc->irq_data.domain && desc->irq_data.domain->of_node) | 658 | if (desc->irq_data.domain && desc->irq_data.domain->of_node) |
| 672 | p = desc->irq_data.domain->of_node->full_name; | 659 | p = desc->irq_data.domain->of_node->full_name; |
diff --git a/kernel/irq_work.c b/kernel/irq_work.c index 0c56d44b9fd5..1588e3b2871b 100644 --- a/kernel/irq_work.c +++ b/kernel/irq_work.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/irq_work.h> | 11 | #include <linux/irq_work.h> |
| 12 | #include <linux/percpu.h> | 12 | #include <linux/percpu.h> |
| 13 | #include <linux/hardirq.h> | 13 | #include <linux/hardirq.h> |
| 14 | #include <linux/irqflags.h> | ||
| 14 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
| 15 | 16 | ||
| 16 | /* | 17 | /* |
diff --git a/kernel/itimer.c b/kernel/itimer.c index 22000c3db0dd..8d262b467573 100644 --- a/kernel/itimer.c +++ b/kernel/itimer.c | |||
| @@ -284,8 +284,12 @@ SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value, | |||
| 284 | if (value) { | 284 | if (value) { |
| 285 | if(copy_from_user(&set_buffer, value, sizeof(set_buffer))) | 285 | if(copy_from_user(&set_buffer, value, sizeof(set_buffer))) |
| 286 | return -EFAULT; | 286 | return -EFAULT; |
| 287 | } else | 287 | } else { |
| 288 | memset((char *) &set_buffer, 0, sizeof(set_buffer)); | 288 | memset(&set_buffer, 0, sizeof(set_buffer)); |
| 289 | printk_once(KERN_WARNING "%s calls setitimer() with new_value NULL pointer." | ||
| 290 | " Misfeature support will be removed\n", | ||
| 291 | current->comm); | ||
| 292 | } | ||
| 289 | 293 | ||
| 290 | error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL); | 294 | error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL); |
| 291 | if (error || !ovalue) | 295 | if (error || !ovalue) |
diff --git a/kernel/panic.c b/kernel/panic.c index 80aed44e345a..8ed89a175d79 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
| @@ -97,7 +97,7 @@ void panic(const char *fmt, ...) | |||
| 97 | /* | 97 | /* |
| 98 | * Avoid nested stack-dumping if a panic occurs during oops processing | 98 | * Avoid nested stack-dumping if a panic occurs during oops processing |
| 99 | */ | 99 | */ |
| 100 | if (!oops_in_progress) | 100 | if (!test_taint(TAINT_DIE) && oops_in_progress <= 1) |
| 101 | dump_stack(); | 101 | dump_stack(); |
| 102 | #endif | 102 | #endif |
| 103 | 103 | ||
diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig index 2cf9cc7aa103..a20dc8a3c949 100644 --- a/kernel/time/Kconfig +++ b/kernel/time/Kconfig | |||
| @@ -1,6 +1,10 @@ | |||
| 1 | # | 1 | # |
| 2 | # Timer subsystem related configuration options | 2 | # Timer subsystem related configuration options |
| 3 | # | 3 | # |
| 4 | |||
| 5 | # Core internal switch. Selected by NO_HZ / HIGH_RES_TIMERS. This is | ||
| 6 | # only related to the tick functionality. Oneshot clockevent devices | ||
| 7 | # are supported independ of this. | ||
| 4 | config TICK_ONESHOT | 8 | config TICK_ONESHOT |
| 5 | bool | 9 | bool |
| 6 | 10 | ||
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index e883f57a3cd3..bf57abdc7bd0 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c | |||
| @@ -575,10 +575,12 @@ void tick_broadcast_switch_to_oneshot(void) | |||
| 575 | unsigned long flags; | 575 | unsigned long flags; |
| 576 | 576 | ||
| 577 | raw_spin_lock_irqsave(&tick_broadcast_lock, flags); | 577 | raw_spin_lock_irqsave(&tick_broadcast_lock, flags); |
| 578 | |||
| 579 | tick_broadcast_device.mode = TICKDEV_MODE_ONESHOT; | ||
| 580 | |||
| 578 | if (cpumask_empty(tick_get_broadcast_mask())) | 581 | if (cpumask_empty(tick_get_broadcast_mask())) |
| 579 | goto end; | 582 | goto end; |
| 580 | 583 | ||
| 581 | tick_broadcast_device.mode = TICKDEV_MODE_ONESHOT; | ||
| 582 | bc = tick_broadcast_device.evtdev; | 584 | bc = tick_broadcast_device.evtdev; |
| 583 | if (bc) | 585 | if (bc) |
| 584 | tick_broadcast_setup_oneshot(bc); | 586 | tick_broadcast_setup_oneshot(bc); |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 3526038f2836..6a3a5b9ff561 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
| @@ -534,9 +534,9 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now) | |||
| 534 | hrtimer_get_expires(&ts->sched_timer), 0)) | 534 | hrtimer_get_expires(&ts->sched_timer), 0)) |
| 535 | break; | 535 | break; |
| 536 | } | 536 | } |
| 537 | /* Update jiffies and reread time */ | 537 | /* Reread time and update jiffies */ |
| 538 | tick_do_update_jiffies64(now); | ||
| 539 | now = ktime_get(); | 538 | now = ktime_get(); |
| 539 | tick_do_update_jiffies64(now); | ||
| 540 | } | 540 | } |
| 541 | } | 541 | } |
| 542 | 542 | ||
