mirror of
https://github.com/torvalds/linux.git
synced 2026-06-06 13:37:36 +02:00
drivers:hv: Lock access to hyperv_mmio resource tree
[ Upstream commit e16dad6bfe ]
In existing code, this tree of resources is created
in single-threaded code and never modified after it is
created, and thus needs no locking. This patch introduces
a semaphore for tree access, as other patches in this
series introduce run-time modifications of this resource
tree which can happen on multiple threads.
Signed-off-by: Jake Oshins <jakeo@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
This commit is contained in:
parent
d4009e4b6e
commit
45a063156f
|
|
@ -105,6 +105,7 @@ static struct notifier_block hyperv_panic_block = {
|
|||
};
|
||||
|
||||
struct resource *hyperv_mmio;
|
||||
DEFINE_SEMAPHORE(hyperv_mmio_lock);
|
||||
|
||||
static int vmbus_exists(void)
|
||||
{
|
||||
|
|
@ -1140,7 +1141,10 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
|
|||
resource_size_t range_min, range_max, start, local_min, local_max;
|
||||
const char *dev_n = dev_name(&device_obj->device);
|
||||
u32 fb_end = screen_info.lfb_base + (screen_info.lfb_size << 1);
|
||||
int i;
|
||||
int i, retval;
|
||||
|
||||
retval = -ENXIO;
|
||||
down(&hyperv_mmio_lock);
|
||||
|
||||
for (iter = hyperv_mmio; iter; iter = iter->sibling) {
|
||||
if ((iter->start >= max) || (iter->end <= min))
|
||||
|
|
@ -1177,13 +1181,17 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
|
|||
for (; start + size - 1 <= local_max; start += align) {
|
||||
*new = request_mem_region_exclusive(start, size,
|
||||
dev_n);
|
||||
if (*new)
|
||||
return 0;
|
||||
if (*new) {
|
||||
retval = 0;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -ENXIO;
|
||||
exit:
|
||||
up(&hyperv_mmio_lock);
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vmbus_allocate_mmio);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user