[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v6] Userspace grant communication



On Mon, Feb 07, 2011 at 06:14:16PM -0500, Konrad Rzeszutek Wilk wrote:
> On Thu, Feb 03, 2011 at 12:18:58PM -0500, Daniel De Graaf wrote:
> > Changes since v5:
> >   - Added a tested xen version to workaround in #4
> >   - Cleaned up variable names & structures
> >   - Clarified some of the cleanup in gntalloc
> >   - Removed copyright statement from public-domain files
> > 
> > [PATCH 1/6] xen-gntdev: Change page limit to be global instead of per-open
> > [PATCH 2/6] xen-gntdev: Use find_vma rather than iterating our vma list 
> > manually
> > [PATCH 3/6] xen-gntdev: Add reference counting to maps
> > [PATCH 4/6] xen-gntdev: Support mapping in HVM domains
> > [PATCH 5/6] xen-gntalloc: Userspace grant allocation driver
> > [PATCH 6/6] xen/gntalloc,gntdev: Add unmap notify ioctl
> > 
> > Test/Demo code (also updated):
> 
> I played with this (two PV domains) and I got two failures:

With your latest patch the issue described earlier disappear,
but if I try to map an non-existed page (say I am confused) I get
this:

diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
index 75f8037..2dd2efa 100644
--- a/drivers/xen/gntdev.c
+++ b/drivers/xen/gntdev.c
@@ -17,7 +17,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#undef DEBUG
+#define DEBUG 1
 
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -304,12 +304,16 @@ static int unmap_grant_pages(struct grant_map *map, int 
offset, int pages)
 
        pr_debug("map %d+%d [%d+%d]\n", map->index, map->count, offset, pages);
        err = gnttab_unmap_refs(map->unmap_ops + offset, map->pages + offset, 
pages);
-       if (err)
+       if (err) {
+               printk(KERN_WARNING "grant unmapping hypercall failed: %d\n", 
err);
                return err;
-
+       }
        for (i = 0; i < pages; i++) {
-               if (map->unmap_ops[offset+i].status)
+               if (map->unmap_ops[offset+i].status) {
+                       printk(KERN_WARNING "%lx is still active: %d\n",
+                               offset+i, map->unmap_ops[offset+i].status);
                        err = -EINVAL;
+               }
                map->unmap_ops[offset+i].handle = 0;
        }
        return err;

