diff options
42 files changed, 218 insertions, 175 deletions
diff --git a/patches/0001-jbd2-Simplify-journal_unmap_buffer.patch b/patches/0001-jbd2-Simplify-journal_unmap_buffer.patch index 617056834f88..b4c4a38bbcf1 100644 --- a/patches/0001-jbd2-Simplify-journal_unmap_buffer.patch +++ b/patches/0001-jbd2-Simplify-journal_unmap_buffer.patch @@ -26,7 +26,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c -@@ -2199,7 +2199,8 @@ static int journal_unmap_buffer(journal_ +@@ -2203,7 +2203,8 @@ static int journal_unmap_buffer(journal_ * holding the page lock. --sct */ @@ -36,7 +36,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> goto zap_buffer_unlocked; /* OK, we have data buffer in journaled mode */ -@@ -2207,10 +2208,6 @@ static int journal_unmap_buffer(journal_ +@@ -2211,10 +2212,6 @@ static int journal_unmap_buffer(journal_ jbd_lock_bh_state(bh); spin_lock(&journal->j_list_lock); @@ -47,7 +47,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * We cannot remove the buffer from checkpoint lists until the * transaction adding inode to orphan list (let's call it T) -@@ -2334,7 +2331,6 @@ static int journal_unmap_buffer(journal_ +@@ -2338,7 +2335,6 @@ static int journal_unmap_buffer(journal_ */ jh->b_modified = 0; jbd2_journal_put_journal_head(jh); diff --git a/patches/0003-jbd2-Move-dropping-of-jh-reference-out-of-un-re-fili.patch b/patches/0003-jbd2-Move-dropping-of-jh-reference-out-of-un-re-fili.patch index 5eebfdb1a0b2..6464bbb1170d 100644 --- a/patches/0003-jbd2-Move-dropping-of-jh-reference-out-of-un-re-fili.patch +++ b/patches/0003-jbd2-Move-dropping-of-jh-reference-out-of-un-re-fili.patch @@ -42,7 +42,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> else --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c -@@ -1598,6 +1598,7 @@ int jbd2_journal_forget (handle_t *handl +@@ -1602,6 +1602,7 @@ int jbd2_journal_forget (handle_t *handl __jbd2_journal_file_buffer(jh, transaction, BJ_Forget); } else { __jbd2_journal_unfile_buffer(jh); @@ -50,7 +50,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (!buffer_jbd(bh)) { spin_unlock(&journal->j_list_lock); goto not_jbd; -@@ -1971,17 +1972,15 @@ static void __jbd2_journal_temp_unlink_b +@@ -1975,17 +1976,15 @@ static void __jbd2_journal_temp_unlink_b } /* @@ -70,7 +70,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh) -@@ -1995,6 +1994,7 @@ void jbd2_journal_unfile_buffer(journal_ +@@ -1999,6 +1998,7 @@ void jbd2_journal_unfile_buffer(journal_ __jbd2_journal_unfile_buffer(jh); spin_unlock(&journal->j_list_lock); jbd_unlock_bh_state(bh); @@ -78,7 +78,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> __brelse(bh); } -@@ -2133,6 +2133,7 @@ static int __dispose_buffer(struct journ +@@ -2137,6 +2137,7 @@ static int __dispose_buffer(struct journ } else { JBUFFER_TRACE(jh, "on running transaction"); __jbd2_journal_unfile_buffer(jh); @@ -86,7 +86,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } return may_free; } -@@ -2498,9 +2499,11 @@ void jbd2_journal_file_buffer(struct jou +@@ -2502,9 +2503,11 @@ void jbd2_journal_file_buffer(struct jou * Called under j_list_lock * Called under jbd_lock_bh_state(jh2bh(jh)) * @@ -100,7 +100,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> { int was_dirty, jlist; struct buffer_head *bh = jh2bh(jh); -@@ -2512,7 +2515,7 @@ void __jbd2_journal_refile_buffer(struct +@@ -2516,7 +2519,7 @@ void __jbd2_journal_refile_buffer(struct /* If the buffer is now unused, just drop it. */ if (jh->b_next_transaction == NULL) { __jbd2_journal_unfile_buffer(jh); @@ -109,7 +109,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* -@@ -2540,6 +2543,7 @@ void __jbd2_journal_refile_buffer(struct +@@ -2544,6 +2547,7 @@ void __jbd2_journal_refile_buffer(struct if (was_dirty) set_buffer_jbddirty(bh); @@ -117,7 +117,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* -@@ -2551,15 +2555,18 @@ void __jbd2_journal_refile_buffer(struct +@@ -2555,15 +2559,18 @@ void __jbd2_journal_refile_buffer(struct void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) { struct buffer_head *bh = jh2bh(jh); diff --git a/patches/0003-mm-SLxB-change-list_lock-to-raw_spinlock_t.patch b/patches/0003-mm-SLxB-change-list_lock-to-raw_spinlock_t.patch index aa5ae3a17236..74a8ba60bbae 100644 --- a/patches/0003-mm-SLxB-change-list_lock-to-raw_spinlock_t.patch +++ b/patches/0003-mm-SLxB-change-list_lock-to-raw_spinlock_t.patch @@ -476,7 +476,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return x; } #endif /* CONFIG_SLUB_DEBUG || CONFIG_SYSFS */ -@@ -2845,7 +2845,7 @@ static void __slab_free(struct kmem_cach +@@ -2848,7 +2848,7 @@ static void __slab_free(struct kmem_cach do { if (unlikely(n)) { @@ -485,7 +485,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> n = NULL; } prior = page->freelist; -@@ -2877,7 +2877,7 @@ static void __slab_free(struct kmem_cach +@@ -2880,7 +2880,7 @@ static void __slab_free(struct kmem_cach * Otherwise the list_lock will synchronize with * other processors updating the list of slabs. */ @@ -494,7 +494,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } } -@@ -2918,7 +2918,7 @@ static void __slab_free(struct kmem_cach +@@ -2921,7 +2921,7 @@ static void __slab_free(struct kmem_cach add_partial(n, page, DEACTIVATE_TO_TAIL); stat(s, FREE_ADD_PARTIAL); } @@ -503,7 +503,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return; slab_empty: -@@ -2933,7 +2933,7 @@ static void __slab_free(struct kmem_cach +@@ -2936,7 +2936,7 @@ static void __slab_free(struct kmem_cach remove_full(s, n, page); } @@ -512,7 +512,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> stat(s, FREE_SLAB); discard_slab(s, page); } -@@ -3323,7 +3323,7 @@ static void +@@ -3329,7 +3329,7 @@ static void init_kmem_cache_node(struct kmem_cache_node *n) { n->nr_partial = 0; @@ -521,7 +521,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> INIT_LIST_HEAD(&n->partial); #ifdef CONFIG_SLUB_DEBUG atomic_long_set(&n->nr_slabs, 0); -@@ -3704,7 +3704,7 @@ static void free_partial(struct kmem_cac +@@ -3710,7 +3710,7 @@ static void free_partial(struct kmem_cac struct page *page, *h; BUG_ON(irqs_disabled()); @@ -530,7 +530,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> list_for_each_entry_safe(page, h, &n->partial, slab_list) { if (!page->inuse) { remove_partial(n, page); -@@ -3714,7 +3714,7 @@ static void free_partial(struct kmem_cac +@@ -3720,7 +3720,7 @@ static void free_partial(struct kmem_cac "Objects remaining in %s on __kmem_cache_shutdown()"); } } @@ -539,7 +539,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> list_for_each_entry_safe(page, h, &discard, slab_list) discard_slab(s, page); -@@ -3986,7 +3986,7 @@ int __kmem_cache_shrink(struct kmem_cach +@@ -3992,7 +3992,7 @@ int __kmem_cache_shrink(struct kmem_cach for (i = 0; i < SHRINK_PROMOTE_MAX; i++) INIT_LIST_HEAD(promote + i); @@ -548,7 +548,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * Build lists of slabs to discard or promote. -@@ -4017,7 +4017,7 @@ int __kmem_cache_shrink(struct kmem_cach +@@ -4023,7 +4023,7 @@ int __kmem_cache_shrink(struct kmem_cach for (i = SHRINK_PROMOTE_MAX - 1; i >= 0; i--) list_splice(promote + i, &n->partial); @@ -557,7 +557,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Release empty slabs */ list_for_each_entry_safe(page, t, &discard, slab_list) -@@ -4425,7 +4425,7 @@ static int validate_slab_node(struct kme +@@ -4431,7 +4431,7 @@ static int validate_slab_node(struct kme struct page *page; unsigned long flags; @@ -566,7 +566,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> list_for_each_entry(page, &n->partial, slab_list) { validate_slab_slab(s, page, map); -@@ -4447,7 +4447,7 @@ static int validate_slab_node(struct kme +@@ -4453,7 +4453,7 @@ static int validate_slab_node(struct kme s->name, count, atomic_long_read(&n->nr_slabs)); out: @@ -575,7 +575,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return count; } -@@ -4633,12 +4633,12 @@ static int list_locations(struct kmem_ca +@@ -4639,12 +4639,12 @@ static int list_locations(struct kmem_ca if (!atomic_long_read(&n->nr_slabs)) continue; diff --git a/patches/0004-jbd2-Drop-unnecessary-branch-from-jbd2_journal_forge.patch b/patches/0004-jbd2-Drop-unnecessary-branch-from-jbd2_journal_forge.patch index 4238849af1cf..07e46014bc1a 100644 --- a/patches/0004-jbd2-Drop-unnecessary-branch-from-jbd2_journal_forge.patch +++ b/patches/0004-jbd2-Drop-unnecessary-branch-from-jbd2_journal_forge.patch @@ -14,7 +14,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c -@@ -1599,10 +1599,6 @@ int jbd2_journal_forget (handle_t *handl +@@ -1603,10 +1603,6 @@ int jbd2_journal_forget (handle_t *handl } else { __jbd2_journal_unfile_buffer(jh); jbd2_journal_put_journal_head(jh); diff --git a/patches/0004-mm-SLUB-delay-giving-back-empty-slubs-to-IRQ-enabled.patch b/patches/0004-mm-SLUB-delay-giving-back-empty-slubs-to-IRQ-enabled.patch index 8524e8f20d4a..f66226b06382 100644 --- a/patches/0004-mm-SLUB-delay-giving-back-empty-slubs-to-IRQ-enabled.patch +++ b/patches/0004-mm-SLUB-delay-giving-back-empty-slubs-to-IRQ-enabled.patch @@ -168,15 +168,15 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return p; } -@@ -3136,6 +3191,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca +@@ -3139,6 +3194,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca void **p) { struct kmem_cache_cpu *c; + LIST_HEAD(to_free); int i; - /* memcg and kmem_cache debug support */ -@@ -3159,7 +3215,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca + if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP)) +@@ -3165,7 +3221,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca * of re-populating per CPU c->freelist */ p[i] = ___slab_alloc(s, flags, NUMA_NO_NODE, @@ -185,7 +185,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (unlikely(!p[i])) goto error; -@@ -3174,6 +3230,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca +@@ -3180,6 +3236,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca } c->tid = next_tid(c->tid); local_irq_enable(); @@ -193,7 +193,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Clear memory outside IRQ disabled fastpath loop */ if (unlikely(slab_want_init_on_alloc(flags, s))) { -@@ -3188,6 +3245,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca +@@ -3194,6 +3251,7 @@ int kmem_cache_alloc_bulk(struct kmem_ca return i; error: local_irq_enable(); @@ -201,7 +201,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> slab_post_alloc_hook(s, flags, i, p); __kmem_cache_free_bulk(s, i, p); return 0; -@@ -4224,6 +4282,12 @@ void __init kmem_cache_init(void) +@@ -4230,6 +4288,12 @@ void __init kmem_cache_init(void) { static __initdata struct kmem_cache boot_kmem_cache, boot_kmem_cache_node; diff --git a/patches/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch b/patches/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch index fe92c3b6d922..13b61b7f7951 100644 --- a/patches/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch +++ b/patches/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch @@ -17,7 +17,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c -@@ -1550,7 +1550,7 @@ int jbd2_journal_forget (handle_t *handl +@@ -1554,7 +1554,7 @@ int jbd2_journal_forget (handle_t *handl if (!J_EXPECT_JH(jh, !jh->b_committed_data, "inconsistent data on disk")) { err = -EIO; @@ -26,7 +26,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* keep track of whether or not this transaction modified us */ -@@ -1640,7 +1640,7 @@ int jbd2_journal_forget (handle_t *handl +@@ -1644,7 +1644,7 @@ int jbd2_journal_forget (handle_t *handl if (!jh->b_cp_transaction) { JBUFFER_TRACE(jh, "belongs to none transaction"); spin_unlock(&journal->j_list_lock); @@ -35,7 +35,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* -@@ -1650,7 +1650,7 @@ int jbd2_journal_forget (handle_t *handl +@@ -1654,7 +1654,7 @@ int jbd2_journal_forget (handle_t *handl if (!buffer_dirty(bh)) { __jbd2_journal_remove_checkpoint(jh); spin_unlock(&journal->j_list_lock); @@ -44,7 +44,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* -@@ -1663,10 +1663,9 @@ int jbd2_journal_forget (handle_t *handl +@@ -1667,10 +1667,9 @@ int jbd2_journal_forget (handle_t *handl __jbd2_journal_file_buffer(jh, transaction, BJ_Forget); spin_unlock(&journal->j_list_lock); } diff --git a/patches/0006-jbd2-Make-state-lock-a-spinlock.patch b/patches/0006-jbd2-Make-state-lock-a-spinlock.patch index f34e9e906efa..41415b3735ee 100644 --- a/patches/0006-jbd2-Make-state-lock-a-spinlock.patch +++ b/patches/0006-jbd2-Make-state-lock-a-spinlock.patch @@ -128,7 +128,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c -@@ -879,7 +879,7 @@ do_get_write_access(handle_t *handle, st +@@ -877,7 +877,7 @@ do_get_write_access(handle_t *handle, st start_lock = jiffies; lock_buffer(bh); @@ -137,7 +137,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* If it takes too long to lock the buffer, trace it */ time_lock = jbd2_time_diff(start_lock, jiffies); -@@ -929,7 +929,7 @@ do_get_write_access(handle_t *handle, st +@@ -927,7 +927,7 @@ do_get_write_access(handle_t *handle, st error = -EROFS; if (is_handle_aborted(handle)) { @@ -146,7 +146,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> goto out; } error = 0; -@@ -993,7 +993,7 @@ do_get_write_access(handle_t *handle, st +@@ -991,7 +991,7 @@ do_get_write_access(handle_t *handle, st */ if (buffer_shadow(bh)) { JBUFFER_TRACE(jh, "on shadow: sleep"); @@ -155,7 +155,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> wait_on_bit_io(&bh->b_state, BH_Shadow, TASK_UNINTERRUPTIBLE); goto repeat; } -@@ -1014,7 +1014,7 @@ do_get_write_access(handle_t *handle, st +@@ -1012,7 +1012,7 @@ do_get_write_access(handle_t *handle, st JBUFFER_TRACE(jh, "generate frozen data"); if (!frozen_buffer) { JBUFFER_TRACE(jh, "allocate memory for buffer"); @@ -164,7 +164,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> frozen_buffer = jbd2_alloc(jh2bh(jh)->b_size, GFP_NOFS | __GFP_NOFAIL); goto repeat; -@@ -1033,7 +1033,7 @@ do_get_write_access(handle_t *handle, st +@@ -1031,7 +1031,7 @@ do_get_write_access(handle_t *handle, st jh->b_next_transaction = transaction; done: @@ -173,7 +173,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * If we are about to journal a buffer, then any revoke pending on it is -@@ -1172,7 +1172,7 @@ int jbd2_journal_get_create_access(handl +@@ -1173,7 +1173,7 @@ int jbd2_journal_get_create_access(handl * that case: the transaction must have deleted the buffer for it to be * reused here. */ @@ -182,7 +182,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> J_ASSERT_JH(jh, (jh->b_transaction == transaction || jh->b_transaction == NULL || (jh->b_transaction == journal->j_committing_transaction && -@@ -1207,7 +1207,7 @@ int jbd2_journal_get_create_access(handl +@@ -1208,7 +1208,7 @@ int jbd2_journal_get_create_access(handl jh->b_next_transaction = transaction; spin_unlock(&journal->j_list_lock); } @@ -191,7 +191,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * akpm: I added this. ext3_alloc_branch can pick up new indirect -@@ -1275,13 +1275,13 @@ int jbd2_journal_get_undo_access(handle_ +@@ -1279,13 +1279,13 @@ int jbd2_journal_get_undo_access(handle_ committed_data = jbd2_alloc(jh2bh(jh)->b_size, GFP_NOFS|__GFP_NOFAIL); @@ -207,7 +207,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> goto repeat; } -@@ -1289,7 +1289,7 @@ int jbd2_journal_get_undo_access(handle_ +@@ -1293,7 +1293,7 @@ int jbd2_journal_get_undo_access(handle_ committed_data = NULL; memcpy(jh->b_committed_data, bh->b_data, bh->b_size); } @@ -216,7 +216,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> out: jbd2_journal_put_journal_head(jh); if (unlikely(committed_data)) -@@ -1390,16 +1390,16 @@ int jbd2_journal_dirty_metadata(handle_t +@@ -1394,16 +1394,16 @@ int jbd2_journal_dirty_metadata(handle_t */ if (jh->b_transaction != transaction && jh->b_next_transaction != transaction) { @@ -236,7 +236,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (jh->b_transaction == transaction && jh->b_jlist != BJ_Metadata) pr_err("JBD2: assertion failure: h_type=%u " -@@ -1409,13 +1409,13 @@ int jbd2_journal_dirty_metadata(handle_t +@@ -1413,13 +1413,13 @@ int jbd2_journal_dirty_metadata(handle_t jh->b_jlist); J_ASSERT_JH(jh, jh->b_transaction != transaction || jh->b_jlist == BJ_Metadata); @@ -252,7 +252,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (jh->b_modified == 0) { /* -@@ -1501,7 +1501,7 @@ int jbd2_journal_dirty_metadata(handle_t +@@ -1505,7 +1505,7 @@ int jbd2_journal_dirty_metadata(handle_t __jbd2_journal_file_buffer(jh, transaction, BJ_Metadata); spin_unlock(&journal->j_list_lock); out_unlock_bh: @@ -261,7 +261,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> out: JBUFFER_TRACE(jh, "exit"); return ret; -@@ -1539,11 +1539,13 @@ int jbd2_journal_forget (handle_t *handl +@@ -1543,11 +1543,13 @@ int jbd2_journal_forget (handle_t *handl BUFFER_TRACE(bh, "entry"); @@ -279,7 +279,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Critical error: attempting to delete a bitmap buffer, maybe? * Don't do any jbd operations, and return an error. */ -@@ -1664,18 +1666,14 @@ int jbd2_journal_forget (handle_t *handl +@@ -1668,18 +1670,14 @@ int jbd2_journal_forget (handle_t *handl spin_unlock(&journal->j_list_lock); } drop: @@ -300,7 +300,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /** -@@ -1874,7 +1872,7 @@ int jbd2_journal_stop(handle_t *handle) +@@ -1878,7 +1876,7 @@ int jbd2_journal_stop(handle_t *handle) * * j_list_lock is held. * @@ -309,7 +309,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> */ static inline void -@@ -1898,7 +1896,7 @@ static inline void +@@ -1902,7 +1900,7 @@ static inline void * * Called with j_list_lock held, and the journal may not be locked. * @@ -318,7 +318,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> */ static inline void -@@ -1930,7 +1928,7 @@ static void __jbd2_journal_temp_unlink_b +@@ -1934,7 +1932,7 @@ static void __jbd2_journal_temp_unlink_b transaction_t *transaction; struct buffer_head *bh = jh2bh(jh); @@ -327,7 +327,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> transaction = jh->b_transaction; if (transaction) assert_spin_locked(&transaction->t_journal->j_list_lock); -@@ -1984,11 +1982,11 @@ void jbd2_journal_unfile_buffer(journal_ +@@ -1988,11 +1986,11 @@ void jbd2_journal_unfile_buffer(journal_ /* Get reference so that buffer cannot be freed before we unlock it */ get_bh(bh); @@ -341,7 +341,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> jbd2_journal_put_journal_head(jh); __brelse(bh); } -@@ -1996,7 +1994,7 @@ void jbd2_journal_unfile_buffer(journal_ +@@ -2000,7 +1998,7 @@ void jbd2_journal_unfile_buffer(journal_ /* * Called from jbd2_journal_try_to_free_buffers(). * @@ -350,7 +350,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> */ static void __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh) -@@ -2083,10 +2081,10 @@ int jbd2_journal_try_to_free_buffers(jou +@@ -2087,10 +2085,10 @@ int jbd2_journal_try_to_free_buffers(jou if (!jh) continue; @@ -363,7 +363,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (buffer_jbd(bh)) goto busy; } while ((bh = bh->b_this_page) != head); -@@ -2107,7 +2105,7 @@ int jbd2_journal_try_to_free_buffers(jou +@@ -2111,7 +2109,7 @@ int jbd2_journal_try_to_free_buffers(jou * * Called under j_list_lock. * @@ -372,7 +372,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> */ static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) { -@@ -2201,7 +2199,7 @@ static int journal_unmap_buffer(journal_ +@@ -2205,7 +2203,7 @@ static int journal_unmap_buffer(journal_ /* OK, we have data buffer in journaled mode */ write_lock(&journal->j_state_lock); @@ -381,7 +381,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> spin_lock(&journal->j_list_lock); /* -@@ -2282,10 +2280,10 @@ static int journal_unmap_buffer(journal_ +@@ -2286,10 +2284,10 @@ static int journal_unmap_buffer(journal_ * for commit and try again. */ if (partial_page) { @@ -394,7 +394,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return -EBUSY; } /* -@@ -2299,10 +2297,10 @@ static int journal_unmap_buffer(journal_ +@@ -2303,10 +2301,10 @@ static int journal_unmap_buffer(journal_ if (journal->j_running_transaction && buffer_jbddirty(bh)) jh->b_next_transaction = journal->j_running_transaction; jh->b_modified = 0; @@ -407,7 +407,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> return 0; } else { /* Good, the buffer belongs to the running transaction. -@@ -2326,10 +2324,10 @@ static int journal_unmap_buffer(journal_ +@@ -2330,10 +2328,10 @@ static int journal_unmap_buffer(journal_ * here. */ jh->b_modified = 0; @@ -420,7 +420,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> zap_buffer_unlocked: clear_buffer_dirty(bh); J_ASSERT_BH(bh, !buffer_jbddirty(bh)); -@@ -2416,7 +2414,7 @@ void __jbd2_journal_file_buffer(struct j +@@ -2420,7 +2418,7 @@ void __jbd2_journal_file_buffer(struct j int was_dirty = 0; struct buffer_head *bh = jh2bh(jh); @@ -429,7 +429,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> assert_spin_locked(&transaction->t_journal->j_list_lock); J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); -@@ -2478,11 +2476,11 @@ void __jbd2_journal_file_buffer(struct j +@@ -2482,11 +2480,11 @@ void __jbd2_journal_file_buffer(struct j void jbd2_journal_file_buffer(struct journal_head *jh, transaction_t *transaction, int jlist) { @@ -443,7 +443,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } /* -@@ -2492,7 +2490,7 @@ void jbd2_journal_file_buffer(struct jou +@@ -2496,7 +2494,7 @@ void jbd2_journal_file_buffer(struct jou * buffer on that transaction's metadata list. * * Called under j_list_lock @@ -452,7 +452,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> * * When this function returns true, there's no next transaction to refile to * and the caller has to drop jh reference through -@@ -2503,7 +2501,7 @@ bool __jbd2_journal_refile_buffer(struct +@@ -2507,7 +2505,7 @@ bool __jbd2_journal_refile_buffer(struct int was_dirty, jlist; struct buffer_head *bh = jh2bh(jh); @@ -461,7 +461,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (jh->b_transaction) assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock); -@@ -2549,17 +2547,13 @@ bool __jbd2_journal_refile_buffer(struct +@@ -2553,17 +2551,13 @@ bool __jbd2_journal_refile_buffer(struct */ void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) { diff --git a/patches/0011-printk_safe-remove-printk-safe-code.patch b/patches/0011-printk_safe-remove-printk-safe-code.patch index 943a2d551959..aa8be9a69bac 100644 --- a/patches/0011-printk_safe-remove-printk-safe-code.patch +++ b/patches/0011-printk_safe-remove-printk-safe-code.patch @@ -666,7 +666,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> -} --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c -@@ -8927,7 +8927,6 @@ void ftrace_dump(enum ftrace_dump_mode o +@@ -8929,7 +8929,6 @@ void ftrace_dump(enum ftrace_dump_mode o tracing_off(); local_irq_save(flags); @@ -674,7 +674,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Simulate the iterator */ trace_init_global_iter(&iter); -@@ -9004,7 +9003,6 @@ void ftrace_dump(enum ftrace_dump_mode o +@@ -9006,7 +9005,6 @@ void ftrace_dump(enum ftrace_dump_mode o atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled); } atomic_dec(&dump_running); diff --git a/patches/0020-serial-8250-implement-write_atomic.patch b/patches/0020-serial-8250-implement-write_atomic.patch index 4445ea7cdec2..ea7e56c1a757 100644 --- a/patches/0020-serial-8250-implement-write_atomic.patch +++ b/patches/0020-serial-8250-implement-write_atomic.patch @@ -69,7 +69,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> void serial8250_rpm_get(struct uart_8250_port *p); --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c -@@ -266,7 +266,7 @@ static void serial8250_timeout(struct ti +@@ -265,7 +265,7 @@ static void serial8250_timeout(struct ti static void serial8250_backup_timeout(struct timer_list *t) { struct uart_8250_port *up = from_timer(up, t, timer); @@ -78,7 +78,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> unsigned long flags; spin_lock_irqsave(&up->port.lock, flags); -@@ -275,10 +275,8 @@ static void serial8250_backup_timeout(st +@@ -274,10 +274,8 @@ static void serial8250_backup_timeout(st * Must disable interrupts or else we risk racing with the interrupt * based handler. */ @@ -91,7 +91,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> iir = serial_in(up, UART_IIR); -@@ -301,7 +299,7 @@ static void serial8250_backup_timeout(st +@@ -300,7 +298,7 @@ static void serial8250_backup_timeout(st serial8250_tx_chars(up); if (up->port.irq) @@ -100,7 +100,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> spin_unlock_irqrestore(&up->port.lock, flags); -@@ -579,6 +577,14 @@ serial8250_register_ports(struct uart_dr +@@ -578,6 +576,14 @@ serial8250_register_ports(struct uart_dr #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -115,7 +115,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> static void univ8250_console_write(struct console *co, const char *s, unsigned int count) { -@@ -664,6 +670,7 @@ static int univ8250_console_match(struct +@@ -663,6 +669,7 @@ static int univ8250_console_match(struct static struct console univ8250_console = { .name = "ttyS", @@ -290,7 +290,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> serial8250_rpm_put(up); } -@@ -2354,7 +2392,7 @@ void serial8250_do_shutdown(struct uart_ +@@ -2358,7 +2396,7 @@ void serial8250_do_shutdown(struct uart_ */ spin_lock_irqsave(&port->lock, flags); up->ier = 0; @@ -299,7 +299,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> spin_unlock_irqrestore(&port->lock, flags); synchronize_irq(port->irq); -@@ -2639,7 +2677,7 @@ serial8250_do_set_termios(struct uart_po +@@ -2643,7 +2681,7 @@ serial8250_do_set_termios(struct uart_po if (up->capabilities & UART_CAP_RTOIE) up->ier |= UART_IER_RTOIE; @@ -308,7 +308,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (up->capabilities & UART_CAP_EFR) { unsigned char efr = 0; -@@ -3103,7 +3141,7 @@ EXPORT_SYMBOL_GPL(serial8250_set_default +@@ -3107,7 +3145,7 @@ EXPORT_SYMBOL_GPL(serial8250_set_default #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -317,7 +317,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> { struct uart_8250_port *up = up_to_u8250p(port); -@@ -3111,6 +3149,18 @@ static void serial8250_console_putchar(s +@@ -3115,6 +3153,18 @@ static void serial8250_console_putchar(s serial_port_out(port, UART_TX, ch); } @@ -336,7 +336,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * Restore serial console when h/w power-off detected */ -@@ -3132,6 +3182,42 @@ static void serial8250_console_restore(s +@@ -3136,6 +3186,42 @@ static void serial8250_console_restore(s serial8250_out_MCR(up, UART_MCR_DTR | UART_MCR_RTS); } @@ -379,7 +379,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * Print a string to the serial port trying not to disturb * any possible real use of the port... -@@ -3143,27 +3229,13 @@ void serial8250_console_write(struct uar +@@ -3147,27 +3233,13 @@ void serial8250_console_write(struct uar { struct uart_port *port = &up->port; unsigned long flags; @@ -409,7 +409,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3171,14 +3243,16 @@ void serial8250_console_write(struct uar +@@ -3175,14 +3247,16 @@ void serial8250_console_write(struct uar up->canary = 0; } @@ -427,7 +427,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * The receive handling will happen properly because the -@@ -3190,8 +3264,7 @@ void serial8250_console_write(struct uar +@@ -3194,8 +3268,7 @@ void serial8250_console_write(struct uar if (up->msr_saved_flags) serial8250_modem_status(up); @@ -437,7 +437,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> serial8250_rpm_put(up); } -@@ -3212,6 +3285,7 @@ static unsigned int probe_baud(struct ua +@@ -3216,6 +3289,7 @@ static unsigned int probe_baud(struct ua int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -445,7 +445,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3220,6 +3294,8 @@ int serial8250_console_setup(struct uart +@@ -3224,6 +3298,8 @@ int serial8250_console_setup(struct uart if (!port->iobase && !port->membase) return -ENODEV; diff --git a/patches/Use-CONFIG_PREEMPTION.patch b/patches/Use-CONFIG_PREEMPTION.patch index 2e75ae6c3b20..0a1f2725cd16 100644 --- a/patches/Use-CONFIG_PREEMPTION.patch +++ b/patches/Use-CONFIG_PREEMPTION.patch @@ -1141,7 +1141,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * Some hypercalls issued by the toolstack can take many 10s of -@@ -37,4 +37,4 @@ asmlinkage __visible void xen_maybe_pree +@@ -39,4 +39,4 @@ asmlinkage __visible void xen_maybe_pree __this_cpu_write(xen_in_preemptible_hcall, true); } } @@ -1381,7 +1381,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> * either synchronize_rcu() or synchronize_rcu_expedited(). It is OK to --- a/kernel/rcu/tree_exp.h +++ b/kernel/rcu/tree_exp.h -@@ -669,7 +669,7 @@ static void rcu_exp_handler(void *unused +@@ -668,7 +668,7 @@ static void rcu_exp_handler(void *unused } } @@ -1412,7 +1412,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> { --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c -@@ -3660,6 +3660,8 @@ print_trace_header(struct seq_file *m, s +@@ -3662,6 +3662,8 @@ print_trace_header(struct seq_file *m, s "desktop", #elif defined(CONFIG_PREEMPT) "preempt", @@ -1434,7 +1434,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> * indefinitely requeue itself while all other CPUs are trapped in --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug -@@ -1070,7 +1070,7 @@ config DEBUG_TIMEKEEPING +@@ -1059,7 +1059,7 @@ config DEBUG_TIMEKEEPING config DEBUG_PREEMPT bool "Debug preemptible kernel" @@ -1510,7 +1510,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Same with comment on barrier() in slab_alloc_node() */ --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -820,7 +820,7 @@ EXPORT_SYMBOL(dev_get_by_napi_id); +@@ -819,7 +819,7 @@ EXPORT_SYMBOL(dev_get_by_napi_id); * * The use of raw_seqcount_begin() and cond_resched() before * retrying is required as we want to give the writers a chance diff --git a/patches/add_migrate_disable.patch b/patches/add_migrate_disable.patch index ea51560d6e9d..afd8f38a26c2 100644 --- a/patches/add_migrate_disable.patch +++ b/patches/add_migrate_disable.patch @@ -426,7 +426,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> goto out; if (task_running(rq, p) || p->state == TASK_WAKING) { -@@ -4028,6 +4038,8 @@ pick_next_task(struct rq *rq, struct tas +@@ -4032,6 +4042,8 @@ pick_next_task(struct rq *rq, struct tas BUG(); } @@ -435,7 +435,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * __schedule() is the main scheduler function. * -@@ -4098,6 +4110,9 @@ static void __sched notrace __schedule(b +@@ -4102,6 +4114,9 @@ static void __sched notrace __schedule(b rq_lock(rq, &rf); smp_mb__after_spinlock(); @@ -445,7 +445,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Promote REQ to ACT */ rq->clock_update_flags <<= 1; update_rq_clock(rq); -@@ -6340,6 +6355,7 @@ static void migrate_tasks(struct rq *dea +@@ -6344,6 +6359,7 @@ static void migrate_tasks(struct rq *dea break; next = __pick_migrate_task(rq); @@ -453,7 +453,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* * Rules for changing task_struct::cpus_mask are holding -@@ -8035,3 +8051,162 @@ const u32 sched_prio_to_wmult[40] = { +@@ -8046,3 +8062,162 @@ const u32 sched_prio_to_wmult[40] = { }; #undef CREATE_TRACE_POINTS diff --git a/patches/drm-i915-Don-t-disable-interrupts-for-intel_engine_b.patch b/patches/drm-i915-Don-t-disable-interrupts-for-intel_engine_b.patch index 26a7fa43d732..cbf9db14fea6 100644 --- a/patches/drm-i915-Don-t-disable-interrupts-for-intel_engine_b.patch +++ b/patches/drm-i915-Don-t-disable-interrupts-for-intel_engine_b.patch @@ -84,7 +84,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> struct intel_engine_cs *engine = --- a/drivers/gpu/drm/i915/gt/intel_engine.h +++ b/drivers/gpu/drm/i915/gt/intel_engine.h -@@ -349,7 +349,6 @@ void intel_engine_init_execlists(struct +@@ -357,7 +357,6 @@ void intel_engine_init_execlists(struct void intel_engine_init_breadcrumbs(struct intel_engine_cs *engine); void intel_engine_fini_breadcrumbs(struct intel_engine_cs *engine); diff --git a/patches/ftrace-migrate-disable-tracing.patch b/patches/ftrace-migrate-disable-tracing.patch index 6f4347b259e9..b2baaddee0dc 100644 --- a/patches/ftrace-migrate-disable-tracing.patch +++ b/patches/ftrace-migrate-disable-tracing.patch @@ -23,7 +23,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #define TRACE_EVENT_TYPE_MAX \ --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c -@@ -2354,6 +2354,8 @@ tracing_generic_entry_update(struct trac +@@ -2356,6 +2356,8 @@ tracing_generic_entry_update(struct trac ((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) | (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) | (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0); @@ -32,7 +32,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } EXPORT_SYMBOL_GPL(tracing_generic_entry_update); -@@ -3584,9 +3586,10 @@ static void print_lat_help_header(struct +@@ -3586,9 +3588,10 @@ static void print_lat_help_header(struct "# | / _----=> need-resched \n" "# || / _---=> hardirq/softirq \n" "# ||| / _--=> preempt-depth \n" diff --git a/patches/genirq-update-irq_set_irqchip_state-documentation.patch b/patches/genirq-update-irq_set_irqchip_state-documentation.patch index fac4fd1fe69c..160b84c8c7f3 100644 --- a/patches/genirq-update-irq_set_irqchip_state-documentation.patch +++ b/patches/genirq-update-irq_set_irqchip_state-documentation.patch @@ -14,7 +14,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c -@@ -2687,7 +2687,7 @@ EXPORT_SYMBOL_GPL(irq_get_irqchip_state) +@@ -2673,7 +2673,7 @@ EXPORT_SYMBOL_GPL(irq_get_irqchip_state) * This call sets the internal irqchip state of an interrupt, * depending on the value of @which. * diff --git a/patches/localversion.patch b/patches/localversion.patch index e1f3b8d87864..340816c8febc 100644 --- a/patches/localversion.patch +++ b/patches/localversion.patch @@ -10,4 +10,4 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- /dev/null +++ b/localversion-rt @@ -0,0 +1 @@ -+-rt14 ++-rt15 diff --git a/patches/lockdep-disable-self-test.patch b/patches/lockdep-disable-self-test.patch index 181104eb0a79..d86b021f25fe 100644 --- a/patches/lockdep-disable-self-test.patch +++ b/patches/lockdep-disable-self-test.patch @@ -17,7 +17,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug -@@ -1248,7 +1248,7 @@ config DEBUG_ATOMIC_SLEEP +@@ -1237,7 +1237,7 @@ config DEBUG_ATOMIC_SLEEP config DEBUG_LOCKING_API_SELFTESTS bool "Locking API boot-time self-tests" diff --git a/patches/mm-Warn-on-memory-allocation-in-non-preemptible-cont.patch b/patches/mm-Warn-on-memory-allocation-in-non-preemptible-cont.patch new file mode 100644 index 000000000000..93cf8c31e73a --- /dev/null +++ b/patches/mm-Warn-on-memory-allocation-in-non-preemptible-cont.patch @@ -0,0 +1,42 @@ +From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +Date: Fri, 6 Mar 2020 15:59:06 +0100 +Subject: [PATCH] mm: Warn on memory allocation in non-preemptible context on + RT + +The memory allocation via kmalloc(, GFP_ATOMIC) in atomic context +(disabled preemption or interrupts) is not allowed on RT because the +buddy allocator is using sleeping locks which can't be acquired in this +context. +Such an an allocation may not trigger a warning in the buddy allocator +if it is always satisfied in the SLUB allocator. + +Add a warning on RT if a memory allocation was attempted in not +preemptible region. + +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + mm/slub.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/mm/slub.c ++++ b/mm/slub.c +@@ -2679,6 +2679,9 @@ static __always_inline void *slab_alloc_ + struct page *page; + unsigned long tid; + ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP)) ++ WARN_ON_ONCE(!preemptible() && system_state >= SYSTEM_SCHEDULING); ++ + s = slab_pre_alloc_hook(s, gfpflags); + if (!s) + return NULL; +@@ -3138,6 +3141,9 @@ int kmem_cache_alloc_bulk(struct kmem_ca + struct kmem_cache_cpu *c; + int i; + ++ if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP)) ++ WARN_ON_ONCE(!preemptible() && system_state >= SYSTEM_SCHEDULING); ++ + /* memcg and kmem_cache debug support */ + s = slab_pre_alloc_hook(s, flags); + if (unlikely(!s)) diff --git a/patches/mm-disable-sloub-rt.patch b/patches/mm-disable-sloub-rt.patch index 038e4edcebf7..9f898aeeef5b 100644 --- a/patches/mm-disable-sloub-rt.patch +++ b/patches/mm-disable-sloub-rt.patch @@ -22,7 +22,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/init/Kconfig +++ b/init/Kconfig -@@ -1805,6 +1805,7 @@ choice +@@ -1785,6 +1785,7 @@ choice config SLAB bool "SLAB" @@ -30,7 +30,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> select HAVE_HARDENED_USERCOPY_ALLOCATOR help The regular slab allocator that is established and known to work -@@ -1825,6 +1826,7 @@ config SLUB +@@ -1805,6 +1806,7 @@ config SLUB config SLOB depends on EXPERT bool "SLOB (Simple Allocator)" diff --git a/patches/mm-enable-slub.patch b/patches/mm-enable-slub.patch index 79fde96f6c50..67f9fa659498 100644 --- a/patches/mm-enable-slub.patch +++ b/patches/mm-enable-slub.patch @@ -13,7 +13,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/mm/slub.c +++ b/mm/slub.c -@@ -3730,6 +3730,11 @@ static void list_slab_objects(struct kme +@@ -3736,6 +3736,11 @@ static void list_slab_objects(struct kme const char *text) { #ifdef CONFIG_SLUB_DEBUG @@ -25,7 +25,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> void *addr = page_address(page); void *p; unsigned long *map = bitmap_zalloc(page->objects, GFP_ATOMIC); -@@ -3749,8 +3754,10 @@ static void list_slab_objects(struct kme +@@ -3755,8 +3760,10 @@ static void list_slab_objects(struct kme slab_unlock(page); bitmap_free(map); #endif diff --git a/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch b/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch index 8146fbaf1780..6b2492ffb5e4 100644 --- a/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch +++ b/patches/mm-memcontrol-Don-t-call-schedule_work_on-in-preempt.patch @@ -48,7 +48,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/mm/memcontrol.c +++ b/mm/memcontrol.c -@@ -2265,7 +2265,7 @@ static void drain_all_stock(struct mem_c +@@ -2267,7 +2267,7 @@ static void drain_all_stock(struct mem_c * as well as workers from this path always operate on the local * per-cpu data. CPU up doesn't touch memcg_stock at all. */ @@ -57,7 +57,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> for_each_online_cpu(cpu) { struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu); struct mem_cgroup *memcg; -@@ -2286,7 +2286,7 @@ static void drain_all_stock(struct mem_c +@@ -2288,7 +2288,7 @@ static void drain_all_stock(struct mem_c schedule_work_on(cpu, &stock->work); } } diff --git a/patches/mm-memcontrol-Move-misplaced-local_unlock_irqrestore.patch b/patches/mm-memcontrol-Move-misplaced-local_unlock_irqrestore.patch index 43cd289faf17..3f64e1197d1b 100644 --- a/patches/mm-memcontrol-Move-misplaced-local_unlock_irqrestore.patch +++ b/patches/mm-memcontrol-Move-misplaced-local_unlock_irqrestore.patch @@ -17,7 +17,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/mm/memcontrol.c +++ b/mm/memcontrol.c -@@ -7025,10 +7025,10 @@ void mem_cgroup_swapout(struct page *pag +@@ -7027,10 +7027,10 @@ void mem_cgroup_swapout(struct page *pag mem_cgroup_charge_statistics(memcg, page, PageTransHuge(page), -nr_entries); memcg_check_events(memcg, page); diff --git a/patches/mm-memcontrol-do_not_disable_irq.patch b/patches/mm-memcontrol-do_not_disable_irq.patch index a9685dd1fa50..16e762228089 100644 --- a/patches/mm-memcontrol-do_not_disable_irq.patch +++ b/patches/mm-memcontrol-do_not_disable_irq.patch @@ -29,7 +29,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* Whether legacy memory+swap accounting is active */ static bool do_memsw_account(void) { -@@ -5478,12 +5481,12 @@ static int mem_cgroup_move_account(struc +@@ -5480,12 +5483,12 @@ static int mem_cgroup_move_account(struc ret = 0; @@ -44,7 +44,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> out_unlock: unlock_page(page); out: -@@ -6531,10 +6534,10 @@ void mem_cgroup_commit_charge(struct pag +@@ -6533,10 +6536,10 @@ void mem_cgroup_commit_charge(struct pag commit_charge(page, memcg, lrucare); @@ -57,7 +57,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (do_memsw_account() && PageSwapCache(page)) { swp_entry_t entry = { .val = page_private(page) }; -@@ -6603,7 +6606,7 @@ static void uncharge_batch(const struct +@@ -6605,7 +6608,7 @@ static void uncharge_batch(const struct memcg_oom_recover(ug->memcg); } @@ -66,7 +66,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> __mod_memcg_state(ug->memcg, MEMCG_RSS, -ug->nr_anon); __mod_memcg_state(ug->memcg, MEMCG_CACHE, -ug->nr_file); __mod_memcg_state(ug->memcg, MEMCG_RSS_HUGE, -ug->nr_huge); -@@ -6611,7 +6614,7 @@ static void uncharge_batch(const struct +@@ -6613,7 +6616,7 @@ static void uncharge_batch(const struct __count_memcg_events(ug->memcg, PGPGOUT, ug->pgpgout); __this_cpu_add(ug->memcg->vmstats_percpu->nr_page_events, nr_pages); memcg_check_events(ug->memcg, ug->dummy_page); @@ -75,7 +75,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (!mem_cgroup_is_root(ug->memcg)) css_put_many(&ug->memcg->css, nr_pages); -@@ -6774,10 +6777,10 @@ void mem_cgroup_migrate(struct page *old +@@ -6776,10 +6779,10 @@ void mem_cgroup_migrate(struct page *old commit_charge(newpage, memcg, false); @@ -88,7 +88,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key); -@@ -6969,6 +6972,7 @@ void mem_cgroup_swapout(struct page *pag +@@ -6971,6 +6974,7 @@ void mem_cgroup_swapout(struct page *pag struct mem_cgroup *memcg, *swap_memcg; unsigned int nr_entries; unsigned short oldid; @@ -96,7 +96,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> VM_BUG_ON_PAGE(PageLRU(page), page); VM_BUG_ON_PAGE(page_count(page), page); -@@ -7014,13 +7018,17 @@ void mem_cgroup_swapout(struct page *pag +@@ -7016,13 +7020,17 @@ void mem_cgroup_swapout(struct page *pag * important here to have the interrupts disabled because it is the * only synchronisation we have for updating the per-CPU variables. */ diff --git a/patches/net-core-use-local_bh_disable-in-netif_rx_ni.patch b/patches/net-core-use-local_bh_disable-in-netif_rx_ni.patch index b69937ceb8ba..f1c9d303cfde 100644 --- a/patches/net-core-use-local_bh_disable-in-netif_rx_ni.patch +++ b/patches/net-core-use-local_bh_disable-in-netif_rx_ni.patch @@ -18,7 +18,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4490,11 +4490,9 @@ int netif_rx_ni(struct sk_buff *skb) +@@ -4471,11 +4471,9 @@ int netif_rx_ni(struct sk_buff *skb) trace_netif_rx_ni_entry(skb); diff --git a/patches/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch b/patches/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch index 8fb2c15c4946..30d6d3edfd6f 100644 --- a/patches/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch +++ b/patches/net-dev-always-take-qdisc-s-busylock-in-__dev_xmit_s.patch @@ -20,7 +20,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -3426,7 +3426,11 @@ static inline int __dev_xmit_skb(struct +@@ -3407,7 +3407,11 @@ static inline int __dev_xmit_skb(struct * This permits qdisc->running owner to get the lock more * often and dequeue packets faster. */ diff --git a/patches/net-make-devnet_rename_seq-a-mutex.patch b/patches/net-make-devnet_rename_seq-a-mutex.patch index 8afc1d3c3f85..b7bd87289bf4 100644 --- a/patches/net-make-devnet_rename_seq-a-mutex.patch +++ b/patches/net-make-devnet_rename_seq-a-mutex.patch @@ -21,7 +21,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -196,6 +196,7 @@ static unsigned int napi_gen_id = NR_CPU +@@ -195,6 +195,7 @@ static unsigned int napi_gen_id = NR_CPU static DEFINE_READ_MOSTLY_HASHTABLE(napi_hash, 8); static seqcount_t devnet_rename_seq; @@ -29,7 +29,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> static inline void dev_base_seq_inc(struct net *net) { -@@ -839,7 +840,8 @@ int netdev_get_name(struct net *net, cha +@@ -838,7 +839,8 @@ int netdev_get_name(struct net *net, cha strcpy(name, dev->name); rcu_read_unlock(); if (read_seqcount_retry(&devnet_rename_seq, seq)) { @@ -39,7 +39,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> goto retry; } -@@ -1116,20 +1118,17 @@ int dev_change_name(struct net_device *d +@@ -1115,20 +1117,17 @@ int dev_change_name(struct net_device *d likely(!(dev->priv_flags & IFF_LIVE_RENAME_OK))) return -EBUSY; @@ -66,7 +66,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> if (oldname[0] && !strchr(oldname, '%')) netdev_info(dev, "renamed from %s\n", oldname); -@@ -1142,11 +1141,12 @@ int dev_change_name(struct net_device *d +@@ -1141,11 +1140,12 @@ int dev_change_name(struct net_device *d if (ret) { memcpy(dev->name, oldname, IFNAMSIZ); dev->name_assign_type = old_assign_type; @@ -82,7 +82,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> netdev_adjacent_rename_links(dev, oldname); -@@ -1167,7 +1167,8 @@ int dev_change_name(struct net_device *d +@@ -1166,7 +1166,8 @@ int dev_change_name(struct net_device *d /* err >= 0 after dev_alloc_name() or stores the first errno */ if (err >= 0) { err = ret; @@ -92,7 +92,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> memcpy(dev->name, oldname, IFNAMSIZ); memcpy(oldname, newname, IFNAMSIZ); dev->name_assign_type = old_assign_type; -@@ -1180,6 +1181,11 @@ int dev_change_name(struct net_device *d +@@ -1179,6 +1180,11 @@ int dev_change_name(struct net_device *d } return err; diff --git a/patches/preempt-lazy-support.patch b/patches/preempt-lazy-support.patch index c80603cdb801..4db1c299402f 100644 --- a/patches/preempt-lazy-support.patch +++ b/patches/preempt-lazy-support.patch @@ -291,7 +291,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #ifdef CONFIG_SMP plist_node_init(&p->pushable_tasks, MAX_PRIO); RB_CLEAR_NODE(&p->pushable_dl_tasks); -@@ -4140,6 +4185,7 @@ static void __sched notrace __schedule(b +@@ -4144,6 +4189,7 @@ static void __sched notrace __schedule(b next = pick_next_task(rq, prev, &rf); clear_tsk_need_resched(prev); @@ -299,7 +299,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> clear_preempt_need_resched(); if (likely(prev != next)) { -@@ -4327,6 +4373,30 @@ static void __sched notrace preempt_sche +@@ -4331,6 +4377,30 @@ static void __sched notrace preempt_sche } while (need_resched()); } @@ -330,7 +330,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #ifdef CONFIG_PREEMPTION /* * This is the entry point to schedule() from in-kernel preemption -@@ -4340,7 +4410,8 @@ asmlinkage __visible void __sched notrac +@@ -4344,7 +4414,8 @@ asmlinkage __visible void __sched notrac */ if (likely(!preemptible())) return; @@ -340,7 +340,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> preempt_schedule_common(); } NOKPROBE_SYMBOL(preempt_schedule); -@@ -4367,6 +4438,9 @@ asmlinkage __visible void __sched notrac +@@ -4371,6 +4442,9 @@ asmlinkage __visible void __sched notrac if (likely(!preemptible())) return; @@ -350,7 +350,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> do { /* * Because the function tracer can trace preempt_count_sub() -@@ -6157,7 +6231,9 @@ void init_idle(struct task_struct *idle, +@@ -6161,7 +6235,9 @@ void init_idle(struct task_struct *idle, /* Set the preempt count _outside_ the spinlocks! */ init_idle_preempt_count(idle, cpu); @@ -361,7 +361,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> /* * The idle tasks have their own, simple scheduling class: */ -@@ -8100,6 +8176,7 @@ void migrate_disable(void) +@@ -8111,6 +8187,7 @@ void migrate_disable(void) if (++current->migrate_disable == 1) { this_rq()->nr_pinned++; @@ -369,7 +369,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #ifdef CONFIG_SCHED_DEBUG WARN_ON_ONCE(current->pinned_on_cpu >= 0); current->pinned_on_cpu = smp_processor_id(); -@@ -8181,6 +8258,7 @@ void migrate_enable(void) +@@ -8192,6 +8269,7 @@ void migrate_enable(void) } out: @@ -424,7 +424,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> return; } hrtick_start(rq, delta); -@@ -6730,7 +6730,7 @@ static void check_preempt_wakeup(struct +@@ -6731,7 +6731,7 @@ static void check_preempt_wakeup(struct return; preempt: @@ -433,7 +433,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> /* * Only set the backward buddy when the current task is still * on the rq. This can happen when a wakeup gets interleaved -@@ -9997,7 +9997,7 @@ static void task_fork_fair(struct task_s +@@ -9998,7 +9998,7 @@ static void task_fork_fair(struct task_s * 'current' within the tree based on its new key value. */ swap(curr->vruntime, se->vruntime); @@ -442,7 +442,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } se->vruntime -= cfs_rq->min_vruntime; -@@ -10021,7 +10021,7 @@ prio_changed_fair(struct rq *rq, struct +@@ -10022,7 +10022,7 @@ prio_changed_fair(struct rq *rq, struct */ if (rq->curr == p) { if (p->prio > oldprio) @@ -483,7 +483,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c -@@ -2341,6 +2341,7 @@ tracing_generic_entry_update(struct trac +@@ -2343,6 +2343,7 @@ tracing_generic_entry_update(struct trac struct task_struct *tsk = current; entry->preempt_count = pc & 0xff; @@ -491,7 +491,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> entry->pid = (tsk) ? tsk->pid : 0; entry->type = type; entry->flags = -@@ -2352,7 +2353,8 @@ tracing_generic_entry_update(struct trac +@@ -2354,7 +2355,8 @@ tracing_generic_entry_update(struct trac ((pc & NMI_MASK ) ? TRACE_FLAG_NMI : 0) | ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) | ((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) | @@ -501,7 +501,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0); entry->migrate_disable = (tsk) ? __migrate_disabled(tsk) & 0xFF : 0; -@@ -3581,15 +3583,17 @@ unsigned long trace_total_entries(struct +@@ -3583,15 +3585,17 @@ unsigned long trace_total_entries(struct static void print_lat_help_header(struct seq_file *m) { @@ -528,7 +528,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } static void print_event_info(struct trace_buffer *buf, struct seq_file *m) -@@ -3625,11 +3629,12 @@ static void print_func_help_header_irq(s +@@ -3627,11 +3631,12 @@ static void print_func_help_header_irq(s seq_printf(m, "# %.*s _-----=> irqs-off\n", prec, space); seq_printf(m, "# %.*s / _----=> need-resched\n", prec, space); diff --git a/patches/random-make-it-work-on-rt.patch b/patches/random-make-it-work-on-rt.patch index 00e4840620e9..0984d750212b 100644 --- a/patches/random-make-it-work-on-rt.patch +++ b/patches/random-make-it-work-on-rt.patch @@ -154,7 +154,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> note_interrupt(desc, retval); --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c -@@ -1099,6 +1099,12 @@ static int irq_thread(void *data) +@@ -1085,6 +1085,12 @@ static int irq_thread(void *data) if (action_ret == IRQ_WAKE_THREAD) irq_wake_secondary(desc, action); diff --git a/patches/rtmutex-wire-up-RT-s-locking.patch b/patches/rtmutex-wire-up-RT-s-locking.patch index 3f08bfa4a4fe..dc1637113264 100644 --- a/patches/rtmutex-wire-up-RT-s-locking.patch +++ b/patches/rtmutex-wire-up-RT-s-locking.patch @@ -5,7 +5,6 @@ Subject: rtmutex: wire up RT's locking Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- - include/Kbuild | 7 +++++++ include/linux/mutex.h | 20 +++++++++++++------- include/linux/rwsem.h | 12 ++++++++++++ include/linux/spinlock.h | 12 +++++++++++- @@ -15,7 +14,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> kernel/locking/rwsem.c | 7 +++++++ kernel/locking/spinlock.c | 7 +++++++ kernel/locking/spinlock_debug.c | 5 +++++ - 10 files changed, 80 insertions(+), 15 deletions(-) + 9 files changed, 73 insertions(+), 15 deletions(-) --- a/include/linux/mutex.h +++ b/include/linux/mutex.h diff --git a/patches/sched-core-migrate_enable-must-access-takedown_cpu_t.patch b/patches/sched-core-migrate_enable-must-access-takedown_cpu_t.patch index d67f881d5d69..684fd568a28f 100644 --- a/patches/sched-core-migrate_enable-must-access-takedown_cpu_t.patch +++ b/patches/sched-core-migrate_enable-must-access-takedown_cpu_t.patch @@ -29,7 +29,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> { --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -8136,9 +8136,11 @@ void migrate_enable(void) +@@ -8147,9 +8147,11 @@ void migrate_enable(void) p->migrate_disable = 0; rq->nr_pinned--; diff --git a/patches/sched-disable-rt-group-sched-on-rt.patch b/patches/sched-disable-rt-group-sched-on-rt.patch index c6499b19e31b..3d3762448ea5 100644 --- a/patches/sched-disable-rt-group-sched-on-rt.patch +++ b/patches/sched-disable-rt-group-sched-on-rt.patch @@ -18,7 +18,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- a/init/Kconfig +++ b/init/Kconfig -@@ -924,6 +924,7 @@ config CFS_BANDWIDTH +@@ -904,6 +904,7 @@ config CFS_BANDWIDTH config RT_GROUP_SCHED bool "Group scheduling for SCHED_RR/FIFO" depends on CGROUP_SCHED diff --git a/patches/sched-might-sleep-do-not-account-rcu-depth.patch b/patches/sched-might-sleep-do-not-account-rcu-depth.patch index dc3f0d2a9ddd..fd8836978986 100644 --- a/patches/sched-might-sleep-do-not-account-rcu-depth.patch +++ b/patches/sched-might-sleep-do-not-account-rcu-depth.patch @@ -36,7 +36,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> /* Internal to kernel */ --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -6767,7 +6767,7 @@ void __init sched_init(void) +@@ -6771,7 +6771,7 @@ void __init sched_init(void) #ifdef CONFIG_DEBUG_ATOMIC_SLEEP static inline int preempt_count_equals(int preempt_offset) { diff --git a/patches/sched-migrate_enable-Remove-__schedule-call.patch b/patches/sched-migrate_enable-Remove-__schedule-call.patch index d42ca0a2db26..8de39216798f 100644 --- a/patches/sched-migrate_enable-Remove-__schedule-call.patch +++ b/patches/sched-migrate_enable-Remove-__schedule-call.patch @@ -21,7 +21,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -8178,7 +8178,6 @@ void migrate_enable(void) +@@ -8189,7 +8189,6 @@ void migrate_enable(void) stop_one_cpu_nowait(task_cpu(p), migration_cpu_stop, arg, work); diff --git a/patches/sched-migrate_enable-Use-per-cpu-cpu_stop_work.patch b/patches/sched-migrate_enable-Use-per-cpu-cpu_stop_work.patch index 8c14450fc6a6..dbd2a2a24e14 100644 --- a/patches/sched-migrate_enable-Use-per-cpu-cpu_stop_work.patch +++ b/patches/sched-migrate_enable-Use-per-cpu-cpu_stop_work.patch @@ -26,7 +26,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -8119,6 +8119,9 @@ static void migrate_disabled_sched(struc +@@ -8130,6 +8130,9 @@ static void migrate_disabled_sched(struc p->migrate_disable_scheduled = 1; } @@ -36,7 +36,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> void migrate_enable(void) { struct task_struct *p = current; -@@ -8157,22 +8160,25 @@ void migrate_enable(void) +@@ -8168,22 +8171,25 @@ void migrate_enable(void) WARN_ON(smp_processor_id() != cpu); if (!is_cpu_allowed(p, cpu)) { diff --git a/patches/sched-migrate_enable-Use-stop_one_cpu_nowait.patch b/patches/sched-migrate_enable-Use-stop_one_cpu_nowait.patch index db6346011d43..2967fe4e8db0 100644 --- a/patches/sched-migrate_enable-Use-stop_one_cpu_nowait.patch +++ b/patches/sched-migrate_enable-Use-stop_one_cpu_nowait.patch @@ -62,7 +62,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> } rq_unlock(rq, &rf); raw_spin_unlock(&p->pi_lock); -@@ -8151,7 +8157,8 @@ void migrate_enable(void) +@@ -8162,7 +8168,8 @@ void migrate_enable(void) WARN_ON(smp_processor_id() != cpu); if (!is_cpu_allowed(p, cpu)) { @@ -72,7 +72,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> struct rq_flags rf; rq = task_rq_lock(p, &rf); -@@ -8159,13 +8166,13 @@ void migrate_enable(void) +@@ -8170,13 +8177,13 @@ void migrate_enable(void) arg.dest_cpu = select_fallback_rq(cpu, p); task_rq_unlock(rq, p, &rf); diff --git a/patches/sched-mmdrop-delayed.patch b/patches/sched-mmdrop-delayed.patch index dc7d47d98a77..3614fc61714c 100644 --- a/patches/sched-mmdrop-delayed.patch +++ b/patches/sched-mmdrop-delayed.patch @@ -92,7 +92,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } if (unlikely(prev_state == TASK_DEAD)) { if (prev->sched_class->task_dead) -@@ -6174,6 +6178,8 @@ void sched_setnuma(struct task_struct *p +@@ -6178,6 +6182,8 @@ void sched_setnuma(struct task_struct *p #endif /* CONFIG_NUMA_BALANCING */ #ifdef CONFIG_HOTPLUG_CPU @@ -101,7 +101,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> /* * Ensure that the idle task is using init_mm right before its CPU goes * offline. -@@ -6189,7 +6195,11 @@ void idle_task_exit(void) +@@ -6193,7 +6199,11 @@ void idle_task_exit(void) current->active_mm = &init_mm; finish_arch_post_lock_switch(); } @@ -114,7 +114,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } /* -@@ -6495,6 +6505,10 @@ int sched_cpu_dying(unsigned int cpu) +@@ -6499,6 +6509,10 @@ int sched_cpu_dying(unsigned int cpu) update_max_interval(); nohz_balance_exit_idle(rq); hrtick_clear(rq); diff --git a/patches/serial-8250-only-atomic-lock-for-console.patch b/patches/serial-8250-only-atomic-lock-for-console.patch index f149afaa5fbe..9abc5c608c3d 100644 --- a/patches/serial-8250-only-atomic-lock-for-console.patch +++ b/patches/serial-8250-only-atomic-lock-for-console.patch @@ -126,7 +126,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c -@@ -266,7 +266,7 @@ static void serial8250_timeout(struct ti +@@ -265,7 +265,7 @@ static void serial8250_timeout(struct ti static void serial8250_backup_timeout(struct timer_list *t) { struct uart_8250_port *up = from_timer(up, t, timer); @@ -135,7 +135,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> unsigned long flags; spin_lock_irqsave(&up->port.lock, flags); -@@ -276,7 +276,7 @@ static void serial8250_backup_timeout(st +@@ -275,7 +275,7 @@ static void serial8250_backup_timeout(st * based handler. */ if (up->port.irq) @@ -144,7 +144,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> iir = serial_in(up, UART_IIR); -@@ -299,7 +299,7 @@ static void serial8250_backup_timeout(st +@@ -298,7 +298,7 @@ static void serial8250_backup_timeout(st serial8250_tx_chars(up); if (up->port.irq) @@ -315,7 +315,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> serial8250_rpm_put(up); } -@@ -2394,7 +2347,7 @@ void serial8250_do_shutdown(struct uart_ +@@ -2398,7 +2351,7 @@ void serial8250_do_shutdown(struct uart_ */ spin_lock_irqsave(&port->lock, flags); up->ier = 0; @@ -324,7 +324,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> spin_unlock_irqrestore(&port->lock, flags); synchronize_irq(port->irq); -@@ -2679,7 +2632,7 @@ serial8250_do_set_termios(struct uart_po +@@ -2683,7 +2636,7 @@ serial8250_do_set_termios(struct uart_po if (up->capabilities & UART_CAP_RTOIE) up->ier |= UART_IER_RTOIE; @@ -333,7 +333,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (up->capabilities & UART_CAP_EFR) { unsigned char efr = 0; -@@ -3189,12 +3142,13 @@ void serial8250_console_write_atomic(str +@@ -3193,12 +3146,13 @@ void serial8250_console_write_atomic(str { struct uart_port *port = &up->port; unsigned int flags; @@ -348,7 +348,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> if (atomic_fetch_inc(&up->console_printing)) { uart_console_write(port, "\n", 1, -@@ -3204,7 +3158,7 @@ void serial8250_console_write_atomic(str +@@ -3208,7 +3162,7 @@ void serial8250_console_write_atomic(str atomic_dec(&up->console_printing); wait_for_xmitr(up, BOTH_EMPTY); @@ -357,7 +357,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> console_atomic_unlock(flags); } -@@ -3220,13 +3174,14 @@ void serial8250_console_write(struct uar +@@ -3224,13 +3178,14 @@ void serial8250_console_write(struct uar { struct uart_port *port = &up->port; unsigned long flags; @@ -373,7 +373,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3243,7 +3198,7 @@ void serial8250_console_write(struct uar +@@ -3247,7 +3202,7 @@ void serial8250_console_write(struct uar * and restore the IER */ wait_for_xmitr(up, BOTH_EMPTY); diff --git a/patches/serial-8250-remove-that-trylock-in-serial8250_consol.patch b/patches/serial-8250-remove-that-trylock-in-serial8250_consol.patch index 064bc546b867..e84ce5a21893 100644 --- a/patches/serial-8250-remove-that-trylock-in-serial8250_consol.patch +++ b/patches/serial-8250-remove-that-trylock-in-serial8250_consol.patch @@ -13,7 +13,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c -@@ -3187,17 +3187,9 @@ void serial8250_console_write_atomic(str +@@ -3191,17 +3191,9 @@ void serial8250_console_write_atomic(str { struct uart_port *port = &up->port; unsigned int flags; @@ -31,7 +31,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> touch_nmi_watchdog(); clear_ier(up); -@@ -3212,9 +3204,6 @@ void serial8250_console_write_atomic(str +@@ -3216,9 +3208,6 @@ void serial8250_console_write_atomic(str wait_for_xmitr(up, BOTH_EMPTY); restore_ier(up); diff --git a/patches/series b/patches/series index deda8e741909..58ea97ab810a 100644 --- a/patches/series +++ b/patches/series @@ -169,6 +169,8 @@ tpm-remove-tpm_dev_wq_lock.patch # 20191211232345.24810-1-robh@kernel.org of-Rework-and-simplify-phandle-cache-to-use-a-fixed-.patch +mm-Warn-on-memory-allocation-in-non-preemptible-cont.patch + ############################################################### # Stuff broken upstream and upstream wants something different ############################################################### diff --git a/patches/skbufhead-raw-lock.patch b/patches/skbufhead-raw-lock.patch index 1a5a2ac99372..aab2b93bc9d7 100644 --- a/patches/skbufhead-raw-lock.patch +++ b/patches/skbufhead-raw-lock.patch @@ -15,7 +15,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -3016,6 +3016,7 @@ struct softnet_data { +@@ -3018,6 +3018,7 @@ struct softnet_data { unsigned int dropped; struct sk_buff_head input_pkt_queue; struct napi_struct backlog; @@ -48,7 +48,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> { --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -219,14 +219,14 @@ static inline struct hlist_head *dev_ind +@@ -218,14 +218,14 @@ static inline struct hlist_head *dev_ind static inline void rps_lock(struct softnet_data *sd) { #ifdef CONFIG_RPS @@ -65,7 +65,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #endif } -@@ -5244,7 +5244,7 @@ static void flush_backlog(struct work_st +@@ -5225,7 +5225,7 @@ static void flush_backlog(struct work_st skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) { if (skb->dev->reg_state == NETREG_UNREGISTERING) { __skb_unlink(skb, &sd->input_pkt_queue); @@ -74,7 +74,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> input_queue_head_incr(sd); } } -@@ -5254,11 +5254,14 @@ static void flush_backlog(struct work_st +@@ -5235,11 +5235,14 @@ static void flush_backlog(struct work_st skb_queue_walk_safe(&sd->process_queue, skb, tmp) { if (skb->dev->reg_state == NETREG_UNREGISTERING) { __skb_unlink(skb, &sd->process_queue); @@ -90,7 +90,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } static void flush_all_backlogs(void) -@@ -5879,7 +5882,9 @@ static int process_backlog(struct napi_s +@@ -5860,7 +5863,9 @@ static int process_backlog(struct napi_s while (again) { struct sk_buff *skb; @@ -100,7 +100,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> rcu_read_lock(); __netif_receive_skb(skb); rcu_read_unlock(); -@@ -5887,9 +5892,9 @@ static int process_backlog(struct napi_s +@@ -5868,9 +5873,9 @@ static int process_backlog(struct napi_s if (++work >= quota) return work; @@ -111,7 +111,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> rps_lock(sd); if (skb_queue_empty(&sd->input_pkt_queue)) { /* -@@ -6371,13 +6376,21 @@ static __latent_entropy void net_rx_acti +@@ -6352,13 +6357,21 @@ static __latent_entropy void net_rx_acti unsigned long time_limit = jiffies + usecs_to_jiffies(netdev_budget_usecs); int budget = netdev_budget; @@ -133,7 +133,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> for (;;) { struct napi_struct *n; -@@ -9893,10 +9906,13 @@ static int dev_cpu_dead(unsigned int old +@@ -9875,10 +9888,13 @@ static int dev_cpu_dead(unsigned int old netif_rx_ni(skb); input_queue_head_incr(oldsd); } @@ -148,7 +148,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> return 0; } -@@ -10207,8 +10223,9 @@ static int __init net_dev_init(void) +@@ -10189,8 +10205,9 @@ static int __init net_dev_init(void) INIT_WORK(flush, flush_backlog); diff --git a/patches/slub-disable-SLUB_CPU_PARTIAL.patch b/patches/slub-disable-SLUB_CPU_PARTIAL.patch index b066af953dfc..734f41a65fbf 100644 --- a/patches/slub-disable-SLUB_CPU_PARTIAL.patch +++ b/patches/slub-disable-SLUB_CPU_PARTIAL.patch @@ -36,7 +36,7 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- a/init/Kconfig +++ b/init/Kconfig -@@ -1893,7 +1893,7 @@ config SHUFFLE_PAGE_ALLOCATOR +@@ -1873,7 +1873,7 @@ config SHUFFLE_PAGE_ALLOCATOR config SLUB_CPU_PARTIAL default y diff --git a/patches/softirq-preempt-fix-3-re.patch b/patches/softirq-preempt-fix-3-re.patch index 949d0a324742..a688e57b7f78 100644 --- a/patches/softirq-preempt-fix-3-re.patch +++ b/patches/softirq-preempt-fix-3-re.patch @@ -103,7 +103,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -2675,6 +2675,7 @@ static void __netif_reschedule(struct Qd +@@ -2674,6 +2674,7 @@ static void __netif_reschedule(struct Qd sd->output_queue_tailp = &q->next_sched; raise_softirq_irqoff(NET_TX_SOFTIRQ); local_irq_restore(flags); @@ -111,7 +111,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } void __netif_schedule(struct Qdisc *q) -@@ -2737,6 +2738,7 @@ void __dev_kfree_skb_irq(struct sk_buff +@@ -2736,6 +2737,7 @@ void __dev_kfree_skb_irq(struct sk_buff __this_cpu_write(softnet_data.completion_queue, skb); raise_softirq_irqoff(NET_TX_SOFTIRQ); local_irq_restore(flags); @@ -119,7 +119,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } EXPORT_SYMBOL(__dev_kfree_skb_irq); -@@ -4217,6 +4219,7 @@ static int enqueue_to_backlog(struct sk_ +@@ -4198,6 +4200,7 @@ static int enqueue_to_backlog(struct sk_ rps_unlock(sd); local_irq_restore(flags); @@ -127,7 +127,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> atomic_long_inc(&skb->dev->rx_dropped); kfree_skb(skb); -@@ -5841,12 +5844,14 @@ static void net_rps_action_and_irq_enabl +@@ -5822,12 +5825,14 @@ static void net_rps_action_and_irq_enabl sd->rps_ipi_list = NULL; local_irq_enable(); @@ -142,7 +142,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } static bool sd_has_rps_ipi_waiting(struct softnet_data *sd) -@@ -5924,6 +5929,7 @@ void __napi_schedule(struct napi_struct +@@ -5905,6 +5910,7 @@ void __napi_schedule(struct napi_struct local_irq_save(flags); ____napi_schedule(this_cpu_ptr(&softnet_data), n); local_irq_restore(flags); @@ -150,7 +150,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> } EXPORT_SYMBOL(__napi_schedule); -@@ -9875,6 +9881,7 @@ static int dev_cpu_dead(unsigned int old +@@ -9857,6 +9863,7 @@ static int dev_cpu_dead(unsigned int old raise_softirq_irqoff(NET_TX_SOFTIRQ); local_irq_enable(); diff --git a/patches/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch b/patches/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch index 79000c70415a..59dadde7f6cc 100644 --- a/patches/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch +++ b/patches/upstream-net-rt-remove-preemption-disabling-in-netif_rx.patch @@ -37,7 +37,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4438,7 +4438,7 @@ static int netif_rx_internal(struct sk_b +@@ -4419,7 +4419,7 @@ static int netif_rx_internal(struct sk_b struct rps_dev_flow voidflow, *rflow = &voidflow; int cpu; @@ -46,7 +46,7 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> rcu_read_lock(); cpu = get_rps_cpu(skb->dev, skb, &rflow); -@@ -4448,14 +4448,14 @@ static int netif_rx_internal(struct sk_b +@@ -4429,14 +4429,14 @@ static int netif_rx_internal(struct sk_b ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail); rcu_read_unlock(); |