Patch "xen/gntdev: convert priv->lock to a mutex" has been added to the 3.10-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
xen/gntdev: convert priv->lock to a mutex
to the 3.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
xen-gntdev-convert-priv-lock-to-a-mutex.patch
and it can be found in the queue-3.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1401c00e59ea021c575f74612fe2dbba36d6a4eeMon Sep 17 00:00:00 2001
From: David Vrabel <[email protected]>
Date: Fri, 9 Jan 2015 18:06:12 +0000
Subject: xen/gntdev: convert priv->lock to a mutex
From: David Vrabel <[email protected]>
commit 1401c00e59ea021c575f74612fe2dbba36d6a4ee upstream.
Unmapping may require sleeping and we unmap while holding priv->lock, so convert it to a mutex.
--- drivers/xen/gntdev.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-)
drivers/xen/gntdev.c +20 -20
@@ -65,7 +65,7 @@ struct gntdev_priv {* Only populated if populate_freeable_maps == 1 */ struct list_head freeable_maps;/* lock protects maps and freeable_maps */ -spinlock_t lock; +struct mutex lock;struct mm_struct *mm;struct mmu_notifier mn; };
@@ -214,9 +214,9 @@ static void gntdev_put_map(struct gntdev }if (populate_freeable_maps && priv) { -spin_lock (&priv->lock); +mutex_lock (&priv->lock);list_del (&map->next); -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock); }if (map->pages && !use_ptemod)
@@ -392,9 +392,9 @@ static void gntdev_vma_close(struct vm_a* not do any unmapping, since that has been done prior to * closing the vma, but it may still iterate the unmap_ops list. */ -spin_lock (&priv->lock); +mutex_lock (&priv->lock); map->vma =NULL ; -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock); } vma->vm_private_data =NULL ;gntdev_put_map (priv, map);
@@ -438,14 +438,14 @@ static void mn_invl_range_start(struct m struct gntdev_priv *priv = container_of(mn, struct gntdev_priv, mn);struct grant_map *map; -spin_lock (&priv->lock); +mutex_lock (&priv->lock);list_for_each_entry (map, &priv->maps, next) {unmap_if_in_range (map, start, end); }list_for_each_entry (map, &priv->freeable_maps, next) {unmap_if_in_range (map, start, end); } -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock); } static void mn_invl_page(struct mmu_notifier *mn,
@@ -462,7 +462,7 @@ static void mn_release(struct mmu_notifistruct grant_map *map;int err; -spin_lock (&priv->lock); +mutex_lock (&priv->lock);list_for_each_entry (map, &priv->maps, next) {if (!map->vma)continue ;
@@ -481,7 +481,7 @@ static void mn_release(struct mmu_notifi err =unmap_grant_pages (map,/* offset */ 0 , map->count);WARN_ON (err); } -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock); }static struct mmu_notifier_ops gntdev_mmu_ops = {
@@ -503,7 +503,7 @@ static int gntdev_open(struct inode *inoINIT_LIST_HEAD (&priv->maps);INIT_LIST_HEAD (&priv->freeable_maps); -spin_lock_init (&priv->lock); +mutex_init (&priv->lock);if (use_ptemod) { priv->mm =get_task_mm (current);
@@ -579,10 +579,10 @@ static long gntdev_ioctl_map_grant_ref(sreturn -EFAULT ; } -spin_lock (&priv->lock); +mutex_lock (&priv->lock);gntdev_add_map (priv, map); op.index = map->index <<PAGE_SHIFT ; -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock);if (copy_to_user (u, &op,sizeof (op)) !=0 )return -EFAULT ;
@@ -601,7 +601,7 @@ static long gntdev_ioctl_unmap_grant_refreturn -EFAULT ;pr_debug ("priv %p, del %d+%d\n" , priv, (int )op.index, (int )op.count); -spin_lock (&priv->lock); +mutex_lock (&priv->lock); map =gntdev_find_map_index (priv, op.index >>PAGE_SHIFT , op.count);if (map) {list_del (&map->next);
@@ -609,7 +609,7 @@ static long gntdev_ioctl_unmap_grant_reflist_add_tail (&map->next, &priv->freeable_maps); err =0 ; } -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock);if (map)gntdev_put_map (priv, map);return err;
@@ -677,7 +677,7 @@ static long gntdev_ioctl_notify(struct g out_flags = op.action; out_event = op.event_channel_port; -spin_lock (&priv->lock); +mutex_lock (&priv->lock);list_for_each_entry (map, &priv->maps, next) {uint64_t begin = map->index <<PAGE_SHIFT ;
@@ -705,7 +705,7 @@ static long gntdev_ioctl_notify(struct g rc =0 ; unlock_out: -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock);/* Drop the reference to the event channel we did not save in the map */ if (out_flags &UNMAP_NOTIFY_SEND_EVENT )
@@ -755,7 +755,7 @@ static int gntdev_mmap(struct file *flippr_debug ("map %d+%d at %lx (pgoff %lx)\n" , index, count, vma->vm_start, vma->vm_pgoff); -spin_lock (&priv->lock); +mutex_lock (&priv->lock); map =gntdev_find_map_index (priv, index, count);if (!map) goto unlock_out;
@@ -790,7 +790,7 @@ static int gntdev_mmap(struct file *flip map->flags |= GNTMAP_readonly; } -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock);if (use_ptemod) { err = apply_to_page_range(vma->vm_mm, vma->vm_start,
@@ -818,11 +818,11 @@ static int gntdev_mmap(struct file *flipreturn 0 ; unlock_out: -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock);return err; out_unlock_put: -spin_unlock (&priv->lock); +mutex_unlock (&priv->lock); out_put_map:if (use_ptemod) map->vma =NULL ;
Patches currently in stable-queue which might be from [email protected] are
queue-3.10/xen-gntdev-convert-priv-lock-to-a-mutex.patch queue-3.10/x86-mm-initialize-pmd_idx-in-page_table_range_init_count.patch