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:
Linus Torvalds 2015-12-19 16:40:48 -08:00
commit 35b3154efb
4 changed files with 26 additions and 26 deletions

View File

@ -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)

View File

@ -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_ */

View File

@ -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)

View File

@ -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);