bugfix: free grant table entry in xenkbd_disconnect_backend
PATCH 1/1 bugfix: free grant table entry in xenkbd_disconnect_backend
From: Chang Huaixin <[email protected]>
This bug affects live migration.
xenkdb_disconnect_backend uses gnttab_end_foreign_access_ref to handle grant table entry which doesn't really free an entry.
Thus every time we do xenkbd_resume, grant table entry increses by one. Every 512 times we do xenkdb_resume, grant table pages increses by one.
After around 3500 times of live migration, grant table pages will increase by 7, causing too many pages to populate and hitting max_pages limit when assigning pages.Thus assign_pages will fail, so will live migration.
Signed-off-by Chang Huaixin <[email protected]>
--- drivers/input/misc/xen-kbdfront.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/input/misc/xen-kbdfront.c +2 -2
@@ -285,7 +285,7 @@ static int xenkbd_connect_backend(struct xenbus_device *dev, error_evtchan:xenbus_free_evtchn (dev, evtchn); error_grant: -gnttab_end_foreign_access_ref (info->gref,0 ); +gnttab_end_foreign_access (info->gref,0 ,0UL ); info->gref =-1 ;return ret; }
@@ -296,7 +296,7 @@ static void xenkbd_disconnect_backend(struct xenkbd_info *info)unbind_from_irqhandler (info->irq, info); info->irq =-1 ;if (info->gref >=0 ) -gnttab_end_foreign_access_ref (info->gref,0 ); +gnttab_end_foreign_access (info->gref,0 ,0UL ); info->gref =-1 ; }
Signature · 1 line
1.9.1