Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1549492 > unrolled thread

mpic IRQ_TYPE_BOTH handling

Started byGregory Fong <gregory.0xf0@gmail.com>
First post2017-01-03 02:50 +0100
Last post2017-01-03 02:50 +0100
Articles 1 — 1 participant

Back to article view | Back to linux.kernel


Contents

  mpic IRQ_TYPE_BOTH handling Gregory Fong <gregory.0xf0@gmail.com> - 2017-01-03 02:50 +0100

#1549492 — mpic IRQ_TYPE_BOTH handling

FromGregory Fong <gregory.0xf0@gmail.com>
Date2017-01-03 02:50 +0100
Subjectmpic IRQ_TYPE_BOTH handling
Message-ID<sVmoF-7jY-1@gated-at.bofh.it>
Hi all,

In arch/powerpc/sysdev/mpic.c , it looks like IRQ_TYPE_EDGE_BOTH is
handled the same way as IRQ_TYPE_EDGE_FALLING:

static unsigned int mpic_type_to_vecpri(struct mpic *mpic, unsigned int type)
{
        /* Now convert sense value */
        switch(type & IRQ_TYPE_SENSE_MASK) {
        case IRQ_TYPE_EDGE_RISING:
                return MPIC_INFO(VECPRI_SENSE_EDGE) |
                       MPIC_INFO(VECPRI_POLARITY_POSITIVE);
        case IRQ_TYPE_EDGE_FALLING:
        case IRQ_TYPE_EDGE_BOTH:
                return MPIC_INFO(VECPRI_SENSE_EDGE) |
                       MPIC_INFO(VECPRI_POLARITY_NEGATIVE);
        case IRQ_TYPE_LEVEL_HIGH:
                return MPIC_INFO(VECPRI_SENSE_LEVEL) |
                       MPIC_INFO(VECPRI_POLARITY_POSITIVE);
        case IRQ_TYPE_LEVEL_LOW:
        default:
                return MPIC_INFO(VECPRI_SENSE_LEVEL) |
                       MPIC_INFO(VECPRI_POLARITY_NEGATIVE);
        }
}

If IRQ_TYPE_EDGE_BOTH is unsupported, shouldn't we be returning an
error, instead of silently setting to use IRQ_TYPE_EDGE_FALLING?
Something like the following (sorry if the diff wraps weirdly, on
webmail at the moment):

----8<----
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index b9aac95..5867ea2 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -876,6 +876,9 @@ int mpic_set_irq_type(struct irq_data *d, unsigned
int flow_type)
        if (src >= mpic->num_sources)
                return -EINVAL;

+       if (flow_type & IRQ_TYPE_SENSE_MASK == IRQ_TYPE_EDGE_BOTH)
+               return -EINVAL;
+
        vold = mpic_irq_read(src, MPIC_INFO(IRQ_VECTOR_PRI));

        /* We don't support "none" type */
---->8----

Thanks,
Gregory

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web