Changeset 7f1f428 in rtems-libbsd


Ignore:
Timestamp:
May 18, 2017, 12:19:09 PM (2 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
5283630d2c9d40deb0183696d278e02644fe4326, bc2ba9a9cdc7381c2a4f2ae6ee303be636f31368
Children:
e2d48f5
Parents:
69a5677
git-author:
Sebastian Huber <sebastian.huber@…> (05/18/17 12:19:09)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/23/17 07:24:06)
Message:

qman_api.c: Prevent false clearing of IRQ status

Adding (p->irq_sources & ~QM_PIRQ_CSCI) to the clear mask means for
example we clear the QM_PIRQ_EQCI unconditionally. This is a problem in
case this interrupt happens after the read of the interrupt status and
before the interrupt status clear.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • linux/drivers/soc/fsl/qbman/qman.c

    r69a5677 r7f1f428  
    10721072        struct qman_portal *p = ptr;
    10731073
    1074         u32 clear = QM_DQAVAIL_MASK | p->irq_sources;
     1074        u32 clear = QM_DQAVAIL_MASK;
    10751075        u32 is = qm_in(&p->p, QM_REG_ISR) & p->irq_sources;
    10761076
     
    10791079
    10801080        /* DQRR-handling if it's interrupt-driven */
    1081         if (is & QM_PIRQ_DQRI)
     1081        if (is & QM_PIRQ_DQRI) {
     1082                clear |= QM_PIRQ_DQRI;
    10821083                __poll_portal_fast(p, QMAN_POLL_LIMIT);
     1084        }
    10831085        /* Handling of anything else that's interrupt-driven */
    10841086        clear |= __poll_portal_slow(p, is);
Note: See TracChangeset for help on using the changeset viewer.