Message ID | 20191025124058.22580-10-linux@rasmusvillemoes.dk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | QUICC Engine support on ARM | expand |
Le 25/10/2019 à 14:40, Rasmus Villemoes a écrit : > These functions are only ever called through a function pointer, and > therefore it makes no sense for them to be "static inline" - gcc has > no choice but to emit a copy in each translation unit that takes the > address of one of these (currently various platform code under > arch/powerpc/). So move them into qe_ic.c and leave ordinary extern > declarations in the header file. What is the point in moving fonctions that you will drop in the next patch (qe_ic_cascade_low_ipic() and qe_ic_cascade_high_ipic()) Only move the ones that will remain. Christophe > > Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> > --- > drivers/soc/fsl/qe/qe_ic.c | 58 +++++++++++++++++++++++++++++++++++ > include/soc/fsl/qe/qe_ic.h | 62 +++----------------------------------- > 2 files changed, 63 insertions(+), 57 deletions(-) > > diff --git a/drivers/soc/fsl/qe/qe_ic.c b/drivers/soc/fsl/qe/qe_ic.c > index 7b1870d2866a..a847b2672e90 100644 > --- a/drivers/soc/fsl/qe/qe_ic.c > +++ b/drivers/soc/fsl/qe/qe_ic.c > @@ -402,6 +402,64 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) > return irq_linear_revmap(qe_ic->irqhost, irq); > } > > +void qe_ic_cascade_low_ipic(struct irq_desc *desc) > +{ > + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > + unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); > + > + if (cascade_irq != NO_IRQ) > + generic_handle_irq(cascade_irq); > +} > + > +void qe_ic_cascade_high_ipic(struct irq_desc *desc) > +{ > + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > + unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); > + > + if (cascade_irq != NO_IRQ) > + generic_handle_irq(cascade_irq); > +} > + > +void qe_ic_cascade_low_mpic(struct irq_desc *desc) > +{ > + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > + unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); > + struct irq_chip *chip = irq_desc_get_chip(desc); > + > + if (cascade_irq != NO_IRQ) > + generic_handle_irq(cascade_irq); > + > + chip->irq_eoi(&desc->irq_data); > +} > + > +void qe_ic_cascade_high_mpic(struct irq_desc *desc) > +{ > + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > + unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); > + struct irq_chip *chip = irq_desc_get_chip(desc); > + > + if (cascade_irq != NO_IRQ) > + generic_handle_irq(cascade_irq); > + > + chip->irq_eoi(&desc->irq_data); > +} > + > +void qe_ic_cascade_muxed_mpic(struct irq_desc *desc) > +{ > + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > + unsigned int cascade_irq; > + struct irq_chip *chip = irq_desc_get_chip(desc); > + > + cascade_irq = qe_ic_get_high_irq(qe_ic); > + if (cascade_irq == NO_IRQ) > + cascade_irq = qe_ic_get_low_irq(qe_ic); > + > + if (cascade_irq != NO_IRQ) > + generic_handle_irq(cascade_irq); > + > + chip->irq_eoi(&desc->irq_data); > +} > + > void __init qe_ic_init(struct device_node *node, unsigned int flags, > void (*low_handler)(struct irq_desc *desc), > void (*high_handler)(struct irq_desc *desc)) > diff --git a/include/soc/fsl/qe/qe_ic.h b/include/soc/fsl/qe/qe_ic.h > index 714a9b890d8d..f3492eb13052 100644 > --- a/include/soc/fsl/qe/qe_ic.h > +++ b/include/soc/fsl/qe/qe_ic.h > @@ -74,62 +74,10 @@ void qe_ic_set_highest_priority(unsigned int virq, int high); > int qe_ic_set_priority(unsigned int virq, unsigned int priority); > int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high); > > -static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc) > -{ > - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); > - > - if (cascade_irq != NO_IRQ) > - generic_handle_irq(cascade_irq); > -} > - > -static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc) > -{ > - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); > - > - if (cascade_irq != NO_IRQ) > - generic_handle_irq(cascade_irq); > -} > - > -static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc) > -{ > - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); > - struct irq_chip *chip = irq_desc_get_chip(desc); > - > - if (cascade_irq != NO_IRQ) > - generic_handle_irq(cascade_irq); > - > - chip->irq_eoi(&desc->irq_data); > -} > - > -static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc) > -{ > - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); > - struct irq_chip *chip = irq_desc_get_chip(desc); > - > - if (cascade_irq != NO_IRQ) > - generic_handle_irq(cascade_irq); > - > - chip->irq_eoi(&desc->irq_data); > -} > - > -static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc) > -{ > - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); > - unsigned int cascade_irq; > - struct irq_chip *chip = irq_desc_get_chip(desc); > - > - cascade_irq = qe_ic_get_high_irq(qe_ic); > - if (cascade_irq == NO_IRQ) > - cascade_irq = qe_ic_get_low_irq(qe_ic); > - > - if (cascade_irq != NO_IRQ) > - generic_handle_irq(cascade_irq); > - > - chip->irq_eoi(&desc->irq_data); > -} > +void qe_ic_cascade_low_ipic(struct irq_desc *desc); > +void qe_ic_cascade_high_ipic(struct irq_desc *desc); > +void qe_ic_cascade_low_mpic(struct irq_desc *desc); > +void qe_ic_cascade_high_mpic(struct irq_desc *desc); > +void qe_ic_cascade_muxed_mpic(struct irq_desc *desc); > > #endif /* _ASM_POWERPC_QE_IC_H */ >
diff --git a/drivers/soc/fsl/qe/qe_ic.c b/drivers/soc/fsl/qe/qe_ic.c index 7b1870d2866a..a847b2672e90 100644 --- a/drivers/soc/fsl/qe/qe_ic.c +++ b/drivers/soc/fsl/qe/qe_ic.c @@ -402,6 +402,64 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic) return irq_linear_revmap(qe_ic->irqhost, irq); } +void qe_ic_cascade_low_ipic(struct irq_desc *desc) +{ + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); + unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); + + if (cascade_irq != NO_IRQ) + generic_handle_irq(cascade_irq); +} + +void qe_ic_cascade_high_ipic(struct irq_desc *desc) +{ + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); + unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); + + if (cascade_irq != NO_IRQ) + generic_handle_irq(cascade_irq); +} + +void qe_ic_cascade_low_mpic(struct irq_desc *desc) +{ + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); + unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); + struct irq_chip *chip = irq_desc_get_chip(desc); + + if (cascade_irq != NO_IRQ) + generic_handle_irq(cascade_irq); + + chip->irq_eoi(&desc->irq_data); +} + +void qe_ic_cascade_high_mpic(struct irq_desc *desc) +{ + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); + unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); + struct irq_chip *chip = irq_desc_get_chip(desc); + + if (cascade_irq != NO_IRQ) + generic_handle_irq(cascade_irq); + + chip->irq_eoi(&desc->irq_data); +} + +void qe_ic_cascade_muxed_mpic(struct irq_desc *desc) +{ + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); + unsigned int cascade_irq; + struct irq_chip *chip = irq_desc_get_chip(desc); + + cascade_irq = qe_ic_get_high_irq(qe_ic); + if (cascade_irq == NO_IRQ) + cascade_irq = qe_ic_get_low_irq(qe_ic); + + if (cascade_irq != NO_IRQ) + generic_handle_irq(cascade_irq); + + chip->irq_eoi(&desc->irq_data); +} + void __init qe_ic_init(struct device_node *node, unsigned int flags, void (*low_handler)(struct irq_desc *desc), void (*high_handler)(struct irq_desc *desc)) diff --git a/include/soc/fsl/qe/qe_ic.h b/include/soc/fsl/qe/qe_ic.h index 714a9b890d8d..f3492eb13052 100644 --- a/include/soc/fsl/qe/qe_ic.h +++ b/include/soc/fsl/qe/qe_ic.h @@ -74,62 +74,10 @@ void qe_ic_set_highest_priority(unsigned int virq, int high); int qe_ic_set_priority(unsigned int virq, unsigned int priority); int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high); -static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); -} - -static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); -} - -static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic); - struct irq_chip *chip = irq_desc_get_chip(desc); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); - - chip->irq_eoi(&desc->irq_data); -} - -static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic); - struct irq_chip *chip = irq_desc_get_chip(desc); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); - - chip->irq_eoi(&desc->irq_data); -} - -static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc) -{ - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc); - unsigned int cascade_irq; - struct irq_chip *chip = irq_desc_get_chip(desc); - - cascade_irq = qe_ic_get_high_irq(qe_ic); - if (cascade_irq == NO_IRQ) - cascade_irq = qe_ic_get_low_irq(qe_ic); - - if (cascade_irq != NO_IRQ) - generic_handle_irq(cascade_irq); - - chip->irq_eoi(&desc->irq_data); -} +void qe_ic_cascade_low_ipic(struct irq_desc *desc); +void qe_ic_cascade_high_ipic(struct irq_desc *desc); +void qe_ic_cascade_low_mpic(struct irq_desc *desc); +void qe_ic_cascade_high_mpic(struct irq_desc *desc); +void qe_ic_cascade_muxed_mpic(struct irq_desc *desc); #endif /* _ASM_POWERPC_QE_IC_H */
These functions are only ever called through a function pointer, and therefore it makes no sense for them to be "static inline" - gcc has no choice but to emit a copy in each translation unit that takes the address of one of these (currently various platform code under arch/powerpc/). So move them into qe_ic.c and leave ordinary extern declarations in the header file. Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> --- drivers/soc/fsl/qe/qe_ic.c | 58 +++++++++++++++++++++++++++++++++++ include/soc/fsl/qe/qe_ic.h | 62 +++----------------------------------- 2 files changed, 63 insertions(+), 57 deletions(-)