mirror of https://gitee.com/openkylin/linux.git
- fix lockdep irq state tracing
- fix logical vs physical CPU address confusion in PCI code -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEECMNfWEw3SLnmiLkZIg7DeRspbsIFAl/JNlgACgkQIg7DeRsp bsKdgA//TQrq8oN33N/kCGcqLqXito9c5hLVUDapGYvBF9eJmjDoWPYJln6y8yRa PUmzH2ONKyJNXbbPrj8/YP2qYwUZ/gL5ehussdxNU57ZQ7+uX20GrXjTsjIJFO/T X2EXhk79iBfO0rbayZvxEJZVRrEXiDGrRWouZwUDiR08BLrFCugTP7u+kc4W4BJu nxPkPi8TrGAD6hMVUv8In2w5rnHzjnHyrCRZPvCFSf2d3zxn+vlb0ZT5sgmqoZKb xqfJhvJPZNcl4D58diHGWNWOZDw2su9CQG9OcZrv6PSexzDCPU4+GdZpr0Jc5HQ5 TE3u3CFpQEORNCFjPP4ailptqpIN1/7Y6ZA5xOwgdAeU0kFvpRhkd3Nftpl1gqkl VI4eEAIJ3+2ob2WKWlX6ecIS82YyH03avskWyfj6MoAtRkICJKVWYdTEHGZwswcY JYmL8tg0nq/UuAepdGReh61LjSatQDY9Z4DSU0U9Y02231mpSxZ8sYuv/YlMQp49 pJX3G6Yi4G3Mz+w9mt6Ly5Iq7mzwRLoHgzkPQvbhnnXgCOnWI6PyzqWhlqztZ/At /3qdxn8NpD2POJbdSSWPlqCVXLQHEtQN1QRi6f/awsJ5vT8bTqTEvQj8y79IeBJO 5Wx2wbXAuvzCNEoQOKRFJV1Ddtono+idAMVRTwTUv1jUfxE2MIE= =NaIp -----END PGP SIGNATURE----- Merge tag 's390-5.10-6' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 fixes from Heiko Carstens: "One commit is fixing lockdep irq state tracing which broke with -rc6. The other one fixes logical vs physical CPU address mixup in our PCI code. Summary: - fix lockdep irq state tracing - fix logical vs physical CPU address confusion in PCI code" * tag 's390-5.10-6' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390: fix irq state tracing s390/pci: fix CPU address in MSI for directed IRQ
This commit is contained in:
commit
fee5be1852
|
@ -763,12 +763,7 @@ ENTRY(io_int_handler)
|
|||
xc __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
|
||||
TSTMSK __LC_CPU_FLAGS,_CIF_IGNORE_IRQ
|
||||
jo .Lio_restore
|
||||
#if IS_ENABLED(CONFIG_TRACE_IRQFLAGS)
|
||||
tmhh %r8,0x300
|
||||
jz 1f
|
||||
TRACE_IRQS_OFF
|
||||
1:
|
||||
#endif
|
||||
xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
|
||||
.Lio_loop:
|
||||
lgr %r2,%r11 # pass pointer to pt_regs
|
||||
|
@ -791,12 +786,7 @@ ENTRY(io_int_handler)
|
|||
TSTMSK __LC_CPU_FLAGS,_CIF_WORK
|
||||
jnz .Lio_work
|
||||
.Lio_restore:
|
||||
#if IS_ENABLED(CONFIG_TRACE_IRQFLAGS)
|
||||
tm __PT_PSW(%r11),3
|
||||
jno 0f
|
||||
TRACE_IRQS_ON
|
||||
0:
|
||||
#endif
|
||||
mvc __LC_RETURN_PSW(16),__PT_PSW(%r11)
|
||||
tm __PT_PSW+1(%r11),0x01 # returning to user ?
|
||||
jno .Lio_exit_kernel
|
||||
|
@ -976,12 +966,7 @@ ENTRY(ext_int_handler)
|
|||
xc __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
|
||||
TSTMSK __LC_CPU_FLAGS,_CIF_IGNORE_IRQ
|
||||
jo .Lio_restore
|
||||
#if IS_ENABLED(CONFIG_TRACE_IRQFLAGS)
|
||||
tmhh %r8,0x300
|
||||
jz 1f
|
||||
TRACE_IRQS_OFF
|
||||
1:
|
||||
#endif
|
||||
xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
|
||||
lgr %r2,%r11 # pass pointer to pt_regs
|
||||
lghi %r3,EXT_INTERRUPT
|
||||
|
|
|
@ -33,7 +33,7 @@ EXPORT_SYMBOL(__delay);
|
|||
|
||||
static void __udelay_disabled(unsigned long long usecs)
|
||||
{
|
||||
unsigned long cr0, cr0_new, psw_mask, flags;
|
||||
unsigned long cr0, cr0_new, psw_mask;
|
||||
struct s390_idle_data idle;
|
||||
u64 end;
|
||||
|
||||
|
@ -45,9 +45,8 @@ static void __udelay_disabled(unsigned long long usecs)
|
|||
psw_mask = __extract_psw() | PSW_MASK_EXT | PSW_MASK_WAIT;
|
||||
set_clock_comparator(end);
|
||||
set_cpu_flag(CIF_IGNORE_IRQ);
|
||||
local_irq_save(flags);
|
||||
psw_idle(&idle, psw_mask);
|
||||
local_irq_restore(flags);
|
||||
trace_hardirqs_off();
|
||||
clear_cpu_flag(CIF_IGNORE_IRQ);
|
||||
set_clock_comparator(S390_lowcore.clock_comparator);
|
||||
__ctl_load(cr0, 0, 0);
|
||||
|
|
|
@ -103,9 +103,10 @@ static int zpci_set_irq_affinity(struct irq_data *data, const struct cpumask *de
|
|||
{
|
||||
struct msi_desc *entry = irq_get_msi_desc(data->irq);
|
||||
struct msi_msg msg = entry->msg;
|
||||
int cpu_addr = smp_cpu_get_cpu_address(cpumask_first(dest));
|
||||
|
||||
msg.address_lo &= 0xff0000ff;
|
||||
msg.address_lo |= (cpumask_first(dest) << 8);
|
||||
msg.address_lo |= (cpu_addr << 8);
|
||||
pci_write_msi_msg(data->irq, &msg);
|
||||
|
||||
return IRQ_SET_MASK_OK;
|
||||
|
@ -238,6 +239,7 @@ int arch_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
|
|||
unsigned long bit;
|
||||
struct msi_desc *msi;
|
||||
struct msi_msg msg;
|
||||
int cpu_addr;
|
||||
int rc, irq;
|
||||
|
||||
zdev->aisb = -1UL;
|
||||
|
@ -287,9 +289,15 @@ int arch_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
|
|||
handle_percpu_irq);
|
||||
msg.data = hwirq - bit;
|
||||
if (irq_delivery == DIRECTED) {
|
||||
if (msi->affinity)
|
||||
cpu = cpumask_first(&msi->affinity->mask);
|
||||
else
|
||||
cpu = 0;
|
||||
cpu_addr = smp_cpu_get_cpu_address(cpu);
|
||||
|
||||
msg.address_lo = zdev->msi_addr & 0xff0000ff;
|
||||
msg.address_lo |= msi->affinity ?
|
||||
(cpumask_first(&msi->affinity->mask) << 8) : 0;
|
||||
msg.address_lo |= (cpu_addr << 8);
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
airq_iv_set_data(zpci_ibv[cpu], hwirq, irq);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue