MIPS: Octeon: Use write_{un,}lock_irq{restore,save} to set irq affinity
Since the locks are used from interrupt context we need the irqsave/irqrestore versions of the locking functions. Signed-off-by: David Daney <ddaney@caviumnetworks.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
0db2b74e91
commit
b6b74d5490
@@ -182,9 +182,10 @@ static void octeon_irq_ciu0_disable(unsigned int irq)
|
|||||||
static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest)
|
static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest)
|
||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
|
unsigned long flags;
|
||||||
int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
|
int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
|
||||||
|
|
||||||
write_lock(&octeon_irq_ciu0_rwlock);
|
write_lock_irqsave(&octeon_irq_ciu0_rwlock, flags);
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
int coreid = cpu_logical_map(cpu);
|
int coreid = cpu_logical_map(cpu);
|
||||||
uint64_t en0 =
|
uint64_t en0 =
|
||||||
@@ -200,7 +201,7 @@ static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *
|
|||||||
* of them are done.
|
* of them are done.
|
||||||
*/
|
*/
|
||||||
cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2));
|
cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2));
|
||||||
write_unlock(&octeon_irq_ciu0_rwlock);
|
write_unlock_irqrestore(&octeon_irq_ciu0_rwlock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -299,9 +300,10 @@ static void octeon_irq_ciu1_disable(unsigned int irq)
|
|||||||
static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *dest)
|
static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *dest)
|
||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
|
unsigned long flags;
|
||||||
int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
|
int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
|
||||||
|
|
||||||
write_lock(&octeon_irq_ciu1_rwlock);
|
write_lock_irqsave(&octeon_irq_ciu1_rwlock, flags);
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
int coreid = cpu_logical_map(cpu);
|
int coreid = cpu_logical_map(cpu);
|
||||||
uint64_t en1 =
|
uint64_t en1 =
|
||||||
@@ -318,7 +320,7 @@ static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *
|
|||||||
* of them are done.
|
* of them are done.
|
||||||
*/
|
*/
|
||||||
cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1));
|
cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1));
|
||||||
write_unlock(&octeon_irq_ciu1_rwlock);
|
write_unlock_irqrestore(&octeon_irq_ciu1_rwlock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user