]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Nov 2013 21:18:58 +0000 (13:18 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Nov 2013 21:18:58 +0000 (13:18 -0800)
added patches:
8139cp-re-enable-interrupts-after-tx-timeout.patch
fix-a-few-incorrectly-checked-remap_pfn_range-calls.patch

queue-3.4/8139cp-re-enable-interrupts-after-tx-timeout.patch [new file with mode: 0644]
queue-3.4/fix-a-few-incorrectly-checked-remap_pfn_range-calls.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/8139cp-re-enable-interrupts-after-tx-timeout.patch b/queue-3.4/8139cp-re-enable-interrupts-after-tx-timeout.patch
new file mode 100644 (file)
index 0000000..84542c1
--- /dev/null
@@ -0,0 +1,31 @@
+From 01ffc0a7f1c1801a2354719dedbc32aff45b987d Mon Sep 17 00:00:00 2001
+From: David Woodhouse <dwmw2@infradead.org>
+Date: Sat, 24 Nov 2012 12:11:21 +0000
+Subject: 8139cp: re-enable interrupts after tx timeout
+
+From: David Woodhouse <dwmw2@infradead.org>
+
+commit 01ffc0a7f1c1801a2354719dedbc32aff45b987d upstream.
+
+Recovery doesn't work too well if we leave interrupts disabled...
+
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Acked-by: Francois Romieu <romieu@fr.zoreil.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Luis Henriques <luis.henriques@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/realtek/8139cp.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/ethernet/realtek/8139cp.c
++++ b/drivers/net/ethernet/realtek/8139cp.c
+@@ -1232,6 +1232,7 @@ static void cp_tx_timeout(struct net_dev
+       cp_clean_rings(cp);
+       rc = cp_init_rings(cp);
+       cp_start_hw(cp);
++      cp_enable_irq(cp);
+       netif_wake_queue(dev);
diff --git a/queue-3.4/fix-a-few-incorrectly-checked-remap_pfn_range-calls.patch b/queue-3.4/fix-a-few-incorrectly-checked-remap_pfn_range-calls.patch
new file mode 100644 (file)
index 0000000..cd4d4bc
--- /dev/null
@@ -0,0 +1,146 @@
+From 7314e613d5ff9f0934f7a0f74ed7973b903315d1 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Tue, 29 Oct 2013 10:21:34 -0700
+Subject: Fix a few incorrectly checked [io_]remap_pfn_range() calls
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 7314e613d5ff9f0934f7a0f74ed7973b903315d1 upstream.
+
+Nico Golde reports a few straggling uses of [io_]remap_pfn_range() that
+really should use the vm_iomap_memory() helper.  This trivially converts
+two of them to the helper, and comments about why the third one really
+needs to continue to use remap_pfn_range(), and adds the missing size
+check.
+
+Reported-by: Nico Golde <nico@ngolde.de>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org.
+[lizf: backported to 3.4:
+ - adjust context
+ - no uio_physical_vm_ops]
+Signed-off-by: Li Zefan <lizefan@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/uio/uio.c        |   16 +++++++++++++++-
+ drivers/video/au1100fb.c |   26 +-------------------------
+ drivers/video/au1200fb.c |   23 +----------------------
+ 3 files changed, 17 insertions(+), 48 deletions(-)
+
+--- a/drivers/uio/uio.c
++++ b/drivers/uio/uio.c
+@@ -650,16 +650,30 @@ static int uio_mmap_physical(struct vm_a
+ {
+       struct uio_device *idev = vma->vm_private_data;
+       int mi = uio_find_mem_index(vma);
++      struct uio_mem *mem;
+       if (mi < 0)
+               return -EINVAL;
++      mem = idev->info->mem + mi;
++
++      if (vma->vm_end - vma->vm_start > mem->size)
++              return -EINVAL;
+       vma->vm_flags |= VM_IO | VM_RESERVED;
+       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
++      /*
++       * We cannot use the vm_iomap_memory() helper here,
++       * because vma->vm_pgoff is the map index we looked
++       * up above in uio_find_mem_index(), rather than an
++       * actual page offset into the mmap.
++       *
++       * So we just do the physical mmap without a page
++       * offset.
++       */
+       return remap_pfn_range(vma,
+                              vma->vm_start,
+-                             idev->info->mem[mi].addr >> PAGE_SHIFT,
++                             mem->addr >> PAGE_SHIFT,
+                              vma->vm_end - vma->vm_start,
+                              vma->vm_page_prot);
+ }
+--- a/drivers/video/au1100fb.c
++++ b/drivers/video/au1100fb.c
+@@ -375,39 +375,15 @@ void au1100fb_fb_rotate(struct fb_info *
+ int au1100fb_fb_mmap(struct fb_info *fbi, struct vm_area_struct *vma)
+ {
+       struct au1100fb_device *fbdev;
+-      unsigned int len;
+-      unsigned long start=0, off;
+       fbdev = to_au1100fb_device(fbi);
+-      if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) {
+-              return -EINVAL;
+-      }
+-
+-      start = fbdev->fb_phys & PAGE_MASK;
+-      len = PAGE_ALIGN((start & ~PAGE_MASK) + fbdev->fb_len);
+-
+-      off = vma->vm_pgoff << PAGE_SHIFT;
+-
+-      if ((vma->vm_end - vma->vm_start + off) > len) {
+-              return -EINVAL;
+-      }
+-
+-      off += start;
+-      vma->vm_pgoff = off >> PAGE_SHIFT;
+-
+       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+       pgprot_val(vma->vm_page_prot) |= (6 << 9); //CCA=6
+       vma->vm_flags |= VM_IO;
+-      if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
+-                              vma->vm_end - vma->vm_start,
+-                              vma->vm_page_prot)) {
+-              return -EAGAIN;
+-      }
+-
+-      return 0;
++      return vm_iomap_memory(vma, fbdev->fb_phys, fbdev->fb_len);
+ }
+ static struct fb_ops au1100fb_ops =
+--- a/drivers/video/au1200fb.c
++++ b/drivers/video/au1200fb.c
+@@ -1233,36 +1233,15 @@ static int au1200fb_fb_blank(int blank_m
+  * method mainly to allow the use of the TLB streaming flag (CCA=6)
+  */
+ static int au1200fb_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
+-
+ {
+-      unsigned int len;
+-      unsigned long start=0, off;
+       struct au1200fb_device *fbdev = info->par;
+-      if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) {
+-              return -EINVAL;
+-      }
+-
+-      start = fbdev->fb_phys & PAGE_MASK;
+-      len = PAGE_ALIGN((start & ~PAGE_MASK) + fbdev->fb_len);
+-
+-      off = vma->vm_pgoff << PAGE_SHIFT;
+-
+-      if ((vma->vm_end - vma->vm_start + off) > len) {
+-              return -EINVAL;
+-      }
+-
+-      off += start;
+-      vma->vm_pgoff = off >> PAGE_SHIFT;
+-
+       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+       pgprot_val(vma->vm_page_prot) |= _CACHE_MASK; /* CCA=7 */
+       vma->vm_flags |= VM_IO;
+-      return io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
+-                                vma->vm_end - vma->vm_start,
+-                                vma->vm_page_prot);
++      return vm_iomap_memory(vma, fbdev->fb_phys, fbdev->fb_len);
+       return 0;
+ }
index 554b695a075bd19e3e3e4f9d8053a44e19b1fc2d..f38b14ff9d3b219af22cf2d5a5c1403d7f5c3dd5 100644 (file)
@@ -9,3 +9,5 @@ acpica-fix-for-a-store-argx-when-argx-contains-a-reference-to-a-field.patch
 usb-mos7840-fix-tiocmget-error-handling.patch
 crypto-ansi_cprng-fix-off-by-one-error-in-non-block-size-request.patch
 can-c_can-fix-rx-message-handling-handle-lost-message-before-eob.patch
+8139cp-re-enable-interrupts-after-tx-timeout.patch
+fix-a-few-incorrectly-checked-remap_pfn_range-calls.patch