linux_dsm_epyc7002/net/bluetooth
Peter Hurley dfb2fae7cd Bluetooth: Fix nested sleeps
l2cap/rfcomm/sco_sock_accept() are wait loops which may acquire
sleeping locks. Since both wait loops and sleeping locks use
task_struct.state to sleep and wake, the nested sleeping locks
destroy the wait loop state.

Use the newly-minted wait_woken() and DEFINE_WAIT_FUNC() for the
wait loop. DEFINE_WAIT_FUNC() allows an alternate wake function
to be specified; in this case, the predefined scheduler function,
woken_wake_function(). This wait construct ensures wakeups will
not be missed without requiring the wait loop to set the
task state before condition evaluation. How this works:

 CPU 0                            |  CPU 1
                                  |
                                  | is <condition> set?
                                  | no
set <condition>                   |
                                  |
wake_up_interruptible             |
  woken_wake_function             |
    set WQ_FLAG_WOKEN             |
    try_to_wake_up                |
                                  | wait_woken
                                  |   set TASK_INTERRUPTIBLE
                                  |   WQ_FLAG_WOKEN? yes
                                  |   set TASK_RUNNING
                                  |
                                  | - loop -
				  |
				  | is <condition> set?
                                  | yes - exit wait loop

Fixes "do not call blocking ops when !TASK_RUNNING" warnings
in l2cap_sock_accept(), rfcomm_sock_accept() and sco_sock_accept().

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2015-01-23 20:29:42 +02:00
..
bnep Bluetooth: bnep: bnep_add_connection() should verify that it's dealing with l2cap socket 2014-12-19 13:48:27 +01:00
cmtp Bluetooth: Remove dead code 2015-01-14 11:16:17 +02:00
hidp Bluetooth: hidp_connection_add() unsafe use of l2cap_pi() 2014-12-19 13:40:07 +01:00
rfcomm Bluetooth: Fix nested sleeps 2015-01-23 20:29:42 +02:00
6lowpan.c Bluetooth: 6lowpan: Remove PSM setting code 2015-01-14 22:48:13 +01:00
a2mp.c first fruits - kill l2cap ->memcpy_fromiovec() 2014-12-09 16:29:10 -05:00
a2mp.h Bluetooth: Move a2mp.h header file into net/bluetooth/ 2013-10-11 00:10:05 +02:00
af_bluetooth.c Bluetooth: Add support for self testing framework 2014-12-30 08:53:55 +02:00
amp.c Bluetooth: Fix sparse warning in amp.c 2014-11-11 00:07:29 +01:00
amp.h Bluetooth: Move amp.h header file into net/bluetooth/ 2013-10-11 00:10:03 +02:00
ecc.c Bluetooth: Add ECC library for LE Secure Connections 2014-12-03 16:51:16 +01:00
ecc.h Bluetooth: Add ECC library for LE Secure Connections 2014-12-03 16:51:16 +01:00
hci_conn.c Bluetooth: Remove unused function 2015-01-16 13:06:38 +02:00
hci_core.c Bluetooth: Fix dependency for BR/EDR Secure Connections mode on SSP 2015-01-22 21:42:18 +02:00
hci_debugfs.c Bluetooth: Fix scope of sc_only_mode debugfs entry 2015-01-02 22:22:04 +01:00
hci_debugfs.h Bluetooth: Create debugfs directory for each connection handle 2014-12-20 19:54:24 +02:00
hci_event.c Bluetooth: Convert Set SC to use HCI Request 2015-01-23 19:07:03 +01:00
hci_request.c Bluetooth: Add opcode parameter to hci_req_complete_t callback 2015-01-12 11:16:31 +02:00
hci_request.h Bluetooth: Add hci_request support for hci_update_background_scan 2014-12-19 22:06:37 +01:00
hci_sock.c Bluetooth: Replace send_monitor_event with queue_monitor_skb 2015-01-12 11:26:09 +02:00
hci_sysfs.c Bluetooth: Convert to use ATTRIBUTE_GROUPS macro 2014-02-13 09:51:34 +02:00
Kconfig Bluetooth: Add skeleton for SMP self-tests 2014-12-30 08:54:33 +01:00
l2cap_core.c Bluetooth: Fix lookup of fixed channels by local bdaddr 2015-01-15 16:54:14 +01:00
l2cap_sock.c Bluetooth: Fix nested sleeps 2015-01-23 20:29:42 +02:00
lib.c Bluetooth: Convert bt_<level> logging functions to return void 2014-09-24 09:40:08 +02:00
Makefile Bluetooth: Add support for self testing framework 2014-12-30 08:53:55 +02:00
mgmt.c Bluetooth: Convert Set SC to use HCI Request 2015-01-23 19:07:03 +01:00
sco.c Bluetooth: Fix nested sleeps 2015-01-23 20:29:42 +02:00
selftest.c Bluetooth: Use %llu for printing duration details of selftests 2015-01-14 10:02:45 +02:00
selftest.h Bluetooth: Add support for self testing framework 2014-12-30 08:53:55 +02:00
smp.c Bluetooth: Add paranoid check for existing LE and BR/EDR SMP channels 2015-01-15 21:59:38 +02:00
smp.h Bluetooth: Add skeleton for SMP self-tests 2014-12-30 08:54:33 +01:00