hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/tty/serial/amba-pl011.c
....@@ -2199,24 +2199,18 @@
21992199 {
22002200 struct uart_amba_port *uap = amba_ports[co->index];
22012201 unsigned int old_cr = 0, new_cr;
2202
- unsigned long flags = 0;
2202
+ unsigned long flags;
22032203 int locked = 1;
22042204
22052205 clk_enable(uap->clk);
22062206
2207
- /*
2208
- * local_irq_save(flags);
2209
- *
2210
- * This local_irq_save() is nonsense. If we come in via sysrq
2211
- * handling then interrupts are already disabled. Aside of
2212
- * that the port.sysrq check is racy on SMP regardless.
2213
- */
2207
+ local_irq_save(flags);
22142208 if (uap->port.sysrq)
22152209 locked = 0;
22162210 else if (oops_in_progress)
2217
- locked = spin_trylock_irqsave(&uap->port.lock, flags);
2211
+ locked = spin_trylock(&uap->port.lock);
22182212 else
2219
- spin_lock_irqsave(&uap->port.lock, flags);
2213
+ spin_lock(&uap->port.lock);
22202214
22212215 /*
22222216 * First save the CR then disable the interrupts
....@@ -2242,7 +2236,8 @@
22422236 pl011_write(old_cr, uap, REG_CR);
22432237
22442238 if (locked)
2245
- spin_unlock_irqrestore(&uap->port.lock, flags);
2239
+ spin_unlock(&uap->port.lock);
2240
+ local_irq_restore(flags);
22462241
22472242 clk_disable(uap->clk);
22482243 }