Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+5 -5
+4 -4
drivers/hsi/hsi_core.c
··· 507 507 port[i]->stop_tx = hsi_dummy_cl; 508 508 port[i]->release = hsi_dummy_cl; 509 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 511 dev_set_name(&port[i]->device, "port%d", i); 512 512 hsi->port[i]->device.release = hsi_port_release; 513 513 device_initialize(&hsi->port[i]->device); ··· 689 689 cl->ehandler = handler; 690 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 } 694 694 EXPORT_SYMBOL_GPL(hsi_register_port_event); 695 695 ··· 709 709 710 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 713 if (!err) 714 714 cl->ehandler = NULL; 715 715 ··· 734 734 */ 735 735 int 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 } 739 739 EXPORT_SYMBOL_GPL(hsi_event); 740 740
+1 -1
include/linux/hsi/hsi.h
··· 246 246 int (*stop_tx)(struct hsi_client *cl); 247 247 int (*release)(struct hsi_client *cl); 248 248 /* private */ 249 - struct atomic_notifier_head n_head; 249 + struct blocking_notifier_head n_head; 250 250 }; 251 251 252 252 #define to_hsi_port(dev) container_of(dev, struct hsi_port, device)