mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
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:
parent
9297104f83
commit
dcf7b284d3
2 changed files with 7 additions and 7 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue