Commit 0307f4e8 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

PM: runtime: Relocate rpm_callback() right after __rpm_callback()



Because rpm_callback() is a wrapper around __rpm_callback(), and the
only caller of it after the change eliminating an invocation of it
from rpm_idle(), move the former next to the latter to make the code
a bit easier to follow.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
parent bc80c2e4
Loading
Loading
Loading
Loading
+32 −32
Original line number Original line Diff line number Diff line
@@ -421,6 +421,38 @@ static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
	return retval;
	return retval;
}
}


/**
 * rpm_callback - Run a given runtime PM callback for a given device.
 * @cb: Runtime PM callback to run.
 * @dev: Device to run the callback for.
 */
static int rpm_callback(int (*cb)(struct device *), struct device *dev)
{
	int retval;

	if (dev->power.memalloc_noio) {
		unsigned int noio_flag;

		/*
		 * Deadlock might be caused if memory allocation with
		 * GFP_KERNEL happens inside runtime_suspend and
		 * runtime_resume callbacks of one block device's
		 * ancestor or the block device itself. Network
		 * device might be thought as part of iSCSI block
		 * device, so network device and its ancestor should
		 * be marked as memalloc_noio too.
		 */
		noio_flag = memalloc_noio_save();
		retval = __rpm_callback(cb, dev);
		memalloc_noio_restore(noio_flag);
	} else {
		retval = __rpm_callback(cb, dev);
	}

	dev->power.runtime_error = retval;
	return retval != -EACCES ? retval : -EIO;
}

/**
/**
 * rpm_idle - Notify device bus type if the device can be suspended.
 * rpm_idle - Notify device bus type if the device can be suspended.
 * @dev: Device to notify the bus type about.
 * @dev: Device to notify the bus type about.
@@ -504,38 +536,6 @@ static int rpm_idle(struct device *dev, int rpmflags)
	return retval ? retval : rpm_suspend(dev, rpmflags | RPM_AUTO);
	return retval ? retval : rpm_suspend(dev, rpmflags | RPM_AUTO);
}
}


/**
 * rpm_callback - Run a given runtime PM callback for a given device.
 * @cb: Runtime PM callback to run.
 * @dev: Device to run the callback for.
 */
static int rpm_callback(int (*cb)(struct device *), struct device *dev)
{
	int retval;

	if (dev->power.memalloc_noio) {
		unsigned int noio_flag;

		/*
		 * Deadlock might be caused if memory allocation with
		 * GFP_KERNEL happens inside runtime_suspend and
		 * runtime_resume callbacks of one block device's
		 * ancestor or the block device itself. Network
		 * device might be thought as part of iSCSI block
		 * device, so network device and its ancestor should
		 * be marked as memalloc_noio too.
		 */
		noio_flag = memalloc_noio_save();
		retval = __rpm_callback(cb, dev);
		memalloc_noio_restore(noio_flag);
	} else {
		retval = __rpm_callback(cb, dev);
	}

	dev->power.runtime_error = retval;
	return retval != -EACCES ? retval : -EIO;
}

/**
/**
 * rpm_suspend - Carry out runtime suspend of given device.
 * rpm_suspend - Carry out runtime suspend of given device.
 * @dev: Device to suspend.
 * @dev: Device to suspend.