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

Commit a5d6e633 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'akpm' (fixes from Andrew)

Merge patches from Andrew Morton:
 "13 fixes"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
  mm: place page->pmd_huge_pte to right union
  MAINTAINERS: add keyboard driver to Hyper-V file list
  x86, mm: do not leak page->ptl for pmd page tables
  ipc,shm: correct error return value in shmctl (SHM_UNLOCK)
  mm, mempolicy: silence gcc warning
  block/partitions/efi.c: fix bound check
  ARM: drivers/rtc/rtc-at91rm9200.c: disable interrupts at shutdown
  mm: hugetlbfs: fix hugetlbfs optimization
  kernel: remove CONFIG_USE_GENERIC_SMP_HELPERS cleanly
  ipc,shm: fix shm_file deletion races
  mm: thp: give transparent hugepage code a separate copy_page
  checkpatch: fix "Use of uninitialized value" warnings
  configfs: fix race between dentry put and lookup
parents 78dc53c4 7aa555bf
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -63,9 +63,9 @@ levels.
PMD split lock enabling requires pgtable_pmd_page_ctor() call on PMD table
PMD split lock enabling requires pgtable_pmd_page_ctor() call on PMD table
allocation and pgtable_pmd_page_dtor() on freeing.
allocation and pgtable_pmd_page_dtor() on freeing.


Allocation usually happens in pmd_alloc_one(), freeing in pmd_free(), but
Allocation usually happens in pmd_alloc_one(), freeing in pmd_free() and
make sure you cover all PMD table allocation / freeing paths: i.e X86_PAE
pmd_free_tlb(), but make sure you cover all PMD table allocation / freeing
preallocate few PMDs on pgd_alloc().
paths: i.e X86_PAE preallocate few PMDs on pgd_alloc().


With everything in place you can set CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK.
With everything in place you can set CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK.


+1 −0
Original line number Original line Diff line number Diff line
@@ -4065,6 +4065,7 @@ F: arch/x86/include/uapi/asm/hyperv.h
F:	arch/x86/kernel/cpu/mshyperv.c
F:	arch/x86/kernel/cpu/mshyperv.c
F:	drivers/hid/hid-hyperv.c
F:	drivers/hid/hid-hyperv.c
F:	drivers/hv/
F:	drivers/hv/
F:	drivers/input/serio/hyperv-keyboard.c
F:	drivers/net/hyperv/
F:	drivers/net/hyperv/
F:	drivers/scsi/storvsc_drv.c
F:	drivers/scsi/storvsc_drv.c
F:	drivers/video/hyperv_fb.c
F:	drivers/video/hyperv_fb.c
+3 −1
Original line number Original line Diff line number Diff line
@@ -61,6 +61,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte)
#if PAGETABLE_LEVELS > 2
#if PAGETABLE_LEVELS > 2
void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
{
{
	struct page *page = virt_to_page(pmd);
	paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT);
	paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT);
	/*
	/*
	 * NOTE! For PAE, any changes to the top page-directory-pointer-table
	 * NOTE! For PAE, any changes to the top page-directory-pointer-table
@@ -69,7 +70,8 @@ void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
#ifdef CONFIG_X86_PAE
#ifdef CONFIG_X86_PAE
	tlb->need_flush_all = 1;
	tlb->need_flush_all = 1;
#endif
#endif
	tlb_remove_page(tlb, virt_to_page(pmd));
	pgtable_pmd_page_dtor(page);
	tlb_remove_page(tlb, page);
}
}


#if PAGETABLE_LEVELS > 3
#if PAGETABLE_LEVELS > 3
+3 −2
Original line number Original line Diff line number Diff line
@@ -96,6 +96,7 @@
 * - Code works, detects all the partitions.
 * - Code works, detects all the partitions.
 *
 *
 ************************************************************/
 ************************************************************/
#include <linux/kernel.h>
#include <linux/crc32.h>
#include <linux/crc32.h>
#include <linux/ctype.h>
#include <linux/ctype.h>
#include <linux/math64.h>
#include <linux/math64.h>
@@ -715,8 +716,8 @@ int efi_partition(struct parsed_partitions *state)
		efi_guid_unparse(&ptes[i].unique_partition_guid, info->uuid);
		efi_guid_unparse(&ptes[i].unique_partition_guid, info->uuid);


		/* Naively convert UTF16-LE to 7 bits. */
		/* Naively convert UTF16-LE to 7 bits. */
		label_max = min(sizeof(info->volname) - 1,
		label_max = min(ARRAY_SIZE(info->volname) - 1,
				sizeof(ptes[i].partition_name));
				ARRAY_SIZE(ptes[i].partition_name));
		info->volname[label_max] = 0;
		info->volname[label_max] = 0;
		while (label_count < label_max) {
		while (label_count < label_max) {
			u8 c = ptes[i].partition_name[label_count] & 0xff;
			u8 c = ptes[i].partition_name[label_count] & 0xff;
+4 −4
Original line number Original line Diff line number Diff line
@@ -223,7 +223,7 @@ static void null_softirq_done_fn(struct request *rq)
	blk_end_request_all(rq, 0);
	blk_end_request_all(rq, 0);
}
}


#if defined(CONFIG_SMP) && defined(CONFIG_USE_GENERIC_SMP_HELPERS)
#ifdef CONFIG_SMP


static void null_ipi_cmd_end_io(void *data)
static void null_ipi_cmd_end_io(void *data)
{
{
@@ -260,7 +260,7 @@ static void null_cmd_end_ipi(struct nullb_cmd *cmd)
	put_cpu();
	put_cpu();
}
}


#endif /* CONFIG_SMP && CONFIG_USE_GENERIC_SMP_HELPERS */
#endif /* CONFIG_SMP */


static inline void null_handle_cmd(struct nullb_cmd *cmd)
static inline void null_handle_cmd(struct nullb_cmd *cmd)
{
{
@@ -270,7 +270,7 @@ static inline void null_handle_cmd(struct nullb_cmd *cmd)
		end_cmd(cmd);
		end_cmd(cmd);
		break;
		break;
	case NULL_IRQ_SOFTIRQ:
	case NULL_IRQ_SOFTIRQ:
#if defined(CONFIG_SMP) && defined(CONFIG_USE_GENERIC_SMP_HELPERS)
#ifdef CONFIG_SMP
		null_cmd_end_ipi(cmd);
		null_cmd_end_ipi(cmd);
#else
#else
		end_cmd(cmd);
		end_cmd(cmd);
@@ -571,7 +571,7 @@ static int __init null_init(void)
{
{
	unsigned int i;
	unsigned int i;


#if !defined(CONFIG_SMP) || !defined(CONFIG_USE_GENERIC_SMP_HELPERS)
#if !defined(CONFIG_SMP)
	if (irqmode == NULL_IRQ_SOFTIRQ) {
	if (irqmode == NULL_IRQ_SOFTIRQ) {
		pr_warn("null_blk: softirq completions not available.\n");
		pr_warn("null_blk: softirq completions not available.\n");
		pr_warn("null_blk: using direct completions.\n");
		pr_warn("null_blk: using direct completions.\n");
Loading