aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Reichel <sre@kernel.org>2016-04-30 12:08:06 -0400
committerSebastian Reichel <sre@kernel.org>2016-06-27 18:38:53 -0400
commitde5a3774dde2c2f3b3a9a48b880fd820142706f0 (patch)
treea027d983a7e5cfab9e4e48673952e33247622a02
parent2083057aacecbd79ed73670763f07e6e7c1acd66 (diff)
HSI: core: switch port event notifier from atomic to blocking
port events should be sent from process context after irq_safe runtime pm flag is removed in omap-ssi. Signed-off-By: Sebastian Reichel <sre@kernel.org> Tested-by: Pavel Machek <pavel@ucw.cz>
-rw-r--r--drivers/hsi/hsi_core.c8
-rw-r--r--include/linux/hsi/hsi.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/drivers/hsi/hsi_core.c b/drivers/hsi/hsi_core.c
index d7ce07ad67f3..c2a2a9795b0b 100644
--- a/drivers/hsi/hsi_core.c
+++ b/drivers/hsi/hsi_core.c
@@ -507,7 +507,7 @@ struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags)
507 port[i]->stop_tx = hsi_dummy_cl; 507 port[i]->stop_tx = hsi_dummy_cl;
508 port[i]->release = hsi_dummy_cl; 508 port[i]->release = hsi_dummy_cl;
509 mutex_init(&port[i]->lock); 509 mutex_init(&port[i]->lock);
510 ATOMIC_INIT_NOTIFIER_HEAD(&port[i]->n_head); 510 BLOCKING_INIT_NOTIFIER_HEAD(&port[i]->n_head);
511 dev_set_name(&port[i]->device, "port%d", i); 511 dev_set_name(&port[i]->device, "port%d", i);
512 hsi->port[i]->device.release = hsi_port_release; 512 hsi->port[i]->device.release = hsi_port_release;
513 device_initialize(&hsi->port[i]->device); 513 device_initialize(&hsi->port[i]->device);
@@ -689,7 +689,7 @@ int hsi_register_port_event(struct hsi_client *cl,
689 cl->ehandler = handler; 689 cl->ehandler = handler;
690 cl->nb.notifier_call = hsi_event_notifier_call; 690 cl->nb.notifier_call = hsi_event_notifier_call;
691 691
692 return atomic_notifier_chain_register(&port->n_head, &cl->nb); 692 return blocking_notifier_chain_register(&port->n_head, &cl->nb);
693} 693}
694EXPORT_SYMBOL_GPL(hsi_register_port_event); 694EXPORT_SYMBOL_GPL(hsi_register_port_event);
695 695
@@ -709,7 +709,7 @@ int hsi_unregister_port_event(struct hsi_client *cl)
709 709
710 WARN_ON(!hsi_port_claimed(cl)); 710 WARN_ON(!hsi_port_claimed(cl));
711 711
712 err = atomic_notifier_chain_unregister(&port->n_head, &cl->nb); 712 err = blocking_notifier_chain_unregister(&port->n_head, &cl->nb);
713 if (!err) 713 if (!err)
714 cl->ehandler = NULL; 714 cl->ehandler = NULL;
715 715
@@ -734,7 +734,7 @@ EXPORT_SYMBOL_GPL(hsi_unregister_port_event);
734 */ 734 */
735int hsi_event(struct hsi_port *port, unsigned long event) 735int hsi_event(struct hsi_port *port, unsigned long event)
736{ 736{
737 return atomic_notifier_call_chain(&port->n_head, event, NULL); 737 return blocking_notifier_call_chain(&port->n_head, event, NULL);
738} 738}
739EXPORT_SYMBOL_GPL(hsi_event); 739EXPORT_SYMBOL_GPL(hsi_event);
740 740
diff --git a/include/linux/hsi/hsi.h b/include/linux/hsi/hsi.h
index 2790591c77cf..57402544b53f 100644
--- a/include/linux/hsi/hsi.h
+++ b/include/linux/hsi/hsi.h
@@ -246,7 +246,7 @@ struct hsi_port {
246 int (*stop_tx)(struct hsi_client *cl); 246 int (*stop_tx)(struct hsi_client *cl);
247 int (*release)(struct hsi_client *cl); 247 int (*release)(struct hsi_client *cl);
248 /* private */ 248 /* private */
249 struct atomic_notifier_head n_head; 249 struct blocking_notifier_head n_head;
250}; 250};
251 251
252#define to_hsi_port(dev) container_of(dev, struct hsi_port, device) 252#define to_hsi_port(dev) container_of(dev, struct hsi_port, device)