tree 556238b8997e2967f654cc509cf9d7c1e7ac3825
parent adccfb1a805ea84d2db38eb53032533279bdaa97
author Greentime Hu <greentime.hu@sifive.com> 1583228058 +0800
committer Palmer Dabbelt <palmerdabbelt@google.com> 1584582279 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQJHBAABCgAxFiEEKzw3R0RoQ7JKlDp6LhMZ81+7GIkFAl5yzocTHHBhbG1lckBk
 YWJiZWx0LmNvbQAKCRAuExnzX7sYiXR4EADDdEB7HkuhP0CqX7gkJzOIE3UXcxmZ
 IcxTwscbZK5UiWNM+7rx/b+p9lC7PI+7clONztQx8yl/2H69PyXpyKbVtEyDittM
 I9e4apWaRqqaWgNNx7jyRahrFVGo1zmxbRKiIErdvetTUJrs9CbZpZ9KKHxQJ2ay
 WnqAYL0dGfLTdjyNrU2hviXzVFaMPy4i15YFoPxmogCnP7em5uZD35BgH7DCymot
 TU9PwqGsk02i7v0GtPWU+KJyYds18lXnUTGwJ0mlyj3cvInxuyvGioOmtIaw4F0f
 VGFoasVbsTaVUmUK5CQP3RzlJS1X6BeXDIAt2C5o7pPhVlRXV2lb3KoxXMwIbtz+
 AK0EVWX9Os2zBQU46HT18HAwL+eq9Km3vLy9VSGU62Q/NtYDlgEMOJcxT4mEdp1i
 UpBqZEqWNbkXr8C2CIP/9vkrdtsLO0fmmdENKFZxK0xQw29A2AayFs4pI/kgKYmh
 UBljKKNI4spQ+jTdbNp1171QyqZO/9vKsUGI91ru57kOc3e8wWJTxVL+bsEPTE2a
 LQXmDZ+J2rrtZvMvWzPV9bSvjzGeJ4Q+CKb738XxgL1gBcRfLARIH8iEB7KMr630
 ihzIPQiBNkqFavCUfqKocVPhjcZsktOC0qcoKFiJkyNDezup2z3oA+jBtBx5keyS
 fHKuVlHMC+VfPQ==
 =Z8LU
 -----END PGP SIGNATURE-----

riscv: fix the IPI missing issue in nommu mode

This patch fixes the IPI(inner processor interrupt) missing issue. It
failed because it used hartid_mask to iterate for_each_cpu(), however the
cpu_mask and hartid_mask may not be always the same. It will never send the
IPI to hartid 4 because it will be skipped in for_each_cpu loop in my case.

We can reproduce this case in Qemu sifive_u machine by this command.
qemu-system-riscv64 -nographic -smp 5 -m 1G -M sifive_u -kernel \
arch/riscv/boot/loader

It will hang in csd_lock_wait(csd) because the csd_unlock(csd) is not
called. It is not called because hartid 4 doesn't receive the IPI to
release this lock. The caller hart doesn't send the IPI to hartid 4 is
because of hartid 4 is skipped in for_each_cpu(). It will be skipped is
because "(cpu) < nr_cpu_ids" is not true. The hartid is 4 and nr_cpu_ids
is 4. Therefore it should use cpumask in for_each_cpu() instead of
hartid_mask.

        /* Send a message to all CPUs in the map */
        arch_send_call_function_ipi_mask(cfd->cpumask_ipi);

        if (wait) {
                for_each_cpu(cpu, cfd->cpumask) {
                        call_single_data_t *csd;
			csd = per_cpu_ptr(cfd->csd, cpu);
                        csd_lock_wait(csd);
                }
        }

        for ((cpu) = -1;                                \
                (cpu) = cpumask_next((cpu), (mask)),    \
                (cpu) < nr_cpu_ids;)

It could boot to login console after this patch applied.

Fixes: b2d36b5668f6 ("riscv: provide native clint access for M-mode")
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Reviewed-by: Palmer Dabbelt <palmerdabbelt@google.com>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
