]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commit
xenpaging: handle GNTST_eagain in kernel drivers
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 17 Sep 2010 16:00:43 +0000 (17:00 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 17 Sep 2010 16:00:43 +0000 (17:00 +0100)
commitd7dac159959649387b01e01efc5c968010b038ee
tree4dbca840effcb0b5be06712e8b4aff134ae52dca
parent17d52129aca1f76d0fc511c013346b967904bd57
xenpaging: handle GNTST_eagain in kernel drivers

Handle GNTST_eagain status from GNTTABOP_map_grant_ref and
GNTTABOP_copy operations properly to allow usage of xenpaging without
causing crashes or data corruption.

Remove the existing retry code from net_rx_action(),
dispatch_rw_block_io(), net_accel_map_grants_contig() and
net_accel_map_iomem_page() and replace all relevant
HYPERVISOR_grant_table_op() calls with a retry loop.  This loop is
implemented as a macro to allow different GNTTABOP_* args.  It will
sleep up to 33 seconds and wait for the page to be paged in again.

All ->status checks were updated to use the GNTST_* namespace.  All
return values are converted from GNTST_* namespace to 0/-EINVAL, since
all callers did not use the actual return value.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Patrick Colp <pjcolp@cs.ubc.ca>
19 files changed:
drivers/xen/blkback/blkback.c
drivers/xen/blkback/common.h
drivers/xen/blkback/interface.c
drivers/xen/blktap/blktap.c
drivers/xen/blktap/interface.c
drivers/xen/blktap2/device.c
drivers/xen/core/gnttab.c
drivers/xen/gntdev/gntdev.c
drivers/xen/netback/interface.c
drivers/xen/netback/netback.c
drivers/xen/scsiback/interface.c
drivers/xen/scsiback/scsiback.c
drivers/xen/sfc_netutil/accel_util.c
drivers/xen/tpmback/interface.c
drivers/xen/tpmback/tpmback.c
drivers/xen/usbback/interface.c
drivers/xen/usbback/usbback.c
drivers/xen/xenbus/xenbus_backend_client.c
include/xen/gnttab.h