From a7ae5e60f969a749d70d9f11698c84e1cd30ba28 Mon Sep 17 00:00:00 2001 From: Elliot Berman Date: Tue, 18 Feb 2020 10:17:50 -0800 Subject: [PATCH] haven: doorbell: Remove locks around read/send Hypercalls are guaranteed to complete from perspective of kernel and serialization of hypercalls across cores is not required. Thus, in order to support sending/receiving doorbells in interrupt contexts, remove mutex locking in the respective functions. Change-Id: I01993215ea998de935b868144b355fae937bf138 Signed-off-by: Elliot Berman --- drivers/virt/haven/hh_dbl.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/drivers/virt/haven/hh_dbl.c b/drivers/virt/haven/hh_dbl.c index 5c06ad2e6634..1e2d55efe1a5 100644 --- a/drivers/virt/haven/hh_dbl.c +++ b/drivers/virt/haven/hh_dbl.c @@ -117,9 +117,6 @@ int hh_dbl_read_and_clean(void *dbl_client_desc, hh_dbl_flags_t *clear_flags) cap_table_entry = &hh_dbl_cap_table[client_desc->label]; - if (mutex_lock_interruptible(&cap_table_entry->cap_entry_lock)) - return -ERESTARTSYS; - hh_ret = hh_hcall_dbl_recv(cap_table_entry->rx_cap_id, *clear_flags, &recv_resp); @@ -129,8 +126,6 @@ int hh_dbl_read_and_clean(void *dbl_client_desc, hh_dbl_flags_t *clear_flags) else *clear_flags = recv_resp.old_flags; - mutex_unlock(&cap_table_entry->cap_entry_lock); - return ret; } EXPORT_SYMBOL(hh_dbl_read_and_clean); @@ -163,9 +158,6 @@ int hh_dbl_set_mask(void *dbl_client_desc, hh_dbl_flags_t enable_mask, cap_table_entry = &hh_dbl_cap_table[client_desc->label]; - if (mutex_lock_interruptible(&cap_table_entry->cap_entry_lock)) - return -ERESTARTSYS; - hh_ret = hh_hcall_dbl_mask(cap_table_entry->rx_cap_id, enable_mask, ack_mask); @@ -209,9 +201,6 @@ int hh_dbl_send(void *dbl_client_desc, hh_dbl_flags_t *newflags) cap_table_entry = &hh_dbl_cap_table[client_desc->label]; - if (mutex_lock_interruptible(&cap_table_entry->cap_entry_lock)) - return -ERESTARTSYS; - hh_ret = hh_hcall_dbl_send(cap_table_entry->tx_cap_id, *newflags, &send_resp); @@ -221,8 +210,6 @@ int hh_dbl_send(void *dbl_client_desc, hh_dbl_flags_t *newflags) else *newflags = send_resp.old_flags; - mutex_unlock(&cap_table_entry->cap_entry_lock); - return ret; } EXPORT_SYMBOL(hh_dbl_send); @@ -250,17 +237,12 @@ int hh_dbl_reset(void *dbl_client_desc) cap_table_entry = &hh_dbl_cap_table[client_desc->label]; - if (mutex_lock_interruptible(&cap_table_entry->cap_entry_lock)) - return -ERESTARTSYS; - hh_ret = hh_hcall_dbl_reset(cap_table_entry->rx_cap_id); ret = hh_remap_error(hh_ret); if (ret != 0) pr_err("%s: Hypercall failed ret = %d\n", __func__, hh_ret); - mutex_unlock(&cap_table_entry->cap_entry_lock); - return ret; } EXPORT_SYMBOL(hh_dbl_reset);