Bläddra i källkod

Merge tag 'char-misc-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc driver fixes from Greg KH:
 "Here are two char/misc fixes for 4.0-rc3.

  One is a reported binder driver fix needed due to a change in the mm
  core that happened in 4.0-rc1.  Another is a mei driver fix that
  resolves a reported issue in that driver.

  Both have been in linux-next for a while"

* tag 'char-misc-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  mei: make device disabled on stop unconditionally
  android: binder: fix binder mmap failures
Linus Torvalds 10 år sedan
förälder
incheckning
29191c7f71
2 ändrade filer med 7 tillägg och 5 borttagningar
  1. 5 5
      drivers/android/binder.c
  2. 2 0
      drivers/misc/mei/init.c

+ 5 - 5
drivers/android/binder.c

@@ -551,7 +551,6 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
 {
 {
 	void *page_addr;
 	void *page_addr;
 	unsigned long user_page_addr;
 	unsigned long user_page_addr;
-	struct vm_struct tmp_area;
 	struct page **page;
 	struct page **page;
 	struct mm_struct *mm;
 	struct mm_struct *mm;
 
 
@@ -600,10 +599,11 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
 				proc->pid, page_addr);
 				proc->pid, page_addr);
 			goto err_alloc_page_failed;
 			goto err_alloc_page_failed;
 		}
 		}
-		tmp_area.addr = page_addr;
-		tmp_area.size = PAGE_SIZE + PAGE_SIZE /* guard page? */;
-		ret = map_vm_area(&tmp_area, PAGE_KERNEL, page);
-		if (ret) {
+		ret = map_kernel_range_noflush((unsigned long)page_addr,
+					PAGE_SIZE, PAGE_KERNEL, page);
+		flush_cache_vmap((unsigned long)page_addr,
+				(unsigned long)page_addr + PAGE_SIZE);
+		if (ret != 1) {
 			pr_err("%d: binder_alloc_buf failed to map page at %p in kernel\n",
 			pr_err("%d: binder_alloc_buf failed to map page at %p in kernel\n",
 			       proc->pid, page_addr);
 			       proc->pid, page_addr);
 			goto err_map_kernel_failed;
 			goto err_map_kernel_failed;

+ 2 - 0
drivers/misc/mei/init.c

@@ -341,6 +341,8 @@ void mei_stop(struct mei_device *dev)
 
 
 	dev->dev_state = MEI_DEV_POWER_DOWN;
 	dev->dev_state = MEI_DEV_POWER_DOWN;
 	mei_reset(dev);
 	mei_reset(dev);
+	/* move device to disabled state unconditionally */
+	dev->dev_state = MEI_DEV_DISABLED;
 
 
 	mutex_unlock(&dev->device_lock);
 	mutex_unlock(&dev->device_lock);