(it differs from #master with this patch):

> map 1 9
[  234.522158] priv ffff88001afac420, add 1
[  234.522742] gntdev_print_maps: maps list (priv ffff88001afac420)
[  234.523061]   index  0, count  1 [new]
[  234.523892] map 0+1 at 7fdee5890000 (pgoff 0)
[  234.524464] map 0+1
Could not map grant 1.9: Invalid argument (map failed)

> map 1 8
[  236.313135] priv ffff88001afac420, add 1
[  236.313739] gntdev_print_maps: maps list (priv ffff88001afac420)
[  236.314062]   index  0, count  1 
[  236.314062]   index  1, count  1 [new]
[  236.315521] map 1+1 at 7fdee588f000 (pgoff 1)
[  236.316120] map 1+1
Mapped grant 1.8 as 4096=0x7fdee588f000

> map 1 10
[  242.833149] priv ffff88001afac420, add 1
[  242.833813] gntdev_print_maps: maps list (priv ffff88001afac420)
[  242.834063]   index  0, count  1 
[  242.834063]   index  1, count  1 
[  242.834063]   index  2, count  1 [new]
[  242.836265] map 2+1 at 7fdee588e000 (pgoff 2)
[  242.836866] map 2+1
Could not map grant 1.10: Invalid argument (map failed)

> map 3 10
[  247.224151] priv ffff88001afac420, add 1
[  247.224808] gntdev_print_maps: maps list (priv ffff88001afac420)
[  247.225062]   index  0, count  1 
[  247.225062]   index  1, count  1 
[  247.225062]   index  2, count  1 
[  247.225062]   index  3, count  1 [new][  247.227637] map 3+1 at 7fdee588d000 
(pgoff 3)
[  247.228180] map 3+1
Could not map grant 3.10: Invalid argument (map failed)

> unmap 140366365671424
Unmapped page at 0x7fa9975d4000

> show
00(140595310424064,4096): id      99c6b8b4567 n=11000000 b=adjakasdaadaskda
END

> ^C[  252.265142] map 0+1 (7fdee588f000 7fdee5890000)
[  252.265724] map 0+1 [0+1]
[  252.296327] 0 is still active: -1
[  252.296834] ------------[ cut here ]------------
[  252.297310] WARNING: at /home/konrad/ssd/linux/drivers/xen/gntdev.c:396 
mn_release+0x6e/0x90()
[  252.297310] Modules linked in: xen_evtchn fbcon tileblit font bitblit 
softcursor ttm drm_kms_helper xen_blkfront xen_netfront xen_fbfront fb_sys_fops 
sysimgblt sysfillrect syscopyarea xen_kbdfront xenfs [last unloaded: dump_dma]
[  252.297310] Pid: 2313, comm: test_gnt Tainted: G        W   
2.6.38-rc4-xtt-00169-gb68565e-dirty #3
[  252.297310] Call Trace:
[  252.297310]  [<ffffffff81049580>] ? warn_slowpath_common+0x80/0x98
[  252.297310]  [<ffffffff810495ad>] ? warn_slowpath_null+0x15/0x17
[  252.297310]  [<ffffffff8126dcd6>] ? mn_release+0x6e/0x90
[  252.297310]  [<ffffffff810ec5f1>] ? __mmu_notifier_release+0x51/0x85
[  252.297310]  [<ffffffff810d9886>] ? exit_mmap+0x27/0x101
[  252.297310]  [<ffffffff810473c2>] ? mmput+0x30/0xd7
[  252.297310]  [<ffffffff8104b197>] ? exit_mm+0x129/0x136
[  252.297310]  [<ffffffff8104cc3f>] ? do_exit+0x208/0x7aa
[  252.297310]  [<ffffffff81006689>] ? xen_force_evtchn_callback+0xd/0xf
[  252.297310]  [<ffffffff81006cd2>] ? check_events+0x12/0x20
[  252.297310]  [<ffffffff8127ad0a>] ? put_ldisc+0xac/0xb1
[  252.297310]  [<ffffffff8127adf9>] ? tty_ldisc_deref+0x9/0xb
[  252.297310]  [<ffffffff81273a97>] ? tty_read+0x8c/0xc8
[  252.297310]  [<ffffffff8100a598>] ? do_notify_resume+0x27/0x5f
[  252.297310]  [<ffffffff8100ac60>] ? int_signal+0x12/0x17
[  252.297310] ---[ end trace e3791f053b755549 ]---
[  252.297310] map 1+1 (7fdee588f000 7fdee5890000)
[  252.297310] map 1+1 [0+1]
[  252.315756] map 2+1 (7fdee588d000 7fdee588e000)
[  252.316341] map 2+1 [0+1]
[  252.346990] 0 is still active: -4
[  252.347569] ------------[ cut here ]------------
[  252.347976] WARNING: at /home/konrad/ssd/linux/drivers/xen/gntdev.c:396 
mn_release+0x6e/0x90()
[  252.347976] Modules linked in: xen_evtchn fbcon tileblit font bitblit 
softcursor ttm drm_kms_helper xen_blkfront xen_netfront xen_fbfront fb_sys_fops 
sysimgblt sysfillrect syscopyarea xen_kbdfront xenfs [last unloaded: dump_dma]
[  252.347976] Pid: 2313, comm: test_gnt Tainted: G        W   
2.6.38-rc4-xtt-00169-gb68565e-dirty #3
[  252.347976] Call Trace:
[  252.347976]  [<ffffffff81049580>] ? warn_slowpath_common+0x80/0x98
[  252.347976]  [<ffffffff810495ad>] ? warn_slowpath_null+0x15/0x17
[  252.347976]  [<ffffffff8126dcd6>] ? mn_release+0x6e/0x90
[  252.347976]  [<ffffffff810ec5f1>] ? __mmu_notifier_release+0x51/0x85
[  252.347976]  [<ffffffff810d9886>] ? exit_mmap+0x27/0x101
[  252.347976]  [<ffffffff810473c2>] ? mmput+0x30/0xd7
[  252.347976]  [<ffffffff8104b197>] ? exit_mm+0x129/0x136
[  252.347976]  [<ffffffff8104cc3f>] ? do_exit+0x208/0x7aa
[  252.347976]  [<ffffffff81006689>] ? xen_force_evtchn_callback+0xd/0xf
[  252.347976]  [<ffffffff81006cd2>] ? check_events+0x12/0x20
[  252.347976]  [<ffffffff811fd1ff>] ? do_raw_spin_lock+0x6b/0x120
[  252.347976]  [<ffffffff8104d253>] ? do_group_exit+0x72/0x9a
[  252.347976]  [<ffffffff81059fcd>] ? get_signal_to_deliver+0x360/0x37f
[  252.347976]  [<ffffffff812785e6>] ? n_tty_read+0x6d5/0x7ad
[  252.347976]  [<ffffffff81009f53>] ? do_signal+0x6d/0x68b
[  252.347976]  [<ffffffff8103dbd8>] ? __wake_up+0x3f/0x48
[  252.347976]  [<ffffffff8127ad0a>] ? put_ldisc+0xac/0xb1
[  252.347976]  [<ffffffff8127adf9>] ? tty_ldisc_deref+0x9/0xb
[  252.347976]  [<ffffffff81273a97>] ? tty_read+0x8c/0xc8
[  252.347976]  [<ffffffff8100a598>] ? do_notify_resume+0x27/0x5f
[  252.347976]  [<ffffffff8100ac60>] ? int_signal+0x12/0x17
[  252.347976] map 3+1 (7fdee588d000 7fdee588e000)
[  252.347976] map 3+1 [0+1]
[  252.396334] 0 is still active: -4
[  252.396925] ------------[ cut here ]------------
[  252.397301] WARNING: at /home/konrad/ssd/linux/drivers/xen/gntdev.c:396 
mn_release+0x6e/0x90()
[  252.397301] Modules linked in: xen_evtchn fbcon tileblit font bitblit 
softcursor ttm drm_kms_helper xen_blkfront xen_netfront xen_fbfront fb_sys_fops 
sysimgblt sysfillrect syscopyarea xen_kbdfront xenfs [last unloaded: dump_dma]
[  252.397301] Pid: 2313, comm: test_gnt Tainted: G        W   
2.6.38-rc4-xtt-00169-gb68565e-dirty #3
[  252.397301] Call Trace:
[  252.397301]  [<ffffffff81049580>] ? warn_slowpath_common+0x80/0x98
[  252.397301]  [<ffffffff810495ad>] ? warn_slowpath_null+0x15/0x17
[  252.397301]  [<ffffffff8126dcd6>] ? mn_release+0x6e/0x90
[  252.397301]  [<ffffffff810ec5f1>] ? __mmu_notifier_release+0x51/0x85
[  252.397301]  [<ffffffff810d9886>] ? exit_mmap+0x27/0x101
[  252.397301]  [<ffffffff810473c2>] ? mmput+0x30/0xd7
[  252.397301]  [<ffffffff8104b197>] ? exit_mm+0x129/0x136
[  252.397301]  [<ffffffff8104cc3f>] ? do_exit+0x208/0x7aa
[  252.397301]  [<ffffffff81006689>] ? xen_force_evtchn_callback+0xd/0xf
[  252.397301]  [<ffffffff81006cd2>] ? check_events+0x12/0x20
[  252.397301]  [<ffffffff811fd1ff>] ? do_raw_spin_lock+0x6b/0x120
[  252.397301]  [<ffffffff8104d253>] ? do_group_exit+0x72/0x9a
[  252.397301]  [<ffffffff81059fcd>] ? get_signal_to_deliver+0x360/0x37f
[  252.397301]  [<ffffffff812785e6>] ? n_tty_read+0x6d5/0x7ad
[  252.397301]  [<ffffffff81009f53>] ? do_signal+0x6d/0x68b
[  252.397301]  [<ffffffff8103dbd8>] ? __wake_up+0x3f/0x48
[  252.397301]  [<ffffffff8127ad0a>] ? put_ldisc+0xac/0xb1
[  252.397301]  [<ffffffff8127adf9>] ? tty_ldisc_deref+0x9/0xb
[  252.397301]  [<ffffffff81273a97>] ? tty_read+0x8c/0xc8
[  252.397301]  [<ffffffff8100a598>] ? do_notify_resume+0x27/0x5f
[  252.397301]  [<ffffffff8100ac60>] ? int_signal+0x12/0x17
[  252.397301] ---[ end trace e3791f053b75554b ]---
[  252.414807] close ffff88001e35ea10
[  252.415439] priv ffff88001afac420




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.