]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/blob - rt-patches/0045-mm-scatterlist-Do-not-disable-irqs-on-RT.patch
WAR:media:i2c:ov5693: add flip and mirror setting
[hercules2020/nv-tegra/linux-4.4.git] / rt-patches / 0045-mm-scatterlist-Do-not-disable-irqs-on-RT.patch
1 From c869201a074134780c5ebd12f6b23f1cf2959ece Mon Sep 17 00:00:00 2001
2 From: Thomas Gleixner <tglx@linutronix.de>
3 Date: Fri, 3 Jul 2009 08:44:34 -0500
4 Subject: [PATCH 045/365] mm/scatterlist: Do not disable irqs on RT
5
6 The local_irq_save() is not only used to get things done "fast" but
7 also to ensure that in case of SG_MITER_ATOMIC we are in "atomic"
8 context for kmap_atomic(). For -RT it is enough to keep pagefault
9 disabled (which is currently handled by kmap_atomic()).
10
11 Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
12 ---
13  lib/scatterlist.c | 6 +++---
14  1 file changed, 3 insertions(+), 3 deletions(-)
15
16 diff --git a/lib/scatterlist.c b/lib/scatterlist.c
17 index bafa993..ebe3b7e 100644
18 --- a/lib/scatterlist.c
19 +++ b/lib/scatterlist.c
20 @@ -620,7 +620,7 @@ void sg_miter_stop(struct sg_mapping_iter *miter)
21                         flush_kernel_dcache_page(miter->page);
22  
23                 if (miter->__flags & SG_MITER_ATOMIC) {
24 -                       WARN_ON_ONCE(preemptible());
25 +                       WARN_ON_ONCE(!pagefault_disabled());
26                         kunmap_atomic(miter->addr);
27                 } else
28                         kunmap(miter->page);
29 @@ -664,7 +664,7 @@ size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, void *buf,
30         if (!sg_miter_skip(&miter, skip))
31                 return false;
32  
33 -       local_irq_save(flags);
34 +       local_irq_save_nort(flags);
35  
36         while (sg_miter_next(&miter) && offset < buflen) {
37                 unsigned int len;
38 @@ -681,7 +681,7 @@ size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, void *buf,
39  
40         sg_miter_stop(&miter);
41  
42 -       local_irq_restore(flags);
43 +       local_irq_restore_nort(flags);
44         return offset;
45  }
46  EXPORT_SYMBOL(sg_copy_buffer);
47 -- 
48 2.7.4
49