Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35b3154e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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"
parents 3c73a2dd 036592fb
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -370,16 +370,16 @@ COMPAT_SYS(execveat)
PPC64ONLY(switch_endian)
SYSCALL_SPU(userfaultfd)
SYSCALL_SPU(membarrier)
SYSCALL(semop)
SYSCALL(semget)
COMPAT_SYS(semctl)
COMPAT_SYS(semtimedop)
COMPAT_SYS(msgsnd)
COMPAT_SYS(msgrcv)
SYSCALL(msgget)
COMPAT_SYS(msgctl)
COMPAT_SYS(shmat)
SYSCALL(shmdt)
SYSCALL(shmget)
COMPAT_SYS(shmctl)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(ni_syscall)
SYSCALL(mlock2)
+0 −12
Original line number Diff line number Diff line
@@ -388,18 +388,6 @@
#define __NR_switch_endian	363
#define __NR_userfaultfd	364
#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

#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
+13 −1
Original line number Diff line number Diff line
@@ -83,7 +83,19 @@ static void opal_event_unmask(struct irq_data *d)
	set_bit(d->hwirq, &opal_event_irqchip.mask);

	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)
+1 −1
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ static void opal_handle_message(void)

	/* Sanity check */
	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;
	}
	opal_message_do_notify(type, (void *)&msg);