ed424b444b7ba3fd468557d746edfd444c21b4d6
[oweals/openwrt.git] /
1 From 349d336a0212626b8cfc1cebf36246a3c4ec3946 Mon Sep 17 00:00:00 2001
2 From: Giedrius <giedrius@blokas.io>
3 Date: Wed, 27 Feb 2019 14:27:28 +0000
4 Subject: [PATCH 362/782] Fix for Pisound kernel module in Real Time kernel
5  configuration.
6
7 When handler of data_available interrupt is fired, queue_work ends up
8 getting called and it can block on a spin lock which is not allowed in
9 interrupt context. The fix was to run the handler from a thread context
10 instead.
11 ---
12  sound/soc/bcm/pisound.c | 8 ++++----
13  1 file changed, 4 insertions(+), 4 deletions(-)
14
15 --- a/sound/soc/bcm/pisound.c
16 +++ b/sound/soc/bcm/pisound.c
17 @@ -1,6 +1,6 @@
18  /*
19   * Pisound Linux kernel module.
20 - * Copyright (C) 2016-2017  Vilniaus Blokas UAB, https://blokas.io/pisound
21 + * Copyright (C) 2016-2019  Vilniaus Blokas UAB, https://blokas.io/pisound
22   *
23   * This program is free software; you can redistribute it and/or
24   * modify it under the terms of the GNU General Public License
25 @@ -532,10 +532,10 @@ static void pisnd_spi_gpio_uninit(void)
26  
27  static int pisnd_spi_gpio_irq_init(struct device *dev)
28  {
29 -       return request_irq(
30 -               gpiod_to_irq(data_available),
31 +       return request_threaded_irq(
32 +               gpiod_to_irq(data_available), NULL,
33                 data_available_interrupt_handler,
34 -               IRQF_TIMER | IRQF_TRIGGER_RISING,
35 +               IRQF_TIMER | IRQF_TRIGGER_RISING | IRQF_ONESHOT,
36                 "data_available_int",
37                 NULL
38                 );