diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c index b69221b..2898b73 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c @@ -340,7 +340,7 @@ static int mpc52xx_irqhost_map(struct irq_domain *h, unsigned int virq, { int l1irq; int l2irq; - struct irq_chip *irqchip; + struct irq_chip *uninitialized_var(irqchip); void *hndlr; int type; u32 reg; @@ -373,9 +373,8 @@ static int mpc52xx_irqhost_map(struct irq_domain *h, unsigned int virq, case MPC52xx_IRQ_L1_PERP: irqchip = &mpc52xx_periph_irqchip; break; case MPC52xx_IRQ_L1_SDMA: irqchip = &mpc52xx_sdma_irqchip; break; case MPC52xx_IRQ_L1_CRIT: - default: pr_warn("%s: Critical IRQ #%d is unsupported! Nopping it.\n", - __func__, l1irq); + __func__, l2irq); irq_set_chip(virq, &no_irq_chip); return 0; } diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 0f3cdda..fe7546e 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -624,11 +624,6 @@ int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, * code gets preempted or delayed for some reason. */ for (i = 0; i < DRM_TIMESTAMP_MAXRETRIES; i++) { - /* Disable preemption to make it very likely to - * succeed in the first iteration even on PREEMPT_RT kernel. - */ - preempt_disable(); - /* Get system timestamp before query. */ stime = ktime_get(); @@ -640,8 +635,6 @@ int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc, if (!drm_timestamp_monotonic) mono_time_offset = ktime_get_monotonic_offset(); - preempt_enable(); - /* Return as no-op if scanout query unsupported or failed. */ if (!(vbl_status & DRM_SCANOUTPOS_VALID)) { DRM_DEBUG("crtc %d : scanoutpos query failed [%d].\n", diff --git a/drivers/misc/hwlat_detector.c b/drivers/misc/hwlat_detector.c index 6f61d5f..d2676b8 100644 --- a/drivers/misc/hwlat_detector.c +++ b/drivers/misc/hwlat_detector.c @@ -413,7 +413,7 @@ static int init_stats(void) goto out; __reset_stats(); - data.threshold = DEFAULT_LAT_THRESHOLD; /* threshold us */ + data.threshold = threshold ?: DEFAULT_LAT_THRESHOLD; /* threshold us */ data.sample_window = DEFAULT_SAMPLE_WINDOW; /* window us */ data.sample_width = DEFAULT_SAMPLE_WIDTH; /* width us */ diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index a3cf48e..a569b71 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1044,7 +1044,7 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) goto out_mput; } - sched_setscheduler(t, SCHED_FIFO, ¶m); + sched_setscheduler_nocheck(t, SCHED_FIFO, ¶m); /* * We keep the reference to the task struct even if diff --git a/localversion-rt b/localversion-rt index b2111a2..c5b71f9 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@ --rt24 +-rt25 diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 6b7ff19..1503ca3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2283,7 +2283,7 @@ static void drain_all_stock(struct mem_cgroup *root_memcg, bool sync) /* Notify other cpus that system-wide "drain" is running */ get_online_cpus(); - curcpu = get_cpu(); + curcpu = get_cpu_light(); for_each_online_cpu(cpu) { struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu); struct mem_cgroup *memcg; @@ -2300,7 +2300,7 @@ static void drain_all_stock(struct mem_cgroup *root_memcg, bool sync) schedule_work_on(cpu, &stock->work); } } - put_cpu(); + put_cpu_light(); if (!sync) goto out; diff --git a/mm/slub.c b/mm/slub.c index f6871c5..7c925ae 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1427,13 +1427,13 @@ static void __free_slab(struct kmem_cache *s, struct page *page) __free_memcg_kmem_pages(page, order); } -static void free_delayed(struct kmem_cache *s, struct list_head *h) +static void free_delayed(struct list_head *h) { while(!list_empty(h)) { struct page *page = list_first_entry(h, struct page, lru); list_del(&page->lru); - __free_slab(s, page); + __free_slab(page->slab_cache, page); } } @@ -2004,7 +2004,7 @@ static int put_cpu_partial(struct kmem_cache *s, struct page *page, int drain) list_splice_init(&f->list, &tofree); raw_spin_unlock(&f->lock); local_irq_restore(flags); - free_delayed(s, &tofree); + free_delayed(&tofree); oldpage = NULL; pobjects = 0; pages = 0; @@ -2081,7 +2081,7 @@ static void flush_all(struct kmem_cache *s) raw_spin_lock_irq(&f->lock); list_splice_init(&f->list, &tofree); raw_spin_unlock_irq(&f->lock); - free_delayed(s, &tofree); + free_delayed(&tofree); } } @@ -2329,7 +2329,7 @@ out: list_splice_init(&f->list, &tofree); raw_spin_unlock(&f->lock); local_irq_restore(flags); - free_delayed(s, &tofree); + free_delayed(&tofree); return freelist; new_slab: