soc/fsl fixes for v5.0
- qbman: avoid missing interrupts by only clearing processed events -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEhb3UXAyxp6UQ0v6khtxQDvusFVQFAlxCXogACgkQhtxQDvus FVTTNA//eeLePHOBjgAa1qeP49QUTzlWBfs47rm4gVutUBygtUlnvQkzVz/70u/k s/VI7IdSTU6OU43Dw6WC5EHax3zxeLER5k31WeIp5uGNuDOZmqgrLxvtsWtzDX/j Zvrh9SBlTtYjDIoWGq4iUWp4xmy9qh0OeY1NvdjUjSBPXtr1m/k+dM/LFAONIKrC 8VCGkb4HaO8xc175esTJXScXQuWyL8PE6wPGChI/oV7beJ36vUEx3roYeKcZgUYV Qy+klH7fOt4triUNXEoK155HhfxYULqN2ODjnNCB/3loMZIZ6hIBUOH4upnTGZLk AqvbHsX/S2bhPRFJjiYFO+QKP12b3XzUs3naKfeTG8T4m/u3SpqfMwYNZFAEPX1D DV5KdchKdwg0Ni8G/+KLK+nmT+rcsEsD4enNZA/f5GajmcoK4/hKtTAjGGY0RCEG OusyLecRkLHCV0fwZofmAXEiWOZ8NttICFyQ9lH4Ppg7wAcgDEjNvGmO6b6hHLqM m1cZkzdBgCraudUqRhiLTZ4NYOO8xadvfc8+YVJ9icaPykKPqvVEoOicmOfwNlx/ 1QJAfI2vAl8wYwzfQ+3leCorXJrkU5Rcufo2jAp67EwrX3UxI6HbJ59XahFX4BlD 8c0qY4/7yBALZjmhPNGSf7U6DTFH67WQDZCaM+yJGZ82o4COL+s= =lyv5 -----END PGP SIGNATURE----- Merge tag 'soc-fsl-fix-v5.0' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux into arm/fixes soc/fsl fixes for v5.0 - qbman: avoid missing interrupts by only clearing processed events * tag 'soc-fsl-fix-v5.0' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux: soc: fsl: qbman: avoid race in clearing QMan interrupt Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
e22dc7be4c
|
@ -1143,18 +1143,19 @@ static void qm_mr_process_task(struct work_struct *work);
|
||||||
static irqreturn_t portal_isr(int irq, void *ptr)
|
static irqreturn_t portal_isr(int irq, void *ptr)
|
||||||
{
|
{
|
||||||
struct qman_portal *p = ptr;
|
struct qman_portal *p = ptr;
|
||||||
|
|
||||||
u32 clear = QM_DQAVAIL_MASK | p->irq_sources;
|
|
||||||
u32 is = qm_in(&p->p, QM_REG_ISR) & p->irq_sources;
|
u32 is = qm_in(&p->p, QM_REG_ISR) & p->irq_sources;
|
||||||
|
u32 clear = 0;
|
||||||
|
|
||||||
if (unlikely(!is))
|
if (unlikely(!is))
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
|
|
||||||
/* DQRR-handling if it's interrupt-driven */
|
/* DQRR-handling if it's interrupt-driven */
|
||||||
if (is & QM_PIRQ_DQRI)
|
if (is & QM_PIRQ_DQRI) {
|
||||||
__poll_portal_fast(p, QMAN_POLL_LIMIT);
|
__poll_portal_fast(p, QMAN_POLL_LIMIT);
|
||||||
|
clear = QM_DQAVAIL_MASK | QM_PIRQ_DQRI;
|
||||||
|
}
|
||||||
/* Handling of anything else that's interrupt-driven */
|
/* Handling of anything else that's interrupt-driven */
|
||||||
clear |= __poll_portal_slow(p, is);
|
clear |= __poll_portal_slow(p, is) & QM_PIRQ_SLOW;
|
||||||
qm_out(&p->p, QM_REG_ISR, clear);
|
qm_out(&p->p, QM_REG_ISR, clear);
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue