haven: avoid sleeping in atomic context messages

Currently blocking calls are made from atomic context in doorbell and
message queue drivers. Modify the code flow to avoid kernel warnings
when drivers are initializing.

Change-Id: Iae851d5d7e09210a8fb617da0e2cc4cc52c0f258
Signed-off-by: Murali Nalajala <mnalajal@codeaurora.org>
This commit is contained in:
Murali Nalajala 2020-10-02 16:29:22 -07:00
commit dcf7b284d3
2 changed files with 7 additions and 7 deletions

View file

@ -328,7 +328,7 @@ void *hh_dbl_tx_register(enum hh_dbl_label label)
if (cap_table_entry->client_desc) {
client_desc = cap_table_entry->client_desc;
} else {
client_desc = kzalloc(sizeof(*client_desc), GFP_KERNEL);
client_desc = kzalloc(sizeof(*client_desc), GFP_ATOMIC);
if (!client_desc) {
ret = -ENOMEM;
goto err;
@ -390,7 +390,7 @@ void *hh_dbl_rx_register(enum hh_dbl_label label, dbl_rx_cb_t rx_cb, void *priv)
if (cap_table_entry->client_desc) {
client_desc = cap_table_entry->client_desc;
} else {
client_desc = kzalloc(sizeof(*client_desc), GFP_KERNEL);
client_desc = kzalloc(sizeof(*client_desc), GFP_ATOMIC);
if (!client_desc) {
ret = -ENOMEM;
goto err;

View file

@ -434,16 +434,16 @@ int hh_msgq_populate_cap_info(enum hh_msgq_label label, u64 cap_id,
cap_table_entry = &hh_msgq_cap_table[label];
spin_lock(&cap_table_entry->cap_entry_lock);
if (direction == HH_MSGQ_DIRECTION_TX) {
ret = request_irq(irq, hh_msgq_tx_isr, 0,
cap_table_entry->tx_irq_name, cap_table_entry);
if (ret < 0)
goto err;
cap_table_entry->tx_irq = irq;
spin_lock(&cap_table_entry->cap_entry_lock);
cap_table_entry->tx_cap_id = cap_id;
cap_table_entry->tx_irq = irq;
spin_unlock(&cap_table_entry->cap_entry_lock);
wake_up_interruptible(&cap_table_entry->tx_wq);
} else if (direction == HH_MSGQ_DIRECTION_RX) {
@ -452,8 +452,10 @@ int hh_msgq_populate_cap_info(enum hh_msgq_label label, u64 cap_id,
if (ret < 0)
goto err;
spin_lock(&cap_table_entry->cap_entry_lock);
cap_table_entry->rx_cap_id = cap_id;
cap_table_entry->rx_irq = irq;
spin_unlock(&cap_table_entry->cap_entry_lock);
wake_up_interruptible(&cap_table_entry->rx_wq);
} else {
@ -463,7 +465,6 @@ int hh_msgq_populate_cap_info(enum hh_msgq_label label, u64 cap_id,
}
irq_set_irq_wake(irq, 1);
spin_unlock(&cap_table_entry->cap_entry_lock);
pr_debug(
"%s: label: %d; cap_id: %llu; dir: %d; irq: %d\n",
@ -472,7 +473,6 @@ int hh_msgq_populate_cap_info(enum hh_msgq_label label, u64 cap_id,
return 0;
err:
spin_unlock(&cap_table_entry->cap_entry_lock);
return ret;
}
EXPORT_SYMBOL(hh_msgq_populate_cap_info);