Merge v4.14.10 into chromeos-4.14 |
||||
Issue descriptionMerge v4.14.10 into chromeos-4.14
,
Jan 4 2018
,
Jan 5 2018
The following revision refers to this bug: https://chromium.googlesource.com/chromiumos/third_party/kernel/+/70a3f165923f65f4c88ebc60e3d41882b7fafadf commit 70a3f165923f65f4c88ebc60e3d41882b7fafadf Author: Guenter Roeck <groeck@chromium.org> Date: Fri Jan 05 16:34:57 2018 CHROMIUM: Merge 'v4.14.10' into chromeos-4.14 Merge of v4.14.10 into chromeos-4.14 Changelog: ---------------------------------------------------------------- Alan Brady (1): i40e: fix client notify of VF reset Alex Williamson (1): vfio/pci: Virtualize Maximum Payload Size Alexandre Belloni (1): rtc: set the alarm to the next expiring timer Andi Kleen (6): bitops: Add clear/set_bit32() to linux/bitops.h x86/cpuid: Add generic table for CPUID dependencies x86/fpu: Parse clearcpuid= as early XSAVE argument x86/fpu: Make XSAVE check the base CPUID features before enabling x86/fpu: Remove the explicit clearing of XSAVE dependent features perf/x86: Enable free running PEBS for REGS_USER/INTR Andrew Jeffery (1): leds: pca955x: Don't invert requested value in pca955x_gpio_set_value() Andrey Ryabinin (2): x86/kasan: Use the same shadow offset for 4- and 5-level paging x86/mm/kasan: Don't use vmemmap_populate() to initialize shadow Andy Lutomirski (45): x86/entry/64: Remove the restore_c_regs_and_iret label x86/entry/64: Split the IRET-to-user and IRET-to-kernel paths x86/entry/64: Move SWAPGS into the common IRET-to-usermode path x86/entry/64: Simplify reg restore code in the standard IRET paths x86/entry/64: Shrink paranoid_exit_restore and make labels local x86/entry/64: Use pop instead of movq in syscall_return_via_sysret x86/entry/64: Merge the fast and slow SYSRET paths x86/entry/64: Use POP instead of MOV to restore regs on NMI return x86/entry/64: Remove the RESTORE_..._REGS infrastructure x86/entry/64: De-Xen-ify our NMI code x86/entry/32: Pull the MSR_IA32_SYSENTER_CS update code out of native_load_sp0() x86/entry/64: Pass SP0 directly to load_sp0() x86/entry: Add task_top_of_stack() to find the top of a task's stack x86/xen/64, x86/entry/64: Clean up SP code in cpu_initialize_context() x86/entry/64: Stop initializing TSS.sp0 at boot x86/entry/64: Remove all remaining direct thread_struct::sp0 reads x86/entry/32: Fix cpu_current_top_of_stack initialization at boot x86/entry/64: Remove thread_struct::sp0 x86/traps: Use a new on_thread_stack() helper to clean up an assertion selftests/x86/ldt_gdt: Add infrastructure to test set_thread_area() selftests/x86/ldt_gdt: Run most existing LDT test cases against the GDT as well x86/unwinder/orc: Dont bail on stack overflow x86/irq: Remove an old outdated comment about context tracking races x86/irq/64: Print the offending IP in the stack overflow warning x86/entry/64: Allocate and enable the SYSENTER stack x86/dumpstack: Add get_stack_info() support for the SYSENTER stack x86/entry/gdt: Put per-CPU GDT remaps in ascending order x86/mm/fixmap: Generalize the GDT fixmap mechanism, introduce struct cpu_entry_area x86/kasan/64: Teach KASAN about the cpu_entry_area x86/entry: Fix assumptions that the HW TSS is at the beginning of cpu_tss x86/dumpstack: Handle stack overflow on all stacks x86/entry: Move SYSENTER_stack to the beginning of struct tss_struct x86/entry: Remap the TSS into the CPU entry area x86/entry/64: Separate cpu_current_top_of_stack from TSS.sp0 x86/espfix/64: Stop assuming that pt_regs is on the entry stack x86/entry/64: Use a per-CPU trampoline stack for IDT entries x86/entry/64: Return to userspace from the trampoline stack x86/entry/64: Create a per-CPU SYSCALL entry trampoline x86/entry/64: Move the IST stacks into struct cpu_entry_area x86/entry/64: Remove the SYSENTER stack canary x86/entry: Clean up the SYSENTER_stack code x86/entry/64: Make cpu_entry_area.tss read-only x86/vsyscall/64: Explicitly set _PAGE_USER in the pagetable hierarchy x86/vsyscall/64: Warn and fail vsyscall emulation in NATIVE mode x86/mm/64: Improve the memory map documentation Arvind Yadav (1): staging: greybus: light: Release memory obtained by kasprintf Baoquan He (1): x86/mm/64: Rename the register_page_bootmem_memmap() 'size' parameter to 'nr_pages' Boris Ostrovsky (1): x86/entry/64/paravirt: Use paravirt-safe macro to access eflags Borislav Petkov (2): x86/entry/64: Shorten TEST instructions x86/mm: Define _PAGE_TABLE using _KERNPG_TABLE Chen-Yu Tsai (4): clk: sunxi-ng: nm: Check if requested rate is supported by fractional clock clk: sunxi-ng: sun5i: Fix bit offset of audio PLL post-divider clk: sunxi-ng: sun6i: Rename HDMI DDC clock to avoid name collision clk: sunxi: sun9i-mmc: Implement reset callback for reset controls Chris Wilson (1): drm/i915: Flush pending GTT writes before unbinding Christian Lamparter (1): crypto: crypto4xx - increase context and scatter ring buffer elements Christophe JAILLET (1): igb: check memory allocation failure Christophe Jaillet (1): crypto: lrw - Fix an error handling path in 'create()' Colin Ian King (1): IB/rxe: check for allocation failure on elem Cédric Le Goater (1): KVM: PPC: Book3S: fix XIVE migration of pending interrupts Dan Murphy (1): net: phy: at803x: Change error to EINVAL for invalid MAC Dan Williams (3): acpi, nfit: fix health event notification libnvdimm, dax: fix 1GB-aligned namespaces vs physical misalignment libnvdimm, pfn: fix start_pad handling for aligned namespaces Daniel Borkmann (15): bpf: fix build issues on um due to mising bpf_perf_event.h bpf: fix branch pruning logic bpf: fix corruption on concurrent perf_event_output calls bpf, s390x: do not reload skb pointers in non-skb context bpf, ppc64: do not reload skb pointers in non-skb context bpf, sparc: fix usage of wrong reg for load_skb_regs after call bpf/verifier: fix bounds calculation on BPF_RSH bpf: fix incorrect sign extension in check_alu_op() bpf: fix incorrect tracking of register size truncation bpf: fix 32-bit ALU op verification bpf: fix missing error return in check_stack_boundary() bpf: force strict alignment checks for stack pointers bpf: don't prune branches when a scalar is replaced with a pointer bpf: fix integer overflows selftests/bpf: add tests for recent bugfixes Daniel Lezcano (4): thermal/drivers/hisi: Fix missing interrupt enablement thermal/drivers/hisi: Fix kernel panic on alarm interrupt thermal/drivers/hisi: Simplify the temperature/step computation thermal/drivers/hisi: Fix multiple alarm interrupts firing Dave Hansen (4): x86/entry: Rename SYSENTER_stack to CPU_ENTRY_AREA_entry_stack x86/mm: Move the CR3 construction functions to tlbflush.h x86/mm: Remove hard-coded ASID limit checks x86/mm: Put MMU to hardware ASID translation in one place David Daney (1): PCI: Avoid bus reset if bridge itself is broken Derek Basehore (1): backlight: pwm_bl: Fix overflow condition Dick Kennedy (3): scsi: lpfc: Fix secure firmware updates scsi: lpfc: PLOGI failures during NPIV testing scsi: lpfc: Fix warning messages when NVME_TARGET_FC not defined Dongjiu Geng (1): ACPI / APEI: remove the unused dead-code for SEA/NMI notification type Ed Blake (1): ASoC: img-parallel-out: Add pm_runtime_get/put to set_fmt callback Emil Tantilov (1): ixgbe: fix use of uninitialized padding Eric Anholt (1): drm/vc4: Avoid using vrefresh==0 mode in DSI htotal math. Eric Biggers (1): crypto: skcipher - set walk.iv for zero-length inputs Fabio Estevam (1): PM / OPP: Move error message to debug level Gabriele Paoloni (1): PCI/AER: Report non-fatal errors only to the affected endpoint Gayatri Kammela (1): x86/cpufeatures: Enable new SSE/AVX/AVX512 CPU features Greg Kroah-Hartman (3): Linux 4.14.9 Revert "ipv6: grab rt->rt6i_ref before allocating pcpu rt" Linux 4.14.10 Guenter Roeck (1): Merge remote-tracking branch 'origin/linux/v4.14.10' into merge/chromeos-4.14-v4.14.10 Guneshwor Singh (1): ALSA: hda - Add vendor id for Cannonlake HDMI codec Guoqing Jiang (1): md: always set THREAD_WAKEUP and wake up wqueue if thread existed Hans de Goede (2): Bluetooth: hci_uart_set_flow_control: Fix NULL deref when using serdev Bluetooth: hci_bcm: Fix setting of irq trigger type Helge Deller (3): parisc: Align os_hpmc_size on word boundary parisc: Fix indenting in puts() parisc: Hide Diva-built-in serial aux and graphics card Hoang Tran (1): tcp: fix under-evaluated ssthresh in TCP Vegas Ingo Molnar (5): x86/unwinder: Make CONFIG_UNWINDER_ORC=y the default in the 64-bit defconfig x86/cpufeatures: Re-tabulate the X86_FEATURE definitions x86/cpufeatures: Fix various details in the feature definitions drivers/misc/intel/pti: Rename the header file to free up the namespace tools/headers: Sync objtool UAPI header Jacob Keller (3): i40e/i40evf: spread CPU affinity hints across online CPUs only fm10k: fix mis-ordered parameters in declaration for .ndo_set_vf_bw fm10k: ensure we process SM mbx when processing VF mbx James Morse (1): ACPI / APEI: Replace ioremap_page_range() with fixmap Jan Beulich (1): ACPI / APEI: adjust a local variable type in ghes_ioremap_pfn_irq() Jean-François Têtu (1): ASoC: codecs: msm8916-wcd-analog: fix micbias level Jens Axboe (1): block: unalign call_single_data in struct request Jens Wiklander (1): optee: fix invalid of_node_put() in optee_driver_init() Johan Hovold (2): mfd: twl4030-audio: Fix sibling-node lookup mfd: twl6040: Fix child-node lookup John David Anglin (1): Revert "parisc: Re-enable interrupts early" John Einar Reitan (1): Revert "ipmi_si: fix memory leak on new_smi" Jon Hunter (1): mfd: cros ec: spi: Don't send first message too soon Josh Poimboeuf (15): objtool: Don't report end of section error after an empty unwind hint x86/head: Remove confusing comment x86/head: Remove unused 'bad_address' code x86/head: Fix head ELF function annotations x86/boot: Annotate verify_cpu() as a callable function x86/xen: Fix xen head ELF annotations x86/xen: Add unwind hint annotations x86/head: Add unwind hint annotations x86/unwind: Rename unwinder config options to 'CONFIG_UNWINDER_*' x86/unwind: Make CONFIG_UNWINDER_ORC=y the default in kconfig for 64-bit x86/asm: Don't use the confusing '.ifeq' directive x86/unwinder: Handle stack overflows more gracefully objtool: Move synced files to their original relative locations objtool: Move kernel headers/code sync check to a script objtool: Fix cross-build Juergen Gross (3): xen, x86/entry/64: Add xen NMI trap entry x86/virt, x86/platform: Merge 'struct x86_hyper' into 'struct x86_platform' and 'struct x86_init' x86/virt: Add enum for hypervisors to replace x86_hyper Julien Thierry (1): arm64: kvm: Prevent restoring stale PMSCR_EL1 for vcpu Jussi Laako (1): ALSA: usb-audio: Add native DSD support for Esoteric D-05X Kailang Yang (1): ALSA: hda/realtek - Fix Dell AIO LineOut issue Kamalesh Babulal (1): objtool: Print top level commands on incorrect usage Kees Cook (1): x86/platform/UV: Convert timers to use timer_setup() Kirill A. Shutemov (4): mm/sparsemem: Allocate mem_section at runtime for CONFIG_SPARSEMEM_EXTREME=y x86/xen: Provide pre-built page tables only for CONFIG_XEN_PV=y and CONFIG_XEN_PVH=y x86/xen: Drop 5-level paging support code from the XEN_PV code mm/sparsemem: Fix ARM64 boot crash when CONFIG_SPARSEMEM_EXTREME=y Laurent Vivier (1): KVM: PPC: Book3S HV: Fix pending_pri value in kvmppc_xive_get_icp() Lihong Yang (1): i40e: use the safe hash table iterator when deleting mac filters Lorenzo Bianconi (1): iio: st_sensors: add register mask for status register Luca Miccio (1): block,bfq: Disable writeback throttling Marc Zyngier (1): KVM: arm/arm64: Fix HYP unmapping going off limits Marcelo Ricardo Leitner (1): sctp: silence warns on sctp_stream_init allocations Marek Szyprowski (1): ARM: exynos_defconfig: Enable UAS support for Odroid HC1 board Masahiro Yamada (1): x86/build: Beautify build log of syscall headers Maxime Chevallier (1): spi: a3700: Fix clk prescaling for coefficient over 15 Maxime Ripard (1): drm/sun4i: Fix error path handling Mick Tarsel (1): ibmvnic: Set state UP Mika Westerberg (1): pinctrl: cherryview: Mask all interrupts on Intel_Strago based systems Mike Manning (1): net: ipv6: send NS for DAD when link operationally up Mikulas Patocka (1): objtool: Fix 64-bit build on 32-bit host Nicholas Piggin (3): powerpc/xmon: Avoid tripping SMP hardlockup watchdog powerpc/watchdog: Do not trigger SMP crash from touch_nmi_watchdog cpuidle: fix broadcast control when broadcast can not be entered Nicolas Dechesne (1): ASoC: codecs: msm8916-wcd-analog: fix module autoload Niranjana Vishwanathapura (1): IB/opa_vnic: Properly return the total MACs in UC MAC list Paolo Bonzini (1): kvm: x86: fix RSM when PCID is non-zero Peter Hutterer (1): platform/x86: asus-wireless: send an EV_SYN/SYN_REPORT between state changes Peter Zijlstra (8): x86/ldt: Rework locking x86/doc: Remove obvious weirdnesses from the x86 MM layout documentation x86/uv: Use the right TLB-flush API x86/microcode: Dont abuse the TLB-flush interface x86/mm: Use __flush_tlb_one() for kernel memory x86/mm: Remove superfluous barriers x86/mm: Add comments to clarify which TLB-flush functions are supposed to flush what x86/mm: Create asm/invpcid.h Rafael J. Wysocki (1): PCI / PM: Force devices to D0 in pci_pm_thaw_noirq() Randy Dunlap (1): x86/decoder: Fix and update the opcodes map Ravi Bangoria (1): powerpc/perf: Dereference BHRB entries safely Ricardo Neri (5): x86/mm: Relocate page fault error codes to traps.h x86/boot: Relocate definition of the initial state of CR0 ptrace,x86: Make user_64bit_mode() available to 32-bit builds x86/cpufeature: Add User-Mode Instruction Prevention definitions x86/insn-eval: Add utility functions to get segment selector Ricardo Ribalda Delgado (1): spi: xilinx: Detect stall with Unknown commands Rudolf Marek (1): x86: Make X86_BUG_FXSAVE_LEAK detectable in CPUID on AMD Russell King (1): rtc: pl031: make interrupt optional Scott Franco (1): IB/opa_vnic: Properly clear Mac Table Digest Sebastian Andrzej Siewior (1): crypto: mcryptd - protect the per-CPU queue with a lock Shakeel Butt (1): kvm, mm: account kvm related kmem slabs to kmemcg Shaohua Li (1): block-throttle: avoid double charge Shashank Sharma (1): drm: Add retries for lspcon mode detection Sreekanth Reddy (1): scsi: mpt3sas: Fix IO error occurs on pulling out a drive from RAID1 volume created on two SATA drive Stephan Mueller (2): crypto: af_alg - wait for data at beginning of recvmsg crypto: af_alg - fix race accessing cipher request Steven Rostedt (VMware) (1): x86/fpu/debug: Remove unused 'x86_fpu_state' and 'x86_fpu_deactivate_state' tracepoints Stuart Hayes (1): PCI: Create SR-IOV virtfn/physfn links before attaching driver Takashi Iwai (3): ACPI: APEI / ERST: Fix missing error handling in erst_reader() ALSA: rawmidi: Avoid racy info ioctl via ctl device ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU Thomas Gleixner (15): x86/cpuid: Prevent out of bound access in do_clear_cpu_cap() x86/cpuid: Replace set/clear_bit32() bitops: Revert cbe96375025e ("bitops: Add clear/set_bit32() to linux/bitops.h") x86/paravirt: Dont patch flush_tlb_single x86/paravirt: Provide a way to check for hypervisors x86/cpufeatures: Make CPU bugs sticky x86/Kconfig: Limit NR_CPUS on 32-bit to a sane amount x86/mm/dump_pagetables: Check PAGE_PRESENT for real x86/mm/dump_pagetables: Make the address hints correct and readable arch, mm: Allow arch_dup_mmap() to fail x86/ldt: Prevent LDT inheritance on exec x86/cpu_entry_area: Move it to a separate unit x86/cpu_entry_area: Move it out of the fixmap init: Invoke init_espfix_bsp() from mm_init() x86/cpu_entry_area: Prevent wraparound in setup_cpu_entry_area_ptes() on 32bit Tom Zanussi (1): tracing: Exclude 'generic fields' from histograms Uros Bizjak (1): x86/asm: Remove unnecessary \n\t in front of CC_SET() from asm templates Varun Prakash (1): scsi: cxgb4i: fix Tx skb leak Vishal Verma (1): libnvdimm, btt: Fix an incompatibility in the log layout Wanpeng Li (2): KVM: MMU: Fix infinite loop when there is no available mmu page KVM: X86: Fix load RFLAGS w/o the fixed bit Wei Hu(Xavier) (1): RDMA/hns: Avoid NULL pointer exception Wei Wang (1): ipv6: grab rt->rt6i_ref before allocating pcpu rt Will Deacon (3): locking/barriers: Add implicit smp_read_barrier_depends() to READ_ONCE() locking/barriers: Convert users of lockless_dereference() to READ_ONCE() linux/compiler.h: Split into compiler.h and compiler_types.h William Tu (1): ip_gre: check packet length and mtu correctly in erspan tx Yelena Krivosheev (3): net: mvneta: clear interface link status on port disable net: mvneta: use proper rxq_number in loop on rx queues net: mvneta: eliminate wrong call to handle rx descriptor error Documentation/x86/orc-unwinder.txt | 2 +- Documentation/x86/x86_64/mm.txt | 26 +- Makefile | 6 +- arch/arm/configs/exynos_defconfig | 2 +- arch/arm/include/asm/ptrace.h | 3 +- arch/arm64/include/asm/fixmap.h | 7 + arch/arm64/kvm/hyp/debug-sr.c | 3 + arch/parisc/boot/compressed/misc.c | 4 +- arch/parisc/kernel/entry.S | 12 +- arch/parisc/kernel/hpmc.S | 1 + arch/powerpc/include/asm/mmu_context.h | 5 +- arch/powerpc/kernel/watchdog.c | 7 +- arch/powerpc/kvm/book3s_xive.c | 7 +- arch/powerpc/net/bpf_jit_comp64.c | 6 +- arch/powerpc/perf/core-book3s.c | 8 +- arch/powerpc/xmon/xmon.c | 17 +- arch/s390/net/bpf_jit_comp.c | 11 +- arch/sparc/include/asm/ptrace.h | 1 + arch/sparc/net/bpf_jit_comp_64.c | 6 +- arch/um/include/asm/Kbuild | 1 + arch/um/include/asm/mmu_context.h | 3 +- arch/um/include/shared/init.h | 2 +- arch/unicore32/include/asm/mmu_context.h | 5 +- arch/x86/Kconfig | 8 +- arch/x86/Kconfig.debug | 39 +- arch/x86/configs/tiny.config | 4 +- arch/x86/configs/x86_64_defconfig | 1 + arch/x86/entry/calling.h | 69 +-- arch/x86/entry/entry_32.S | 14 +- arch/x86/entry/entry_64.S | 322 +++++++++--- arch/x86/entry/entry_64_compat.S | 10 +- arch/x86/entry/syscalls/Makefile | 4 +- arch/x86/entry/vsyscall/vsyscall_64.c | 38 +- arch/x86/events/core.c | 2 +- arch/x86/events/intel/core.c | 4 + arch/x86/events/perf_event.h | 24 +- arch/x86/hyperv/hv_init.c | 2 +- arch/x86/include/asm/archrandom.h | 8 +- arch/x86/include/asm/bitops.h | 10 +- arch/x86/include/asm/compat.h | 1 + arch/x86/include/asm/cpu_entry_area.h | 68 +++ arch/x86/include/asm/cpufeature.h | 11 +- arch/x86/include/asm/cpufeatures.h | 538 ++++++++++---------- arch/x86/include/asm/desc.h | 12 +- arch/x86/include/asm/espfix.h | 7 +- arch/x86/include/asm/fixmap.h | 13 +- arch/x86/include/asm/hypervisor.h | 53 +- arch/x86/include/asm/inat.h | 10 + arch/x86/include/asm/invpcid.h | 53 ++ arch/x86/include/asm/irqflags.h | 3 + arch/x86/include/asm/kdebug.h | 1 + arch/x86/include/asm/mmu.h | 4 +- arch/x86/include/asm/mmu_context.h | 58 +-- arch/x86/include/asm/module.h | 2 +- arch/x86/include/asm/paravirt.h | 14 +- arch/x86/include/asm/paravirt_types.h | 2 +- arch/x86/include/asm/percpu.h | 2 +- arch/x86/include/asm/pgtable_32_types.h | 15 +- arch/x86/include/asm/pgtable_64_types.h | 47 +- arch/x86/include/asm/pgtable_types.h | 3 +- arch/x86/include/asm/processor.h | 109 ++-- arch/x86/include/asm/ptrace.h | 6 +- arch/x86/include/asm/rmwcc.h | 2 +- arch/x86/include/asm/stacktrace.h | 3 + arch/x86/include/asm/switch_to.h | 26 + arch/x86/include/asm/thread_info.h | 2 +- arch/x86/include/asm/tlbflush.h | 136 ++--- arch/x86/include/asm/trace/fpu.h | 10 - arch/x86/include/asm/traps.h | 21 +- arch/x86/include/asm/unwind.h | 15 +- arch/x86/include/asm/x86_init.h | 24 + arch/x86/include/uapi/asm/processor-flags.h | 3 + arch/x86/kernel/Makefile | 10 +- arch/x86/kernel/apic/apic.c | 2 +- arch/x86/kernel/apic/x2apic_uv_x.c | 5 +- arch/x86/kernel/asm-offsets.c | 6 + arch/x86/kernel/asm-offsets_32.c | 9 +- arch/x86/kernel/asm-offsets_64.c | 4 + arch/x86/kernel/cpu/Makefile | 1 + arch/x86/kernel/cpu/amd.c | 7 +- arch/x86/kernel/cpu/common.c | 121 +++-- arch/x86/kernel/cpu/cpuid-deps.c | 121 +++++ arch/x86/kernel/cpu/hypervisor.c | 64 +-- arch/x86/kernel/cpu/microcode/intel.c | 13 - arch/x86/kernel/cpu/mshyperv.c | 6 +- arch/x86/kernel/cpu/vmware.c | 8 +- arch/x86/kernel/doublefault.c | 36 +- arch/x86/kernel/dumpstack.c | 75 ++- arch/x86/kernel/dumpstack_32.c | 6 + arch/x86/kernel/dumpstack_64.c | 12 + arch/x86/kernel/fpu/init.c | 11 + arch/x86/kernel/fpu/xstate.c | 43 +- arch/x86/kernel/head_32.S | 5 +- arch/x86/kernel/head_64.S | 45 +- arch/x86/kernel/ioport.c | 2 +- arch/x86/kernel/irq.c | 12 - arch/x86/kernel/irq_64.c | 4 +- arch/x86/kernel/kvm.c | 6 +- arch/x86/kernel/ldt.c | 49 +- arch/x86/kernel/paravirt_patch_64.c | 2 - arch/x86/kernel/process.c | 27 +- arch/x86/kernel/process_32.c | 8 +- arch/x86/kernel/process_64.c | 19 +- arch/x86/kernel/smpboot.c | 9 +- arch/
,
Jan 6 2018
|
||||
►
Sign in to add a comment |
||||
Comment 1 by groeck@chromium.org
, Jan 2 2018