1. 27 10月, 2016 4 次提交
    • F
      x86/cpufeature: Add RDT CPUID feature bits · 4ab15864
      Fenghua Yu 提交于
      Check CPUID leaves for all the Resource Director Technology (RDT)
      Cache Allocation Technology (CAT) bits.
      
      Presence of allocation features:
        CPUID.(EAX=7H, ECX=0):EBX[bit 15]	X86_FEATURE_RDT_A
      
      L2 and L3 caches are each separately enabled:
        CPUID.(EAX=10H, ECX=0):EBX[bit 1]	X86_FEATURE_CAT_L3
        CPUID.(EAX=10H, ECX=0):EBX[bit 2]	X86_FEATURE_CAT_L2
      
      L3 cache may support independent control of allocation for
      code and data (CDP = Code/Data Prioritization):
        CPUID.(EAX=10H, ECX=1):ECX[bit 2]	X86_FEATURE_CDP_L3
      
      [ tglx: Fixed up Borislavs comments and moved the feature bits into a gap ]
      Signed-off-by: NFenghua Yu <fenghua.yu@intel.com>
      Acked-by: N"Borislav Petkov" <bp@suse.de>
      Cc: "Ravi V Shankar" <ravi.v.shankar@intel.com>
      Cc: "Tony Luck" <tony.luck@intel.com>
      Cc: "David Carrillo-Cisneros" <davidcc@google.com>
      Cc: "Sai Prakhya" <sai.praneeth.prakhya@intel.com>
      Cc: "Peter Zijlstra" <peterz@infradead.org>
      Cc: "Stephane Eranian" <eranian@google.com>
      Cc: "Dave Hansen" <dave.hansen@intel.com>
      Cc: "Shaohua Li" <shli@fb.com>
      Cc: "Nilay Vaish" <nilayvaish@gmail.com>
      Cc: "Vikas Shivappa" <vikas.shivappa@linux.intel.com>
      Cc: "Ingo Molnar" <mingo@elte.hu>
      Cc: "H. Peter Anvin" <h.peter.anvin@intel.com>
      Link: http://lkml.kernel.org/r/1477142405-32078-5-git-send-email-fenghua.yu@intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      4ab15864
    • F
      x86/intel_cacheinfo: Enable cache id in cache info · d57e3ab7
      Fenghua Yu 提交于
      Cache id is retrieved from APIC ID and CPUID leaf 4 on x86.
      
      For more details please see the section on "Cache ID Extraction
      Parameters" in "Intel 64 Architecture Processor Topology Enumeration".
      
      Also the documentation of the CPUID instruction in the "Intel 64 and
      IA-32 Architectures Software Developer's Manual"
      Signed-off-by: NFenghua Yu <fenghua.yu@intel.com>
      Cc: "Ravi V Shankar" <ravi.v.shankar@intel.com>
      Cc: "Tony Luck" <tony.luck@intel.com>
      Cc: "David Carrillo-Cisneros" <davidcc@google.com>
      Cc: "Sai Prakhya" <sai.praneeth.prakhya@intel.com>
      Cc: "Peter Zijlstra" <peterz@infradead.org>
      Cc: "Stephane Eranian" <eranian@google.com>
      Cc: "Dave Hansen" <dave.hansen@intel.com>
      Cc: "Shaohua Li" <shli@fb.com>
      Cc: "Nilay Vaish" <nilayvaish@gmail.com>
      Cc: "Vikas Shivappa" <vikas.shivappa@linux.intel.com>
      Cc: "Ingo Molnar" <mingo@elte.hu>
      Cc: "Borislav Petkov" <bp@suse.de>
      Cc: "H. Peter Anvin" <h.peter.anvin@intel.com>
      Link: http://lkml.kernel.org/r/1477142405-32078-4-git-send-email-fenghua.yu@intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      d57e3ab7
    • F
      cacheinfo: Introduce cache id · e9a2ea5a
      Fenghua Yu 提交于
      Cache management software needs an id for each instance of a cache of
      a particular type.
      
      The current cacheinfo structure does not provide any information about
      the underlying hardware so there is no way to expose it.
      
      Hardware with cache management features provides means (cpuid, enumeration
      etc.) to retrieve the hardware id of a particular cache instance. Cache
      instances which share hardware have the same hardware id.
      
      Add an 'id' field to struct cacheinfo to store this information. Expose
      this information under the /sys/devices/system/cpu/cpu*/cache/index*/
      directory as well.
      Signed-off-by: NFenghua Yu <fenghua.yu@intel.com>
      Cc: "Ravi V Shankar" <ravi.v.shankar@intel.com>
      Cc: "Tony Luck" <tony.luck@intel.com>
      Cc: "David Carrillo-Cisneros" <davidcc@google.com>
      Cc: "Sai Prakhya" <sai.praneeth.prakhya@intel.com>
      Cc: "Peter Zijlstra" <peterz@infradead.org>
      Cc: "Stephane Eranian" <eranian@google.com>
      Cc: "Dave Hansen" <dave.hansen@intel.com>
      Cc: "Shaohua Li" <shli@fb.com>
      Cc: "Nilay Vaish" <nilayvaish@gmail.com>
      Cc: "Vikas Shivappa" <vikas.shivappa@linux.intel.com>
      Cc: "Ingo Molnar" <mingo@elte.hu>
      Cc: "Borislav Petkov" <bp@suse.de>
      Cc: "H. Peter Anvin" <h.peter.anvin@intel.com>
      Link: http://lkml.kernel.org/r/1477142405-32078-3-git-send-email-fenghua.yu@intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      e9a2ea5a
    • T
      Documentation, ABI: Document the new sysfs files for cpu cache ids · 1d78dc59
      Tony Luck 提交于
      Add an ABI document entry for /sys/devices/system/cpu/cpu*/cache/index*/id.
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      Signed-off-by: NFenghua Yu <fenghua.yu@intel.com>
      Cc: "Ravi V Shankar" <ravi.v.shankar@intel.com>
      Cc: "David Carrillo-Cisneros" <davidcc@google.com>
      Cc: "Sai Prakhya" <sai.praneeth.prakhya@intel.com>
      Cc: "Peter Zijlstra" <peterz@infradead.org>
      Cc: "Stephane Eranian" <eranian@google.com>
      Cc: "Dave Hansen" <dave.hansen@intel.com>
      Cc: "Shaohua Li" <shli@fb.com>
      Cc: "Nilay Vaish" <nilayvaish@gmail.com>
      Cc: "Vikas Shivappa" <vikas.shivappa@linux.intel.com>
      Cc: "Ingo Molnar" <mingo@elte.hu>
      Cc: "Borislav Petkov" <bp@suse.de>
      Cc: "H. Peter Anvin" <h.peter.anvin@intel.com>
      Link: http://lkml.kernel.org/r/1477142405-32078-2-git-send-email-fenghua.yu@intel.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      1d78dc59
  2. 25 10月, 2016 6 次提交
    • L
      Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 · 9fe68cad
      Linus Torvalds 提交于
      Pull crypto fix from Herbert Xu:
       "This fixes a regression caused by the stack vmalloc change"
      
      * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
        hwrng: core - Don't use a stack buffer in add_early_randomness()
      9fe68cad
    • L
      Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux · b5cd8917
      Linus Torvalds 提交于
      Pull clk fixes from Stephen Boyd:
       "This is the first batch of clk driver fixes for this release.
      
        We have a handful of fixes for the uniphier clk driver that was
        introduced recently, as well as Kconfig option hiding, module
        autoloading markings, and a few fixes for clk_hw based registration
        patches that went in this merge window"
      
      * tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
        clk: at91: Fix a return value in case of error
        clk: uniphier: rename MIO clock to SD clock for Pro5, PXs2, LD20 SoCs
        clk: uniphier: fix memory overrun bug
        clk: hi6220: use CLK_OF_DECLARE_DRIVER for sysctrl and mediactrl clock init
        clk: mvebu: armada-37xx-periph: Fix the clock gate flag
        clk: bcm2835: Clamp the PLL's requested rate to the hardware limits.
        clk: max77686: fix number of clocks setup for clk_hw based registration
        clk: mvebu: armada-37xx-periph: Fix the clock provider registration
        clk: core: add __init decoration for CLK_OF_DECLARE_DRIVER function
        clk: mediatek: Add hardware dependency
        clk: samsung: clk-exynos-audss: Fix module autoload
        clk: uniphier: fix type of variable passed to regmap_read()
        clk: uniphier: add system clock support for sLD3 SoC
      b5cd8917
    • L
      Merge tag 'gpio-v4.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio · 1ce5bdb8
      Linus Torvalds 提交于
      Pull GPIO fixes from Linus Walleij:
       "Here is a set of GPIO fixes for the v4.9 kernel series:
      
         - Fix up off-by one and line offset validation, info leak to
           userspace, and reject invalid flags. Those are especially valuable
           hardening patches from Lars-Peter Clausen, all tagged for stable.
      
         - Fix module autoload for TS4800 and ATH79.
      
         - Correct the IRQ handler for MPC8xxx to use handle_level_irq() as it
           (a) reacts to edges not levels and (b) even implements .irq_ack().
           We were missing IRQs here.
      
         - Fix the error path for acpi_dev_gpio_irq_get()
      
         - Fix a memory leak in the MXS driver.
      
         - Fix an annoying typo in the STMPE driver.
      
         - Put a dependency on sysfs to the mockup driver"
      
      * tag 'gpio-v4.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
        gpio: mpc8xxx: Correct irq handler function
        gpio: ath79: Fix module autoload
        gpio: ts4800: Fix module autoload
        gpio: GPIO_GET_LINEEVENT_IOCTL: Reject invalid line and event flags
        gpio: GPIO_GET_LINEHANDLE_IOCTL: Reject invalid line flags
        gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak
        gpio: GPIO_GET_LINEEVENT_IOCTL: Validate line offset
        gpio: GPIOHANDLE_GET_LINE_VALUES_IOCTL: Fix information leak
        gpio: GPIO_GET_LINEHANDLE_IOCTL: Validate line offset
        gpio: GPIO_GET_CHIPINFO_IOCTL: Fix information leak
        gpio: GPIO_GET_CHIPINFO_IOCTL: Fix line offset validation
        gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get()
        gpio: mockup: add sysfs dependency
        gpio: stmpe: || vs && typo
        gpio: mxs: Unmap region obtained by of_iomap
        gpio/board.txt: point to gpiod_set_value
      1ce5bdb8
    • L
      Merge tag 'for-linus-4.9-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip · aa34e07e
      Linus Torvalds 提交于
      Pull xen fixes from David Vrabel:
      
       - advertise control feature flags in xenstore
      
       - fix x86 build when XEN_PVHVM is disabled
      
      * tag 'for-linus-4.9-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
        xenbus: check return value of xenbus_scanf()
        xenbus: prefer list_for_each()
        x86: xen: move cpu_up functions out of ifdef
        xenbus: advertise control feature flags
      aa34e07e
    • L
      mm: unexport __get_user_pages() · 0d731759
      Lorenzo Stoakes 提交于
      This patch unexports the low-level __get_user_pages() function.
      
      Recent refactoring of the get_user_pages* functions allow flags to be
      passed through get_user_pages() which eliminates the need for access to
      this function from its one user, kvm.
      
      We can see that the two calls to get_user_pages() which replace
      __get_user_pages() in kvm_main.c are equivalent by examining their call
      stacks:
      
        get_user_page_nowait():
          get_user_pages(start, 1, flags, page, NULL)
          __get_user_pages_locked(current, current->mm, start, 1, page, NULL, NULL,
      			    false, flags | FOLL_TOUCH)
          __get_user_pages(current, current->mm, start, 1,
      		     flags | FOLL_TOUCH | FOLL_GET, page, NULL, NULL)
      
        check_user_page_hwpoison():
          get_user_pages(addr, 1, flags, NULL, NULL)
          __get_user_pages_locked(current, current->mm, addr, 1, NULL, NULL, NULL,
      			    false, flags | FOLL_TOUCH)
          __get_user_pages(current, current->mm, addr, 1, flags | FOLL_TOUCH, NULL,
      		     NULL, NULL)
      Signed-off-by: NLorenzo Stoakes <lstoakes@gmail.com>
      Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
      Acked-by: NMichal Hocko <mhocko@suse.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      0d731759
    • L
      proc: don't use FOLL_FORCE for reading cmdline and environment · 272ddc8b
      Linus Torvalds 提交于
      Now that Lorenzo cleaned things up and made the FOLL_FORCE users
      explicit, it becomes obvious how some of them don't really need
      FOLL_FORCE at all.
      
      So remove FOLL_FORCE from the proc code that reads the command line and
      arguments from user space.
      
      The mem_rw() function actually does want FOLL_FORCE, because gdd (and
      possibly many other debuggers) use it as a much more convenient version
      of PTRACE_PEEKDATA, but we should consider making the FOLL_FORCE part
      conditional on actually being a ptracer.  This does not actually do
      that, just moves adds a comment to that effect and moves the gup_flags
      settings next to each other.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      272ddc8b
  3. 24 10月, 2016 12 次提交
  4. 23 10月, 2016 5 次提交
  5. 22 10月, 2016 13 次提交
    • V
      x86/boot/smp: Don't try to poke disabled/non-existent APIC · ff856051
      Ville Syrjälä 提交于
      Apparently trying to poke a disabled or non-existent APIC
      leads to a box that doesn't even boot. Let's not do that.
      
      No real clue if this is the right fix, but at least my
      P3 machine boots again.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Juergen Gross <jgross@suse.com>
      Cc: Len Brown <len.brown@intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Prarit Bhargava <prarit@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Yinghai Lu <yinghai@kernel.org>
      Cc: dyoung@redhat.com
      Cc: kexec@lists.infradead.org
      Cc: stable@vger.kernel.org
      Fixes: 2a51fe08 ("arch/x86: Handle non enumerated CPU after physical hotplug")
      Link: http://lkml.kernel.org/r/1477102684-5092-1-git-send-email-ville.syrjala@linux.intel.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
      ff856051
    • L
      Merge tag 'powerpc-4.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux · dcd4693c
      Linus Torvalds 提交于
      Pull powerpc fixes from Michael Ellerman:
       "Fixes marked for stable:
         - Prevent unlikely crash in copro_calculate_slb() (Frederic Barrat)
         - cxl: Prevent adapter reset if an active context exists (Vaibhav Jain)
      
        Fixes for code merged this cycle:
         - Fix boot on systems with uncompressed kernel image (Heiner Kallweit)
         - Drop dump_numa_memory_topology() (Michael Ellerman)
         - Fix numa topology console print (Aneesh Kumar K.V)
         - Ignore the pkey system calls for now (Stephen Rothwell)"
      
      * tag 'powerpc-4.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
        powerpc: Ignore the pkey system calls for now
        powerpc: Fix numa topology console print
        powerpc/mm: Drop dump_numa_memory_topology()
        cxl: Prevent adapter reset if an active context exists
        powerpc/boot: Fix boot on systems with uncompressed kernel image
        powerpc/mm: Prevent unlikely crash in copro_calculate_slb()
      dcd4693c
    • L
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · a23b27ae
      Linus Torvalds 提交于
      Pull KVM fixes from Radim Krčmář:
       "ARM:
         - avoid livelock when walking guest page tables
         - fix HYP mode static keys without CC_HAVE_ASM_GOTO
      
        MIPS:
         - fix a build error without TRACEPOINTS_ENABLED
      
        s390:
         - reject a malformed userspace configuration
      
        x86:
         - suppress a warning without CONFIG_CPU_FREQ
         - initialize whole irq_eoi array"
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
        arm/arm64: KVM: Map the BSS at HYP
        arm64: KVM: Take S1 walks into account when determining S2 write faults
        KVM: s390: reject invalid modes for runtime instrumentation
        kvm: x86: memset whole irq_eoi
        kvm/x86: Fix unused variable warning in kvm_timer_init()
        KVM: MIPS: Add missing uaccess.h include
      a23b27ae
    • L
      Merge tag 'nfs-for-4.9-2' of git://git.linux-nfs.org/projects/anna/linux-nfs · 02593ac6
      Linus Torvalds 提交于
      Pull NFS client bugfixes from Anna Schumaker:
       "Just two bugfixes this time:
      
        Stable bugfix:
         - Fix last_write_offset incorrectly set to page boundary
      
        Other bugfix:
         - Fix missing-braces warning"
      
      * tag 'nfs-for-4.9-2' of git://git.linux-nfs.org/projects/anna/linux-nfs:
        nfs4: fix missing-braces warning
        pnfs/blocklayout: fix last_write_offset incorrectly set to page boundary
      02593ac6
    • L
      Merge tag 'acpi-4.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · 43ef55da
      Linus Torvalds 提交于
      Pull ACPI fixes from Rafael Wysocki:
       "These fix an issue related to system resume in the new WDAT-based
        watchdog driver and a return value of a stub function in the ACPI CPPC
        framework.
      
        Specifics:
      
         - Update the ACPI WDAT-based watchdog driver to ping the hardware
           during system resume to prevent a reset from occurring after the
           resume is complete (Mika Westerberg).
      
         - Fix the return value of the pcc_mbox_request_channel() stub for
           CONFIG_PCC unset (Hoan Tran)"
      
      * tag 'acpi-4.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
        watchdog: wdat_wdt: Ping the watchdog on resume
        mailbox: PCC: Fix return value of pcc_mbox_request_channel()
      43ef55da
    • R
      Merge branches 'acpi-wdat' and 'acpi-cppc' · 956c8974
      Rafael J. Wysocki 提交于
      * acpi-wdat:
        watchdog: wdat_wdt: Ping the watchdog on resume
      
      * acpi-cppc:
        mailbox: PCC: Fix return value of pcc_mbox_request_channel()
      956c8974
    • T
      Merge tag 'gic-fixes-for-4.9-rc2' of... · a442950d
      Thomas Gleixner 提交于
      Merge tag 'gic-fixes-for-4.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent
      
      Pull GIC updates from Marc Zyngier:
      
       - Fix for 32bit accesses that should be 64bit on 64bit machines
       - Fix for a field decoding macro
       - Beautify a warning message
      a442950d
    • L
      Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · 6edc51a8
      Linus Torvalds 提交于
      Pull SCSI fixes from James Bottomley:
       "Five small fixes.
      
        Some of these, like the nested spinlock overwriting saved flags and
        the Kasan use after free look serious, but they seem not to have been
        picked up in testing or seen in the field.
      
        The biggest user visible issue is probably the wrong device handler
        for Clariion, which means that alua doesn't bind to the array like it
        should"
      
      * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
        scsi: ipr: Fix async error WARN_ON
        scsi: zfcp: spin_lock_irqsave() is not nestable
        scsi: Remove one useless stack variable
        scsi: Fix use-after-free
        scsi: Replace wrong device handler name for CLARiiON arrays
      6edc51a8
    • L
      Merge branch 'for-linus' of git://git.kernel.dk/linux-block · ecd06f28
      Linus Torvalds 提交于
      Pull block fixes from Jens Axboe:
       "A set of fixes that missed the merge window, mostly due to me being
        away around that time.
      
        Nothing major here, a mix of nvme cleanups and fixes, and one fix for
        the badblocks handling"
      
      * 'for-linus' of git://git.kernel.dk/linux-block:
        nvmet: use symbolic constants for CNS values
        nvme: use symbolic constants for CNS values
        nvme.h: add an enum for cns values
        nvme.h: don't use uuid_be
        nvme.h: resync with nvme-cli
        nvme: Add tertiary number to NVME_VS
        nvme : Add sysfs entry for NVMe CMBs when appropriate
        nvme: don't schedule multiple resets
        nvme: Delete created IO queues on reset
        nvme: Stop probing a removed device
        badblocks: fix overlapping check for clearing
      ecd06f28
    • L
      Merge tag 'pci-v4.9-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci · e59f30b4
      Linus Torvalds 提交于
      Pull PCI fixes from Bjorn Helgaas:
       "This includes:
      
         - Fix for a Layerscape driver issue that causes a use-before-set
           crash
      
         - Maintainer update for the Synopsis prototyping device driver"
      
      * tag 'pci-v4.9-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
        PCI: designware-plat: Update author email address
        PCI: layerscape: Fix drvdata usage before assignment
        PCI: designware-plat: Change maintainer to Jose Abreu
      e59f30b4
    • R
      Merge tag 'kvm-arm-for-4.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm · 658f7c4b
      Radim Krčmář 提交于
      KVM/ARM updates for 4.9-rc2
      
      - Handle faults generated by the page table walker as being writes
      - Map the BSS at EL2
      658f7c4b
    • M
      arm/arm64: KVM: Map the BSS at HYP · c8ea0395
      Marc Zyngier 提交于
      When used with a compiler that doesn't implement "asm goto"
      (such as the AArch64 port of GCC 4.8), jump labels generate a
      memory access to find out about the value of the key (instead
      of just patching the code). The key itself is likely to be
      stored in the BSS.
      
      This is perfectly fine, except that we don't map the BSS at HYP,
      leading to an exploding kernel at the first access. The obvious
      fix is simply to map the BSS there (which should have been done
      a long while ago, but hey...).
      Reported-by: NEric Auger <eric.auger@redhat.com>
      Tested-by: NEric Auger <eric.auger@redhat.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      c8ea0395
    • W
      arm64: KVM: Take S1 walks into account when determining S2 write faults · 60e21a0e
      Will Deacon 提交于
      The WnR bit in the HSR/ESR_EL2 indicates whether a data abort was
      generated by a read or a write instruction. For stage 2 data aborts
      generated by a stage 1 translation table walk (i.e. the actual page
      table access faults at EL2), the WnR bit therefore reports whether the
      instruction generating the walk was a load or a store, *not* whether the
      page table walker was reading or writing the entry.
      
      For page tables marked as read-only at stage 2 (e.g. due to KSM merging
      them with the tables from another guest), this could result in livelock,
      where a page table walk generated by a load instruction attempts to
      set the access flag in the stage 1 descriptor, but fails to trigger
      CoW in the host since only a read fault is reported.
      
      This patch modifies the arm64 kvm_vcpu_dabt_iswrite function to
      take into account stage 2 faults in stage 1 walks. Since DBM cannot be
      disabled at EL2 for CPUs that implement it, we assume that these faults
      are always causes by writes, avoiding the livelock situation at the
      expense of occasional, spurious CoWs.
      
      We could, in theory, do a bit better by checking the guest TCR
      configuration and inspecting the page table to see why the PTE faulted.
      However, I doubt this is measurable in practice, and the threat of
      livelock is real.
      
      Cc: <stable@vger.kernel.org>
      Cc: Julien Grall <julien.grall@arm.com>
      Reviewed-by: NMarc Zyngier <marc.zyngier@arm.com>
      Reviewed-by: NChristoffer Dall <christoffer.dall@linaro.org>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      60e21a0e