misc: mic: add threaded irq support in host driver
Convert mic_request_irq to mic_request_threaded_irq to support threaded irq for virtual devices on mic bus. Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Reviewed-by: Nikhil Rao <nikhil.rao@intel.com> Reviewed-by: Sudeep Dutt <sudeep.dutt@intel.com> Signed-off-by: Siva Yerramreddy <yshivakrishna@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
726526c355
commit
b8e439f48a
@@ -21,6 +21,8 @@
|
||||
#ifndef _MIC_INTR_H_
|
||||
#define _MIC_INTR_H_
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/interrupt.h>
|
||||
/*
|
||||
* The minimum number of msix vectors required for normal operation.
|
||||
* 3 for virtio network, console and block devices.
|
||||
@@ -68,7 +70,11 @@ struct mic_intr_info {
|
||||
* @num_vectors: The number of MSI/MSI-x vectors that have been allocated.
|
||||
* @cb_ida: callback ID allocator to track the callbacks registered.
|
||||
* @mic_intr_lock: spinlock to protect the interrupt callback list.
|
||||
* @mic_thread_lock: spinlock to protect the thread callback list.
|
||||
* This lock is used to protect against thread_fn while
|
||||
* mic_intr_lock is used to protect against interrupt handler.
|
||||
* @cb_list: Array of callback lists one for each source.
|
||||
* @mask: Mask used by the main thread fn to call the underlying thread fns.
|
||||
*/
|
||||
struct mic_irq_info {
|
||||
int next_avail_src;
|
||||
@@ -77,19 +83,23 @@ struct mic_irq_info {
|
||||
u16 num_vectors;
|
||||
struct ida cb_ida;
|
||||
spinlock_t mic_intr_lock;
|
||||
spinlock_t mic_thread_lock;
|
||||
struct list_head *cb_list;
|
||||
unsigned long mask;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mic_intr_cb - Interrupt callback structure.
|
||||
*
|
||||
* @func: The callback function
|
||||
* @handler: The callback function
|
||||
* @thread_fn: The thread_fn.
|
||||
* @data: Private data of the requester.
|
||||
* @cb_id: The callback id. Identifies this callback.
|
||||
* @list: list head pointing to the next callback structure.
|
||||
*/
|
||||
struct mic_intr_cb {
|
||||
irqreturn_t (*func) (int irq, void *data);
|
||||
irq_handler_t handler;
|
||||
irq_handler_t thread_fn;
|
||||
void *data;
|
||||
int cb_id;
|
||||
struct list_head list;
|
||||
@@ -124,11 +134,11 @@ struct mic_hw_intr_ops {
|
||||
};
|
||||
|
||||
int mic_next_db(struct mic_device *mdev);
|
||||
struct mic_irq *mic_request_irq(struct mic_device *mdev,
|
||||
irqreturn_t (*func)(int irq, void *data),
|
||||
const char *name, void *data, int intr_src,
|
||||
enum mic_intr_type type);
|
||||
|
||||
struct mic_irq *
|
||||
mic_request_threaded_irq(struct mic_device *mdev,
|
||||
irq_handler_t handler, irq_handler_t thread_fn,
|
||||
const char *name, void *data, int intr_src,
|
||||
enum mic_intr_type type);
|
||||
void mic_free_irq(struct mic_device *mdev,
|
||||
struct mic_irq *cookie, void *data);
|
||||
int mic_setup_interrupts(struct mic_device *mdev, struct pci_dev *pdev);
|
||||
|
Reference in New Issue
Block a user