Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd151412 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

genirq: Provide config option to disable deprecated code



This option covers now the old chip functions and the irq_desc data
fields which are moving to struct irq_data. More stuff will follow.

Pretty handy for testing a conversion, whether something broke or not.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarIngo Molnar <mingo@elte.hu>
parent 21e2b8c6
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ struct irq_data {
 */
struct irq_chip {
	const char	*name;
#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
	unsigned int	(*startup)(unsigned int irq);
	void		(*shutdown)(unsigned int irq);
	void		(*enable)(unsigned int irq);
@@ -175,7 +176,7 @@ struct irq_chip {

	void		(*bus_lock)(unsigned int irq);
	void		(*bus_sync_unlock)(unsigned int irq);

#endif
	unsigned int	(*irq_startup)(struct irq_data *data);
	void		(*irq_shutdown)(struct irq_data *data);
	void		(*irq_enable)(struct irq_data *data);
@@ -225,6 +226,9 @@ struct irq_2_iommu;
 */
struct irq_desc {

#ifdef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
	struct irq_data		irq_data;
#else
	/*
	 * This union will go away, once we fixed the direct access to
	 * irq_desc all over the place. The direct fields are a 1:1
@@ -247,6 +251,8 @@ struct irq_desc {
#endif
		};
	};
#endif

	struct timer_rand_state *timer_rand_state;
	unsigned int            *kstat_irqs;
	irq_flow_handler_t	handle_irq;
+4 −0
Original line number Diff line number Diff line
@@ -12,6 +12,10 @@ config GENERIC_HARDIRQS
config GENERIC_HARDIRQS_NO__DO_IRQ
       def_bool y

# Select this to disable the deprecated stuff
config GENERIC_HARDIRQS_NO_DEPRECATED
       def_bool n

# Options selectable by the architecture code
config HAVE_SPARSE_IRQ
       def_bool n
+7 −1
Original line number Diff line number Diff line
@@ -324,6 +324,7 @@ static void default_shutdown(struct irq_data *data)
	desc->status |= IRQ_MASKED;
}

#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
/* Temporary migration helpers */
static void compat_irq_mask(struct irq_data *data)
{
@@ -400,12 +401,14 @@ static void compat_bus_sync_unlock(struct irq_data *data)
{
	data->chip->bus_sync_unlock(data->irq);
}
#endif

/*
 * Fixup enable/disable function pointers
 */
void irq_chip_set_defaults(struct irq_chip *chip)
{
#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
	/*
	 * Compat fixup functions need to be before we set the
	 * defaults for enable/disable/startup/shutdown
@@ -418,7 +421,7 @@ void irq_chip_set_defaults(struct irq_chip *chip)
		chip->irq_shutdown = compat_irq_shutdown;
	if (chip->startup)
		chip->irq_startup = compat_irq_startup;

#endif
	/*
	 * The real defaults
	 */
@@ -437,6 +440,8 @@ void irq_chip_set_defaults(struct irq_chip *chip)
	if (!chip->irq_shutdown)
		chip->irq_shutdown = chip->irq_disable != default_disable ?
			chip->irq_disable : default_shutdown;

#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
	if (!chip->end)
		chip->end = dummy_irq_chip.end;

@@ -465,6 +470,7 @@ void irq_chip_set_defaults(struct irq_chip *chip)
		chip->irq_set_wake = compat_irq_set_wake;
	if (chip->retrigger)
		chip->irq_retrigger = compat_irq_retrigger;
#endif
}

static inline void mask_ack_irq(struct irq_desc *desc)
+7 −2
Original line number Diff line number Diff line
@@ -309,7 +309,12 @@ static unsigned int noop_ret(struct irq_data *data)
	return 0;
}

#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
static void compat_noop(unsigned int irq) { }
#define END_INIT .end = compat_noop
#else
#define END_INIT
#endif

/*
 * Generic no controller implementation
@@ -321,7 +326,7 @@ struct irq_chip no_irq_chip = {
	.irq_enable	= noop,
	.irq_disable	= noop,
	.irq_ack	= ack_bad,
	.end		= compat_noop,
	END_INIT
};

/*
@@ -337,7 +342,7 @@ struct irq_chip dummy_irq_chip = {
	.irq_ack	= noop,
	.irq_mask	= noop,
	.irq_unmask	= noop,
	.end		= compat_noop,
	END_INIT
};

/*
+10 −0
Original line number Diff line number Diff line
@@ -42,6 +42,16 @@ extern int irq_select_affinity_usr(unsigned int irq);

extern void irq_set_thread_affinity(struct irq_desc *desc);

#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
static inline void irq_end(unsigned int irq, struct irq_desc *desc)
{
	if (desc->irq_data.chip && desc->irq_data.chip->end)
		desc->irq_data.chip->end(irq);
}
#else
static inline void irq_end(unsigned int irq, struct irq_desc *desc) { }
#endif

/* Inline functions for support of irq chips on slow busses */
static inline void chip_bus_lock(struct irq_desc *desc)
{
Loading