powerpc fixes for 4.4 #4
- Partial revert of "powerpc: Individual System V IPC system calls" - pr_warn_once on unsupported OPAL_MSG type from Stewart - Fix deadlock in opal-irqchip introduced by "Fix double endian conversion" from Alistair -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWdTe9AAoJEFHr6jzI4aWANO4QAJwqS2Zhga0v/JSqMUpKgrlM aFMLp6nM25wHkFmRBbIgJbkQAqG+2Sl43OARuJ4y4b3J9fqjKBXxzymgPQ+Y1OlR xd+psLmfRf5r/cge45UgILhxE5LFckVIVg/uYkeI5zfRq9TqYes1Ys+7nGpV7IdB zWXseulscE/KcEbDHlBexN9/FujONZk6DU6m17TzJbkiptn+7CA0AahbWsK9t05g jXCppDPvGYvYGYQ4Y0G8Qnp3jELDlmPhwYWGLw7gruGTHSfbMQxhFokembk/HDcx tSetmTBzGt384h7dVJD6HF89VuwgqECBIL8hl0cajFkjkzgdIieDuEGWM1yov4+R 7Tv05aO/5xYUy5vTk5qkMfywH+TQOwVjr3p3KZgGdj8ddYu7Sk4rRwKK/4cN1M7W /RrRzeSOJ2RkTedzu1/sd0h49r2o7tUtgC0rKosDBkibCk135yNa3pe7FKHyR8NW a/B57u6+wFvf374TUVMavcSeRvIa4cQ3YuMPcM8ykrEUJWB+QVEXPNiTNG5rux4Z 4+VX9n0/LhsEu+dGMrdWkpEUSCXi4p6AQHKpTDocWSfEiGNU77b1vF7va06T34fN nbp6O0dXFnTgX6IJ8jEQzc8bELElFNw0gfgH6vHpgh6dkFEyL/ew0mJqQJ17bJLF HUxdt4/OgNVj5htfeKDI =58wA -----END PGP SIGNATURE----- Merge tag 'powerpc-4.4-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull powerpc fixes from Michael Ellerman: - Partial revert of "powerpc: Individual System V IPC system calls" - pr_warn_once on unsupported OPAL_MSG type from Stewart - Fix deadlock in opal-irqchip introduced by "Fix double endian conversion" from Alistair * tag 'powerpc-4.4-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/opal-irqchip: Fix deadlock introduced by "Fix double endian conversion" powerpc/powernv: pr_warn_once on unsupported OPAL_MSG type Partial revert of "powerpc: Individual System V IPC system calls"
This commit is contained in:
commit
35b3154efb
|
@ -370,16 +370,16 @@ COMPAT_SYS(execveat)
|
||||||
PPC64ONLY(switch_endian)
|
PPC64ONLY(switch_endian)
|
||||||
SYSCALL_SPU(userfaultfd)
|
SYSCALL_SPU(userfaultfd)
|
||||||
SYSCALL_SPU(membarrier)
|
SYSCALL_SPU(membarrier)
|
||||||
SYSCALL(semop)
|
SYSCALL(ni_syscall)
|
||||||
SYSCALL(semget)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(semctl)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(semtimedop)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(msgsnd)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(msgrcv)
|
SYSCALL(ni_syscall)
|
||||||
SYSCALL(msgget)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(msgctl)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(shmat)
|
SYSCALL(ni_syscall)
|
||||||
SYSCALL(shmdt)
|
SYSCALL(ni_syscall)
|
||||||
SYSCALL(shmget)
|
SYSCALL(ni_syscall)
|
||||||
COMPAT_SYS(shmctl)
|
SYSCALL(ni_syscall)
|
||||||
SYSCALL(mlock2)
|
SYSCALL(mlock2)
|
||||||
|
|
|
@ -388,18 +388,6 @@
|
||||||
#define __NR_switch_endian 363
|
#define __NR_switch_endian 363
|
||||||
#define __NR_userfaultfd 364
|
#define __NR_userfaultfd 364
|
||||||
#define __NR_membarrier 365
|
#define __NR_membarrier 365
|
||||||
#define __NR_semop 366
|
|
||||||
#define __NR_semget 367
|
|
||||||
#define __NR_semctl 368
|
|
||||||
#define __NR_semtimedop 369
|
|
||||||
#define __NR_msgsnd 370
|
|
||||||
#define __NR_msgrcv 371
|
|
||||||
#define __NR_msgget 372
|
|
||||||
#define __NR_msgctl 373
|
|
||||||
#define __NR_shmat 374
|
|
||||||
#define __NR_shmdt 375
|
|
||||||
#define __NR_shmget 376
|
|
||||||
#define __NR_shmctl 377
|
|
||||||
#define __NR_mlock2 378
|
#define __NR_mlock2 378
|
||||||
|
|
||||||
#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
|
#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
|
||||||
|
|
|
@ -83,7 +83,19 @@ static void opal_event_unmask(struct irq_data *d)
|
||||||
set_bit(d->hwirq, &opal_event_irqchip.mask);
|
set_bit(d->hwirq, &opal_event_irqchip.mask);
|
||||||
|
|
||||||
opal_poll_events(&events);
|
opal_poll_events(&events);
|
||||||
opal_handle_events(be64_to_cpu(events));
|
last_outstanding_events = be64_to_cpu(events);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We can't just handle the events now with opal_handle_events().
|
||||||
|
* If we did we would deadlock when opal_event_unmask() is called from
|
||||||
|
* handle_level_irq() with the irq descriptor lock held, because
|
||||||
|
* calling opal_handle_events() would call generic_handle_irq() and
|
||||||
|
* then handle_level_irq() which would try to take the descriptor lock
|
||||||
|
* again. Instead queue the events for later.
|
||||||
|
*/
|
||||||
|
if (last_outstanding_events & opal_event_irqchip.mask)
|
||||||
|
/* Need to retrigger the interrupt */
|
||||||
|
irq_work_queue(&opal_event_irq_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int opal_event_set_type(struct irq_data *d, unsigned int flow_type)
|
static int opal_event_set_type(struct irq_data *d, unsigned int flow_type)
|
||||||
|
|
|
@ -278,7 +278,7 @@ static void opal_handle_message(void)
|
||||||
|
|
||||||
/* Sanity check */
|
/* Sanity check */
|
||||||
if (type >= OPAL_MSG_TYPE_MAX) {
|
if (type >= OPAL_MSG_TYPE_MAX) {
|
||||||
pr_warning("%s: Unknown message type: %u\n", __func__, type);
|
pr_warn_once("%s: Unknown message type: %u\n", __func__, type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
opal_message_do_notify(type, (void *)&msg);
|
opal_message_do_notify(type, (void *)&msg);
|
||||||
|
|
Loading…
Reference in New Issue