Dateien
android_kernel_samsung_sm86…/hif
Krunal Soni 287dee3f43 qcacmn: Disable CE-IRQ interrupt before cleaning up the tasklets
Current driver calls ce_tasklet_kill API which does
tasklet_disable() first and then does tasklet_kill which invites
race condition as follows.

1) Lets say CPU-0 is executing ce_tasklet_kill() API
   for CE1 (in process ctx) to kill any tasklets associated with CE1-IRQ

2) t1 time- CPU-1 has scheduled the tasklet as part of rescheduled API
   ce_schedule_tasklet(), so this tasklet goes to be scheduled list of
   kernel.

3) t2 time- CPU-0 executes tasklet_disable() and about to execute
   tasklet_kill()

4) t3 time - kernel got a chance and wants to run the tasklet which was
   scheduled at t1 time but it can't because t2 time, tasklet has been
   disable.

5) t5 time- CPU-0 now executes tasklet_kill which checks if any
   tasklet which is in "SCHEDULE" state to go to "RUNNING" state and
   finish and tasklet on CPU-1 can't go to "RUNNING" state due to
   tasklet_disable(), driver is stuck waiting for it to finish.

Fix the situation by removing tasklet_disable()

Change-Id: I3ac56975dc1f6538962060dd20e881c43e7516ca
CRs-Fixed: 2301368
2018-09-05 23:55:47 -07:00
..
2018-08-10 18:11:12 -07:00