diff options
Diffstat (limited to 'drivers/xen/grant-table.c')
| -rw-r--r-- | drivers/xen/grant-table.c | 27 | 
1 files changed, 21 insertions, 6 deletions
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c index 7bafa703a992..84575baceebc 100644 --- a/drivers/xen/grant-table.c +++ b/drivers/xen/grant-table.c @@ -1040,18 +1040,33 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,  		return ret;  	for (i = 0; i < count; i++) { -		/* Retry eagain maps */ -		if (map_ops[i].status == GNTST_eagain) -			gnttab_retry_eagain_gop(GNTTABOP_map_grant_ref, map_ops + i, -						&map_ops[i].status, __func__); - -		if (map_ops[i].status == GNTST_okay) { +		switch (map_ops[i].status) { +		case GNTST_okay: +		{  			struct xen_page_foreign *foreign;  			SetPageForeign(pages[i]);  			foreign = xen_page_foreign(pages[i]);  			foreign->domid = map_ops[i].dom;  			foreign->gref = map_ops[i].ref; +			break; +		} + +		case GNTST_no_device_space: +			pr_warn_ratelimited("maptrack limit reached, can't map all guest pages\n"); +			break; + +		case GNTST_eagain: +			/* Retry eagain maps */ +			gnttab_retry_eagain_gop(GNTTABOP_map_grant_ref, +						map_ops + i, +						&map_ops[i].status, __func__); +			/* Test status in next loop iteration. */ +			i--; +			break; + +		default: +			break;  		}  	}  |