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

Commit c195a4e6 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge "Merge 4.19.284 into android-4.19-stable" into android-4.19-stable

parents 0f427f0f 4e2cad2c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 19
SUBLEVEL = 283
SUBLEVEL = 284
EXTRAVERSION =
NAME = "People's Front"

+10 −4
Original line number Diff line number Diff line
@@ -882,11 +882,17 @@ static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs *
}

static inline void __user *
get_sigframe(struct ksignal *ksig, size_t frame_size)
get_sigframe(struct ksignal *ksig, struct pt_regs *tregs, size_t frame_size)
{
	unsigned long usp = sigsp(rdusp(), ksig);
	unsigned long gap = 0;

	return (void __user *)((usp - frame_size) & -8UL);
	if (CPU_IS_020_OR_030 && tregs->format == 0xb) {
		/* USP is unreliable so use worst-case value */
		gap = 256;
	}

	return (void __user *)((usp - gap - frame_size) & -8UL);
}

static int setup_frame(struct ksignal *ksig, sigset_t *set,
@@ -904,7 +910,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,
		return -EFAULT;
	}

	frame = get_sigframe(ksig, sizeof(*frame) + fsize);
	frame = get_sigframe(ksig, tregs, sizeof(*frame) + fsize);

	if (fsize)
		err |= copy_to_user (frame + 1, regs + 1, fsize);
@@ -975,7 +981,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
		return -EFAULT;
	}

	frame = get_sigframe(ksig, sizeof(*frame));
	frame = get_sigframe(ksig, tregs, sizeof(*frame));

	if (fsize)
		err |= copy_to_user (&frame->uc.uc_extra, regs + 1, fsize);
+5 −0
Original line number Diff line number Diff line
@@ -57,6 +57,11 @@ extern void flush_dcache_page(struct page *page);

#define flush_dcache_mmap_lock(mapping)		xa_lock_irq(&mapping->i_pages)
#define flush_dcache_mmap_unlock(mapping)	xa_unlock_irq(&mapping->i_pages)
#define flush_dcache_mmap_lock_irqsave(mapping, flags)		\
		xa_lock_irqsave(&mapping->i_pages, flags)
#define flush_dcache_mmap_unlock_irqrestore(mapping, flags)	\
		xa_unlock_irqrestore(&mapping->i_pages, flags)


#define flush_icache_page(vma,page)	do { 		\
	flush_kernel_dcache_page(page);			\
+3 −2
Original line number Diff line number Diff line
@@ -309,6 +309,7 @@ void flush_dcache_page(struct page *page)
	struct vm_area_struct *mpnt;
	unsigned long offset;
	unsigned long addr, old_addr = 0;
	unsigned long flags;
	pgoff_t pgoff;

	if (mapping && !mapping_mapped(mapping)) {
@@ -328,7 +329,7 @@ void flush_dcache_page(struct page *page)
	 * declared as MAP_PRIVATE or MAP_SHARED), so we only need
	 * to flush one address here for them all to become coherent */

	flush_dcache_mmap_lock(mapping);
	flush_dcache_mmap_lock_irqsave(mapping, flags);
	vma_interval_tree_foreach(mpnt, &mapping->i_mmap, pgoff, pgoff) {
		offset = (pgoff - mpnt->vm_pgoff) << PAGE_SHIFT;
		addr = mpnt->vm_start + offset;
@@ -351,7 +352,7 @@ void flush_dcache_page(struct page *page)
			old_addr = addr;
		}
	}
	flush_dcache_mmap_unlock(mapping);
	flush_dcache_mmap_unlock_irqrestore(mapping, flags);
}
EXPORT_SYMBOL(flush_dcache_page);

+8 −3
Original line number Diff line number Diff line
@@ -138,13 +138,18 @@ void machine_power_off(void)
	/* It seems we have no way to power the system off via
	 * software. The user has to press the button himself. */

	printk(KERN_EMERG "System shut down completed.\n"
	       "Please power this system off now.");
	printk("Power off or press RETURN to reboot.\n");

	/* prevent soft lockup/stalled CPU messages for endless loop. */
	rcu_sysrq_start();
	lockup_detector_soft_poweroff();
	for (;;);
	while (1) {
		/* reboot if user presses RETURN key */
		if (pdc_iodc_getc() == 13) {
			printk("Rebooting...\n");
			machine_restart(NULL);
		}
	}
}

void (*pm_power_off)(void);
Loading