4.9.67-stable review
Greg Kroah-Hartman
maintainercover 4.9.67-stable review
This is the start of the stable review cycle for the 4.9.67 release. There are 38 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Dec 6 15:59:56 UTC 2017. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.67-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.9.67-rc1
Ville Syrjälä <[email protected]>
drm/i915: Prevent zero length "index" write
Ville Syrjälä <[email protected]>
drm/i915: Don't try indexed reads to alternate slave addresses
NeilBrown <[email protected]>
NFS: revalidate "." etc correctly on "open".
Greg Kroah-Hartman <[email protected]>
Revert "x86/entry/64: Add missing irqflags tracing to native_load_gs_index()"
Rex Zhu <[email protected]>
drm/amd/pp: fix typecast error in powerplay.
Christian König <[email protected]>
drm/ttm: once more fix ttm_buffer_object_transfer
Peter Griffin <[email protected]>
drm/hisilicon: Ensure LDI regs are properly configured.
Jonathan Liu <[email protected]>
drm/panel: simple: Add missing panel_simple_unprepare() calls
Roman Kapl <[email protected]>
drm/radeon: fix atombios on big endian
Dan Carpenter <[email protected]>
drm/amdgpu: Potential uninitialized variable in amdgpu_vm_update_directories()
Dan Carpenter <[email protected]>
drm/amdgpu: potential uninitialized variable in amdgpu_vce_ring_parse_cs()
Alex Deucher <[email protected]>
Revert "drm/radeon: dont switch vt on suspend"
Jeff Lien <[email protected]>
nvme-pci: add quirk for delay before CHK RDY for WDC SN200
Peter Rosin <[email protected]>
hwmon: (jc42) optionally try to disable the SMBUS timeout
Huacai Chen <[email protected]>
bcache: Fix building error on MIPS
Hans de Goede <[email protected]>
i2c: i801: Fix Failed to allocate irq -2147483648 error
Heiner Kallweit <[email protected]>
eeprom: at24: check at24_read/write arguments
Bartosz Golaszewski <[email protected]>
eeprom: at24: correctly set the size for at24mac402
Heiner Kallweit <[email protected]>
eeprom: at24: fix reading from 24MAC402/24MAC602
Bastian Stender <[email protected]>
mmc: core: prepend 0x to OCR entry in sysfs
Adrian Hunter <[email protected]>
mmc: core: Do not leave the block driver in a suspended state
Dr. David Alan Gilbert <[email protected]>
KVM: lapic: Fixup LDR on load in x2apic
Dr. David Alan Gilbert <[email protected]>
KVM: lapic: Split out x2apic ldr calculation
Paolo Bonzini <[email protected]>
KVM: x86: inject exceptions produced by x86_decode_insn
Liran Alon <[email protected]>
KVM: x86: Exit to user-mode on #UD intercept when emulator requires
Liran Alon <[email protected]>
KVM: x86: pvclock: Handle first-time write to pvclock-page contains random junk
Adam Ford <[email protected]>
ARM: OMAP2+: Fix WL1283 Bluetooth Baud Rate
Adam Ford <[email protected]>
mfd: twl4030-power: Fix pmic for boards that need vmmc1 on reboot
Naofumi Honda <[email protected]>
nfsd: fix panic in posix_unblock_lock called from nfs4_laundromat
Trond Myklebust <[email protected]>
nfsd: Fix another OPEN stateid race
Trond Myklebust <[email protected]>
nfsd: Fix stateid races between OPEN and CLOSE
Josef Bacik <[email protected]>
btrfs: clear space cache inode generation always
chenjie <[email protected]>
mm/madvise.c: fix madvise() infinite loop under special circumstances
Dan Williams <[email protected]>
mm, hugetlbfs: introduce ->split() to vm_operations_struct
Mike Kravetz <[email protected]>
mm/cma: fix alloc_contig_range ret code/potential leak
Kirill A. Shutemov <[email protected]>
mm, thp: Do not make page table dirty unconditionally in touch_p[mu]d()
Adam Ford <[email protected]>
ARM: dts: omap3: logicpd-torpedo-37xx-devkit: Fix MMC1 cd-gpio
Adam Ford <[email protected]>
ARM: dts: LogicPD Torpedo: Fix camera pin mux
-------------
Diffstat:
Documentation/devicetree/bindings/hwmon/jc42.txt | 4 + Makefile | 4 +- arch/arm/boot/dts/logicpd-torpedo-37xx-devkit.dts | 8 +- arch/arm/mach-omap2/pdata-quirks.c | 2 +- arch/x86/entry/entry_64.S | 10 +-- arch/x86/kvm/lapic.c | 12 ++- arch/x86/kvm/svm.c | 2 + arch/x86/kvm/vmx.c | 2 + arch/x86/kvm/x86.c | 5 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 38 ++++----- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 +- .../amd/powerplay/hwmgr/process_pptables_v1_0.c | 4 +- drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 3 + drivers/gpu/drm/i915/intel_i2c.c | 4 +- drivers/gpu/drm/panel/panel-simple.c | 2 + drivers/gpu/drm/radeon/atombios_dp.c | 38 ++++----- drivers/gpu/drm/radeon/radeon_fb.c | 1 - drivers/gpu/drm/ttm/ttm_bo_util.c | 1 + drivers/hwmon/jc42.c | 21 +++++ drivers/i2c/busses/i2c-i801.c | 3 + drivers/md/bcache/alloc.c | 2 +- drivers/md/bcache/extents.c | 2 +- drivers/md/bcache/journal.c | 2 +- drivers/mfd/twl4030-power.c | 1 + drivers/misc/eeprom/at24.c | 19 ++++- drivers/mmc/core/bus.c | 3 + drivers/mmc/core/mmc.c | 2 +- drivers/mmc/core/sd.c | 2 +- drivers/nvme/host/nvme.h | 2 +- drivers/nvme/host/pci.c | 2 + fs/btrfs/extent-tree.c | 14 +-- fs/nfs/dir.c | 3 +- fs/nfsd/nfs4state.c | 99 ++++++++++++++++------ include/linux/mm.h | 1 + include/uapi/linux/bcache.h | 2 +- mm/huge_memory.c | 19 ++--- mm/hugetlb.c | 8 ++ mm/madvise.c | 4 +- mm/mmap.c | 8 +- mm/page_alloc.c | 9 +- 41 files changed, 250 insertions(+), 122 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/38 ARM: dts: LogicPD Torpedo: Fix camera pin mux
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
commit 56322e123235370f1449c7444e311cce857d12f5 upstream.
Fix commit 05c4ffc3a266 ("ARM: dts: LogicPD Torpedo: Add MT9P031 Support") In the previous commit, I indicated that the only testing was done by showing the camera showed up when probing. This patch fixes an incorrect pin muxing on cam_d0, cam_d1 and cam_d2.
--- arch/arm/boot/dts/logicpd-torpedo-37xx-devkit.dts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm/boot/dts/logicpd-torpedo-37xx-devkit.dts +3 -3
@@ -249,9 +249,9 @@ OMAP3_CORE1_IOPAD(0x2110, PIN_INPUT | MUX_MODE0) /* cam_xclka.cam_xclka */ OMAP3_CORE1_IOPAD(0x2112, PIN_INPUT | MUX_MODE0) /* cam_pclk.cam_pclk */ - OMAP3_CORE1_IOPAD(0x2114, PIN_INPUT | MUX_MODE0) /* cam_d0.cam_d0 */ - OMAP3_CORE1_IOPAD(0x2116, PIN_INPUT | MUX_MODE0) /* cam_d1.cam_d1 */ - OMAP3_CORE1_IOPAD(0x2118, PIN_INPUT | MUX_MODE0) /* cam_d2.cam_d2 */ + OMAP3_CORE1_IOPAD(0x2116, PIN_INPUT | MUX_MODE0) /* cam_d0.cam_d0 */ + OMAP3_CORE1_IOPAD(0x2118, PIN_INPUT | MUX_MODE0) /* cam_d1.cam_d1 */ + OMAP3_CORE1_IOPAD(0x211a, PIN_INPUT | MUX_MODE0) /* cam_d2.cam_d2 */ OMAP3_CORE1_IOPAD(0x211c, PIN_INPUT | MUX_MODE0) /* cam_d3.cam_d3 */ OMAP3_CORE1_IOPAD(0x211e, PIN_INPUT | MUX_MODE0) /* cam_d4.cam_d4 */ OMAP3_CORE1_IOPAD(0x2120, PIN_INPUT | MUX_MODE0) /* cam_d5.cam_d5 */
Greg Kroah-Hartman
maintainerPATCH 2/38 ARM: dts: omap3: logicpd-torpedo-37xx-devkit: Fix MMC1 cd-gpio
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
commit b7ace5ed8867ca54503727988adec6b20af54eeb upstream.
Fixes commit 687c27676151 ("ARM: dts: Add minimal support for LogicPD Torpedo DM3730 devkit")
This patch corrects an issue where the cd-gpios was improperly setup using IRQ_TYPE_LEVEL_LOW instead of GPIO_ACTIVE_LOW.
--- arch/arm/boot/dts/logicpd-torpedo-37xx-devkit.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/logicpd-torpedo-37xx-devkit.dts +1 -1
@@ -192,7 +192,7 @@ interrupts-extended = <&intc 83 &omap3_pmx_core 0x11a>; pinctrl-names = "default"; pinctrl-0 = <&mmc1_pins &mmc1_cd>; - cd-gpios = <&gpio4 31 IRQ_TYPE_LEVEL_LOW>; /* gpio127 */ + cd-gpios = <&gpio4 31 GPIO_ACTIVE_LOW>; /* gpio127 */ vmmc-supply = <&vmmc1>; bus-width = <4>; cap-power-off-card;
Greg Kroah-Hartman
maintainerPATCH 3/38 mm, thp: Do not make page table dirty unconditionally in touch_p[mu]d()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kirill A. Shutemov <[email protected]>
commit a8f97366452ed491d13cf1e44241bc0b5740b1f0 upstream.
Currently, we unconditionally make page table dirty in touch_pmd(). It may result in false-positive can_follow_write_pmd().
We may avoid the situation, if we would only make the page table entry dirty if caller asks for write access -- FOLL_WRITE.
The patch also changes touch_pud() in the same way.
[Salvatore Bonaccorso: backport for 4.9:
- Adjust context
- Drop specific part for PUD-sized transparent hugepages. Support for PUD-sized transparent hugepages was added in v4.11-rc1
]
--- mm/huge_memory.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
mm/huge_memory.c +7 -12
@@ -745,20 +745,15 @@ int vmf_insert_pfn_pmd(struct vm_area_stEXPORT_SYMBOL_GPL (vmf_insert_pfn_pmd);static void touch_pmd (struct vm_area_struct *vma,unsigned long addr, -pmd_t *pmd) +pmd_t *pmd,int flags) {pmd_t _pmd; -/* -* We should set the dirty bit only for FOLL_WRITE but for now -* the dirty bit in the pmd is meaningless. And if the dirty -* bit will become meaningful and we'll only set it with -* FOLL_WRITE, an atomic set_bit will be required on the pmd to -* set the young bit, instead of the current set_pmd_at. -*/ - _pmd =pmd_mkyoung (pmd_mkdirty (*pmd)); + _pmd =pmd_mkyoung (*pmd); +if (flags &FOLL_WRITE ) + _pmd =pmd_mkdirty (_pmd);if (pmdp_set_access_flags (vma, addr &HPAGE_PMD_MASK , - pmd, _pmd,1 )) + pmd, _pmd, flags &FOLL_WRITE ))update_mmu_cache_pmd (vma, addr, pmd); }
@@ -787,7 +782,7 @@ struct page *follow_devmap_pmd(struct vmreturn NULL ;if (flags &FOLL_TOUCH ) -touch_pmd (vma, addr, pmd); +touch_pmd (vma, addr, pmd, flags);/* * device mapped pages can only be returned if the
@@ -1158,7 +1153,7 @@ struct page *follow_trans_huge_pmd(struc page =pmd_page (*pmd);VM_BUG_ON_PAGE (!PageHead (page) && !is_zone_device_page (page), page);if (flags &FOLL_TOUCH ) -touch_pmd (vma, addr, pmd); +touch_pmd (vma, addr, pmd, flags);if ((flags &FOLL_MLOCK ) && (vma->vm_flags &VM_LOCKED )) {/* * We don't mlock() pte-mapped THPs. This way we can avoid
Greg Kroah-Hartman
maintainerPATCH 4/38 mm/cma: fix alloc_contig_range ret code/potential leak
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Kravetz <[email protected]>
commit 63cd448908b5eb51d84c52f02b31b9b4ccd1cb5a upstream.
If the call __alloc_contig_migrate_range() in alloc_contig_range returns -EBUSY, processing continues so that test_pages_isolated() is called where there is a tracepoint to identify the busy pages. However, it is possible for busy pages to become available between the calls to these two routines. In this case, the range of pages may be allocated. Unfortunately, the original return code (ret == -EBUSY) is still set and returned to the caller. Therefore, the caller believes the pages were not allocated and they are leaked.
Update the comment to indicate that allocation is still possible even if __alloc_contig_migrate_range returns -EBUSY. Also, clear return code in this case so that it is not accidentally used or returned to caller.
--- mm/page_alloc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
mm/page_alloc.c +8 -1
@@ -7309,11 +7309,18 @@ int alloc_contig_range(unsigned long sta/* * In case of -EBUSY, we'd like to know which page causes problem. -* So, just fall through. We will check it in test_pages_isolated(). +* So, just fall through. test_pages_isolated() has a tracepoint +* which will report the busy page. +* +* It is possible that busy pages could become available before +* the call to test_pages_isolated, and the range will actually be +* allocated. So, if we fall through be sure to clear ret so that +* -EBUSY is not accidentally used or returned to caller. */ ret =__alloc_contig_migrate_range (&cc, start, end);if (ret && ret != -EBUSY ) goto done; + ret =0 ;/* * Pages from [start, end) are within a MAX_ORDER_NR_PAGES
Greg Kroah-Hartman
maintainerPATCH 5/38 mm, hugetlbfs: introduce ->split() to vm_operations_struct
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Williams <[email protected]>
commit 31383c6865a578834dd953d9dbc88e6b19fe3997 upstream.
Patch series "device-dax: fix unaligned munmap handling"
When device-dax is operating in huge-page mode we want it to behave like hugetlbfs and fail attempts to split vmas into unaligned ranges. It would be messy to teach the munmap path about device-dax alignment constraints in the same (hstate) way that hugetlbfs communicates this constraint. Instead, these patches introduce a new ->split() vm operation.
This patch (of 2):
The device-dax interface has similar constraints as hugetlbfs in that it requires the munmap path to unmap in huge page aligned units. Rather than add more custom vma handling code in __split_vma() introduce a new vm operation to perform this vma specific check.
--- include/linux/mm.h | 1 + mm/hugetlb.c | 8 ++++++++ mm/mmap.c | 8 +++++--- 3 files changed, 14 insertions(+), 3 deletions(-)
include/linux/mm.h +1 -0
@@ -347,6 +347,7 @@ struct fault_env {struct vm_operations_struct {void (*open)(struct vm_area_struct * area);void (*close)(struct vm_area_struct * area); +int (*split)(struct vm_area_struct * area,unsigned long addr);int (*mremap)(struct vm_area_struct * area);int (*fault)(struct vm_area_struct *vma,struct vm_fault *vmf); int (*pmd_fault)(struct vm_area_struct *, unsigned long address,
mm/hugetlb.c +8 -0
@@ -3135,6 +3135,13 @@ static void hugetlb_vm_op_close(struct v } } +static int hugetlb_vm_op_split (struct vm_area_struct *vma,unsigned long addr) +{ +if (addr & ~(huge_page_mask (hstate_vma (vma)))) +return -EINVAL ; +return 0 ; +} +/* * We cannot handle pagefaults against hugetlb pages at all. They cause * handle_mm_fault() to try to instantiate regular-sized pages in the
@@ -3151,6 +3158,7 @@ const struct vm_operations_struct hugetl .fault = hugetlb_vm_op_fault, .open = hugetlb_vm_op_open, .close = hugetlb_vm_op_close, + .split = hugetlb_vm_op_split, }; static pte_t make_huge_pte(struct vm_area_struct *vma, struct page *page,
mm/mmap.c +5 -3
@@ -2538,9 +2538,11 @@ static int __split_vma(struct mm_structstruct vm_area_struct *new;int err; -if (is_vm_hugetlb_page (vma) && (addr & - ~(huge_page_mask (hstate_vma (vma))))) -return -EINVAL ; +if (vma->vm_ops && vma->vm_ops->split) { + err = vma->vm_ops->split (vma, addr); +if (err) +return err; + } new =kmem_cache_alloc (vm_area_cachep,GFP_KERNEL );if (!new)
Greg Kroah-Hartman
maintainerPATCH 6/38 mm/madvise.c: fix madvise() infinite loop under special circumstances
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: chenjie <[email protected]>
commit 6ea8d958a2c95a1d514015d4e29ba21a8c0a1a91 upstream.
MADVISE_WILLNEED has always been a noop for DAX (formerly XIP) mappings. Unfortunately madvise_willneed() doesn't communicate this information properly to the generic madvise syscall implementation. The calling convention is quite subtle there. madvise_vma() is supposed to either return an error or update &prev otherwise the main loop will never advance to the next vma and it will keep looping for ever without a way to get out of the kernel.
It seems this has been broken since introduction. Nobody has noticed because nobody seems to be using MADVISE_WILLNEED on these DAX mappings.
--- mm/madvise.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
mm/madvise.c +1 -3
@@ -228,15 +228,14 @@ static long madvise_willneed(struct vm_a {struct file *file = vma->vm_file; + *prev = vma;#ifdef CONFIG_SWAP if (!file) { - *prev = vma;force_swapin_readahead (vma, start, end);return 0 ; }if (shmem_mapping (file->f_mapping)) { - *prev = vma;force_shm_swapin_readahead (vma, start, end, file->f_mapping);return 0 ;
@@ -251,7 +250,6 @@ static long madvise_willneed(struct vm_areturn 0 ; } - *prev = vma; start = ((start - vma->vm_start) >>PAGE_SHIFT ) + vma->vm_pgoff;if (end > vma->vm_end) end = vma->vm_end;
Greg Kroah-Hartman
maintainerPATCH 7/38 btrfs: clear space cache inode generation always
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
commit 8e138e0d92c6c9d3d481674fb14e3439b495be37 upstream.
We discovered a box that had double allocations, and suspected the space cache may be to blame. While auditing the write out path I noticed that if we've already setup the space cache we will just carry on. This means that any error we hit after cache_save_setup before we go to actually write the cache out we won't reset the inode generation, so whatever was already written will be considered correct, except it'll be stale. Fix this by _always_ resetting the generation on the block group inode, this way we only ever have valid or invalid cache.
With this patch I was no longer able to reproduce cache corruption with dm-log-writes and my bpf error injection tool.
--- fs/btrfs/extent-tree.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
fs/btrfs/extent-tree.c +7 -7
@@ -3397,13 +3397,6 @@ again: goto again; } -/* We've already setup this transaction, go ahead and exit */ -if (block_group->cache_generation == trans->transid && -i_size_read (inode)) { - dcs =BTRFS_DC_SETUP ; - goto out_put; - } -/* * We want to set the generation to 0, that way if anything goes wrong * from here on out we know not to trust this cache when we load up next
@@ -3427,6 +3420,13 @@ again: }WARN_ON (ret); +/* We've already setup this transaction, go ahead and exit */ +if (block_group->cache_generation == trans->transid && +i_size_read (inode)) { + dcs =BTRFS_DC_SETUP ; + goto out_put; + } +if (i_size_read (inode) >0 ) { ret =btrfs_check_trunc_cache_free_space (root, &root->fs_info->global_block_rsv);
Greg Kroah-Hartman
maintainerPATCH 8/38 nfsd: Fix stateid races between OPEN and CLOSE
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
commit 15ca08d3299682dc49bad73251677b2c5017ef08 upstream.
Open file stateids can linger on the nfs4_file list of stateids even after they have been closed. In order to avoid reusing such a stateid, and confusing the client, we need to recheck the nfs4_stid's type after taking the mutex.
Otherwise, we risk reusing an old stateid that was already closed, which will confuse clients that expect new stateids to conform to RFC7530 Sections 9.1.4.2 and 16.2.5 or RFC5661 Sections 8.2.2 and 18.2.4.
--- fs/nfsd/nfs4state.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 8 deletions(-)
fs/nfsd/nfs4state.c +59 -8
@@ -3513,7 +3513,9 @@ nfsd4_find_existing_open(struct nfs4_fil/* ignore lock owners */ if (local->st_stateowner->so_is_open_owner ==0 )continue ; -if (local->st_stateowner == &oo->oo_owner) { +if (local->st_stateowner != &oo->oo_owner) +continue ; +if (local->st_stid.sc_type ==NFS4_OPEN_STID ) { ret = local;atomic_inc (&ret->st_stid.sc_count);break ;
@@ -3522,6 +3524,52 @@ nfsd4_find_existing_open(struct nfs4_filreturn ret; } +static __be32 +nfsd4_verify_open_stid (struct nfs4_stid *s) +{ +__be32 ret = nfs_ok; + +switch (s->sc_type) { +default : +break ; +case NFS4_CLOSED_STID : +case NFS4_CLOSED_DELEG_STID : + ret = nfserr_bad_stateid; +break ; +case NFS4_REVOKED_DELEG_STID : + ret = nfserr_deleg_revoked; + } +return ret; +} + +/* Lock the stateid st_mutex, and deal with races with CLOSE */ +static __be32 +nfsd4_lock_ol_stateid (struct nfs4_ol_stateid *stp) +{ +__be32 ret; + +mutex_lock (&stp->st_mutex); + ret =nfsd4_verify_open_stid (&stp->st_stid); +if (ret != nfs_ok) +mutex_unlock (&stp->st_mutex); +return ret; +} + +static struct nfs4_ol_stateid * +nfsd4_find_and_lock_existing_open (struct nfs4_file *fp,struct nfsd4_open *open) +{ +struct nfs4_ol_stateid *stp; +for (;;) { +spin_lock (&fp->fi_lock); + stp =nfsd4_find_existing_open (fp, open); +spin_unlock (&fp->fi_lock); +if (!stp ||nfsd4_lock_ol_stateid (stp) == nfs_ok) +break ; +nfs4_put_stid (&stp->st_stid); + } +return stp; +} +static struct nfs4_openowner *alloc_init_open_stateowner (unsigned int strhashval,struct nfsd4_open *open,struct nfsd4_compound_state *cstate)
@@ -3566,6 +3614,7 @@ init_open_stateid(struct nfs4_file *fp,mutex_init (&stp->st_mutex);mutex_lock (&stp->st_mutex); +retry:spin_lock (&oo->oo_owner.so_client->cl_lock);spin_lock (&fp->fi_lock);
@@ -3590,7 +3639,11 @@ out_unlock:spin_unlock (&fp->fi_lock);spin_unlock (&oo->oo_owner.so_client->cl_lock);if (retstp) { -mutex_lock (&retstp->st_mutex); +/* Handle races with CLOSE */ +if (nfsd4_lock_ol_stateid (retstp) != nfs_ok) { +nfs4_put_stid (&retstp->st_stid); + goto retry; + }/* To keep mutex tracking happy */ mutex_unlock (&stp->st_mutex); stp = retstp;
@@ -4411,9 +4464,7 @@ nfsd4_process_open2(struct svc_rqst *rqs status =nfs4_check_deleg (cl, open, &dp);if (status) goto out; -spin_lock (&fp->fi_lock); - stp =nfsd4_find_existing_open (fp, open); -spin_unlock (&fp->fi_lock); + stp =nfsd4_find_and_lock_existing_open (fp, open); }else { open->op_file =NULL ; status = nfserr_bad_stateid;
@@ -4427,7 +4478,6 @@ nfsd4_process_open2(struct svc_rqst *rqs*/ if (stp) {/* Stateid was found, this is an OPEN upgrade */ -mutex_lock (&stp->st_mutex); status =nfs4_upgrade_open (rqstp, fp, current_fh, stp, open);if (status) {mutex_unlock (&stp->st_mutex);
@@ -5314,7 +5364,6 @@ static void nfsd4_close_open_stateid(strbool unhashed;LIST_HEAD (reaplist); - s->st_stid.sc_type =NFS4_CLOSED_STID ;spin_lock (&clp->cl_lock); unhashed =unhash_open_stateid (s, &reaplist);
@@ -5353,10 +5402,12 @@ nfsd4_close(struct svc_rqst *rqstp, strunfsd4_bump_seqid (cstate, status);if (status) goto out; + + stp->st_stid.sc_type =NFS4_CLOSED_STID ;nfs4_inc_and_copy_stateid (&close->cl_stateid, &stp->st_stid); -mutex_unlock (&stp->st_mutex);nfsd4_close_open_stateid (stp); +mutex_unlock (&stp->st_mutex);/* put reference from nfs4_preprocess_seqid_op */ nfs4_put_stid (&stp->st_stid);
Greg Kroah-Hartman
maintainerPATCH 9/38 nfsd: Fix another OPEN stateid race
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
commit d8a1a000555ecd1b824ac1ed6df8fe364dfbbbb0 upstream.
If nfsd4_process_open2() is initialising a new stateid, and yet the call to nfs4_get_vfs_file() fails for some reason, then we must declare the stateid closed, and unhash it before dropping the mutex.
Right now, we unhash the stateid after dropping the mutex, and without changing the stateid type, meaning that another OPEN could theoretically look it up and attempt to use it.
--- fs/nfsd/nfs4state.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-)
fs/nfsd/nfs4state.c +13 -15
@@ -4453,6 +4453,7 @@ nfsd4_process_open2(struct svc_rqst *rqsstruct nfs4_ol_stateid *stp =NULL ;struct nfs4_delegation *dp =NULL ;__be32 status; +bool new_stp = false;/* * Lookup file; if found, lookup stateid and check open request,
@@ -4472,11 +4473,19 @@ nfsd4_process_open2(struct svc_rqst *rqs goto out; } +if (!stp) { + stp =init_open_stateid (fp, open); +if (!open->op_stp) + new_stp = true; + } +/* * OPEN the file, or upgrade an existing OPEN. * If truncate fails, the OPEN fails. +* +* stp is already locked. */ -if (stp) { +if (!new_stp) {/* Stateid was found, this is an OPEN upgrade */ status =nfs4_upgrade_open (rqstp, fp, current_fh, stp, open);if (status) {
@@ -4484,22 +4493,11 @@ nfsd4_process_open2(struct svc_rqst *rqs goto out; } }else { -/* stp is returned locked. */ - stp =init_open_stateid (fp, open); -/* See if we lost the race to some other thread */ -if (stp->st_access_bmap !=0 ) { - status =nfs4_upgrade_open (rqstp, fp, current_fh, - stp, open); -if (status) { -mutex_unlock (&stp->st_mutex); - goto out; - } - goto upgrade_out; - } status =nfs4_get_vfs_file (rqstp, fp, current_fh, stp, open);if (status) { -mutex_unlock (&stp->st_mutex); + stp->st_stid.sc_type =NFS4_CLOSED_STID ;release_open_stateid (stp); +mutex_unlock (&stp->st_mutex); goto out; }
@@ -4508,7 +4506,7 @@ nfsd4_process_open2(struct svc_rqst *rqsif (stp->st_clnt_odstate == open->op_odstate) open->op_odstate =NULL ; } -upgrade_out: +nfs4_inc_and_copy_stateid (&open->op_stateid, &stp->st_stid);mutex_unlock (&stp->st_mutex);
Greg Kroah-Hartman
maintainerPATCH 10/38 nfsd: fix panic in posix_unblock_lock called from nfs4_laundromat
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naofumi Honda <[email protected]>
commit 64ebe12494fd5d193f014ce38e1fd83cc57883c8 upstream.
Quoted 1 line
Quoted 1 line
From kernel 4.9, my two nfsv4 servers sometimes suffer from
"panic: unable to handle kernel page request"
in posix_unblock_lock() called from nfs4_laundromat().
These panics diseappear if we revert the commit "nfsd: add a LRU list for blocked locks".
The cause appears to be a typo in nfs4_laundromat(), which is also present in nfs4_state_shutdown_net().
--- fs/nfsd/nfs4state.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/nfsd/nfs4state.c +2 -2
@@ -4732,7 +4732,7 @@ nfs4_laundromat(struct nfsd_net *nn)spin_unlock (&nn->blocked_locks_lock);while (!list_empty (&reaplist)) { - nbl =list_first_entry (&nn->blocked_locks_lru, + nbl =list_first_entry (&reaplist, struct nfsd4_blocked_lock, nbl_lru);list_del_init (&nbl->nbl_lru);posix_unblock_lock (&nbl->nbl_lock);
@@ -7143,7 +7143,7 @@ nfs4_state_shutdown_net(struct net *net)spin_unlock (&nn->blocked_locks_lock);while (!list_empty (&reaplist)) { - nbl =list_first_entry (&nn->blocked_locks_lru, + nbl =list_first_entry (&reaplist, struct nfsd4_blocked_lock, nbl_lru);list_del_init (&nbl->nbl_lru);posix_unblock_lock (&nbl->nbl_lock);
Greg Kroah-Hartman
maintainerPATCH 11/38 mfd: twl4030-power: Fix pmic for boards that need vmmc1 on reboot
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
commit ad48ed0c5763dc08931407e455dff5acdbe96e81 upstream.
At least two different omap3630/3730 boards booting from MMC1 fail to reboot if the "ti,twl4030-power-idle-osc-off" or "ti,twl4030-power-idle" compatible flags are set. This patch will keep the vmmc1 powered up during reboot allowing the bootloader to load.
--- drivers/mfd/twl4030-power.c | 1 + 1 file changed, 1 insertion(+)
drivers/mfd/twl4030-power.c +1 -0
@@ -701,6 +701,7 @@ static struct twl4030_ins omap3_wrst_seqTWL_RESOURCE_RESET (RES_MAIN_REF ),TWL_RESOURCE_GROUP_RESET (RES_GRP_ALL ,RES_TYPE_R0 ,RES_TYPE2_R2 ),TWL_RESOURCE_RESET (RES_VUSB_3V1 ), +TWL_RESOURCE_RESET (RES_VMMC1 ),TWL_RESOURCE_GROUP_RESET (RES_GRP_ALL ,RES_TYPE_R0 ,RES_TYPE2_R1 ),TWL_RESOURCE_GROUP_RESET (RES_GRP_RC ,RES_TYPE_ALL ,RES_TYPE2_R0 ), TWL_RESOURCE_ON(RES_RESET),
Greg Kroah-Hartman
maintainerPATCH 12/38 ARM: OMAP2+: Fix WL1283 Bluetooth Baud Rate
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
commit a3ac350793d90d1da631c8beeee9352387974ed5 upstream.
Commit 485fa1261f78 ("ARM: OMAP2+: LogicPD Torpedo + Wireless: Add Bluetooth") set the wrong baud rate for the UART. The Baud rate was 300,000 and it should be 3,000,000 for WL1283.
--- arch/arm/mach-omap2/pdata-quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/mach-omap2/pdata-quirks.c +1 -1
@@ -162,7 +162,7 @@ static struct ti_st_plat_data wilink7_pd .nshutdown_gpio = 162, .dev_name = "/dev/ttyO1", .flow_cntrl = 1, - .baud_rate = 300000, + .baud_rate = 3000000, };static struct platform_device wl128x_device = {
Greg Kroah-Hartman
maintainerPATCH 16/38 KVM: lapic: Split out x2apic ldr calculation
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dr. David Alan Gilbert <[email protected]>
commit e872fa94662d0644057c7c80b3071bdb9249e5ab upstream.
Split out the ldr calculation from kvm_apic_set_x2apic_id since we're about to reuse it in the following patch.
--- arch/x86/kvm/lapic.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
arch/x86/kvm/lapic.c +6 -1
@@ -246,9 +246,14 @@ static inline void kvm_apic_set_ldr(strurecalculate_apic_map (apic->vcpu->kvm); } +static inline u32 kvm_apic_calc_x2apic_ldr (u32 id) +{ +return ((id >>4 ) <<16 ) | (1 << (id &0xf )); +} +static inline void kvm_apic_set_x2apic_id (struct kvm_lapic *apic,u32 id) { -u32 ldr = ((id >>4 ) <<16 ) | (1 << (id &0xf )); +u32 ldr =kvm_apic_calc_x2apic_ldr (id);kvm_lapic_set_reg (apic,APIC_ID , id);kvm_lapic_set_reg (apic,APIC_LDR , ldr);
Greg Kroah-Hartman
maintainerPATCH 17/38 KVM: lapic: Fixup LDR on load in x2apic
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dr. David Alan Gilbert <[email protected]>
commit 12806ba937382fdfdbad62a399aa2dce65c10fcd upstream.
In x2apic mode the LDR is fixed based on the ID rather than separately loadable like it was before x2. When kvm_apic_set_state is called, the base is set, and if it has the X2APIC_ENABLE flag set then the LDR is calculated; however that value gets overwritten by the memcpy a few lines below overwriting it with the value that came from userland.
The symptom is a lack of EOI after loading the state (e.g. after a QEMU migration) and is due to the EOI bitmap being wrong due to the incorrect LDR. This was seen with a Win2016 guest under Qemu with irqchip=split whose USB mouse didn't work after a VM migration.
This corresponds to RH bug:
https://bugzilla.redhat.com/show_bug.cgi?id=1502591
--- arch/x86/kvm/lapic.c | 5 +++++ 1 file changed, 5 insertions(+)
arch/x86/kvm/lapic.c +5 -0
@@ -2034,6 +2034,7 @@ static int kvm_apic_state_fixup(struct k {if (apic_x2apic_mode (vcpu->arch.apic)) {u32 *id = (u32 *)(s->regs +APIC_ID ); +u32 *ldr = (u32 *)(s->regs +APIC_LDR );if (vcpu->kvm->arch.x2apic_format) {if (*id != vcpu->vcpu_id)
@@ -2044,6 +2045,10 @@ static int kvm_apic_state_fixup(struct kelse *id <<=24 ; } + +/* In x2APIC mode, the LDR is fixed and based on the id */ +if (set) + *ldr =kvm_apic_calc_x2apic_ldr (*id); }return 0 ;
Greg Kroah-Hartman
maintainerPATCH 18/38 mmc: core: Do not leave the block driver in a suspended state
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adrian Hunter <[email protected]>
commit ebe7dd45cf49e3b49cacbaace17f9f878f21fbea upstream.
The block driver must be resumed if the mmc bus fails to suspend the card.
--- drivers/mmc/core/bus.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/mmc/core/bus.c +3 -0
@@ -155,6 +155,9 @@ static int mmc_bus_suspend(struct devicereturn ret; ret = host->bus_ops->suspend (host); +if (ret) +pm_generic_resume (dev); +return ret; }
Greg Kroah-Hartman
maintainerPATCH 19/38 mmc: core: prepend 0x to OCR entry in sysfs
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bastian Stender <[email protected]>
commit c892b0d81705c566f575e489efc3c50762db1bde upstream.
The sysfs entry "ocr" was missing the 0x prefix to identify it as hex formatted.
--- drivers/mmc/core/mmc.c | 2 +- drivers/mmc/core/sd.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/mmc/core/mmc.c +1 -1
@@ -752,7 +752,7 @@ MMC_DEV_ATTR(enhanced_area_offset, "%lluMMC_DEV_ATTR (enhanced_area_size,"%u\n" , card->ext_csd.enhanced_area_size);MMC_DEV_ATTR (raw_rpmb_size_mult,"%#x\n" , card->ext_csd.raw_rpmb_size_mult);MMC_DEV_ATTR (rel_sectors,"%#x\n" , card->ext_csd.rel_sectors); -MMC_DEV_ATTR (ocr,"%08x\n" , card->ocr); +MMC_DEV_ATTR (ocr,"0x%08x\n" , card->ocr); static ssize_t mmc_fwrev_show(struct device *dev, struct device_attribute *attr,
drivers/mmc/core/sd.c +1 -1
@@ -683,7 +683,7 @@ MMC_DEV_ATTR(manfid, "0x%06x\n", card->cMMC_DEV_ATTR (name,"%s\n" , card->cid.prod_name);MMC_DEV_ATTR (oemid,"0x%04x\n" , card->cid.oemid);MMC_DEV_ATTR (serial,"0x%08x\n" , card->cid.serial); -MMC_DEV_ATTR (ocr,"%08x\n" , card->ocr); +MMC_DEV_ATTR (ocr,"0x%08x\n" , card->ocr); static ssize_t mmc_dsr_show(struct device *dev,
Greg Kroah-Hartman
maintainerPATCH 20/38 eeprom: at24: fix reading from 24MAC402/24MAC602
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <[email protected]>
commit 644a1f19c6c8393d0c4168a5adf79056da6822eb upstream.
Chip datasheet mentions that word addresses other than the actual start position of the MAC delivers undefined results. So fix this. Current implementation doesn't work due to this wrong offset.
--- drivers/misc/eeprom/at24.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/misc/eeprom/at24.c +2 -1
@@ -365,7 +365,8 @@ static ssize_t at24_eeprom_read_mac(strumemset (msg,0 ,sizeof (msg)); msg[0 ].addr = client->addr; msg[0 ].buf = addrbuf; - addrbuf[0 ] =0x90 + offset; +/* EUI-48 starts from 0x9a, EUI-64 from 0x98 */ + addrbuf[0 ] =0xa0 - at24->chip.byte_len + offset; msg[0 ].len =1 ; msg[1 ].addr = client->addr; msg[1 ].flags =I2C_M_RD ;
Greg Kroah-Hartman
maintainerPATCH 21/38 eeprom: at24: correctly set the size for at24mac402
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bartosz Golaszewski <[email protected]>
commit 5478e478eee3b096b8d998d4ed445da30da2dfbc upstream.
There's an ilog2() expansion in AT24_DEVICE_MAGIC() which rounds down the actual size of EUI-48 byte array in at24mac402 eeproms to 4 from 6, making it impossible to read it all.
Fix it by manually adjusting the value in probe().
This patch contains a temporary fix that is suitable for stable branches. Eventually we'll probably remove the call to ilog2() while converting the magic values to actual structs.
--- drivers/misc/eeprom/at24.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/misc/eeprom/at24.c +10 -0
@@ -639,6 +639,16 @@ static int at24_probe(struct i2c_clientdev_warn (&client->dev,"page_size looks suspicious (no power of 2)!\n" ); +/* +* REVISIT: the size of the EUI-48 byte array is 6 in at24mac402, while +* the call to ilog2() in AT24_DEVICE_MAGIC() rounds it down to 4. +* +* Eventually we'll get rid of the magic values altoghether in favor of +* real structs, but for now just manually set the right size. +*/ +if (chip.flags &AT24_FLAG_MAC && chip.byte_len ==4 ) + chip.byte_len =6 ; +/* Use I2C operations unless we're stuck with SMBus extensions. */ if (!i2c_check_functionality (client->adapter,I2C_FUNC_I2C )) {if (chip.flags &AT24_FLAG_ADDR16 )
Greg Kroah-Hartman
maintainerPATCH 22/38 eeprom: at24: check at24_read/write arguments
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiner Kallweit <[email protected]>
commit d9bcd462daf34aebb8de9ad7f76de0198bb5a0f0 upstream.
So far we completely rely on the caller to provide valid arguments. To be on the safe side perform an own sanity check.
--- drivers/misc/eeprom/at24.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/misc/eeprom/at24.c +6 -0
@@ -507,6 +507,9 @@ static int at24_read(void *priv, unsigneif (unlikely (!count))return count; +if (off + count > at24->chip.byte_len) +return -EINVAL ; +/* * Read data from chip, protecting against concurrent updates * from this host, but not from other I2C masters.
@@ -539,6 +542,9 @@ static int at24_write(void *priv, unsignif (unlikely (!count))return -EINVAL ; +if (off + count > at24->chip.byte_len) +return -EINVAL ; +/* * Write data to chip, protecting against concurrent updates * from this host, but not from other I2C masters.
Greg Kroah-Hartman
maintainerPATCH 23/38 i2c: i801: Fix Failed to allocate irq -2147483648 error
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 6e0c9507bf51e1517a80ad0ac171e5402528fcef upstream.
On Apollo Lake devices the BIOS does not set up IRQ routing for the i801 SMBUS controller IRQ, so we end up with dev->irq set to IRQ_NOTCONNECTED.
Detect this and do not try to use the irq in this case silencing:i801_smbus 0000:00:1f.1: Failed to allocate irq -2147483648: -107
--- drivers/i2c/busses/i2c-i801.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/i2c/busses/i2c-i801.c +3 -0
@@ -1592,6 +1592,9 @@ static int i801_probe(struct pci_dev *de/* Default timeout in interrupt mode: 200 ms */ priv->adapter.timeout =HZ /5 ; +if (dev->irq ==IRQ_NOTCONNECTED ) + priv->features &= ~FEATURE_IRQ ; +if (priv->features &FEATURE_IRQ ) {u16 pcictl, pcists;
Greg Kroah-Hartman
maintainerPATCH 24/38 bcache: Fix building error on MIPS
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huacai Chen <[email protected]>
commit cf33c1ee5254c6a430bc1538232b49c3ea13e613 upstream.
This patch try to fix the building error on MIPS. The reason is MIPS has already defined the PTR macro, which conflicts with the PTR macro in include/uapi/linux/bcache.h.
[fixed by mlyle: corrected a line-length issue]
--- drivers/md/bcache/alloc.c | 2 +- drivers/md/bcache/extents.c | 2 +- drivers/md/bcache/journal.c | 2 +- include/uapi/linux/bcache.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
drivers/md/bcache/alloc.c +1 -1
@@ -477,7 +477,7 @@ int __bch_bucket_alloc_set(struct cache_if (b ==-1 ) goto err; - k->ptr[i] =PTR (ca->buckets[b].gen, + k->ptr[i] =MAKE_PTR (ca->buckets[b].gen,bucket_to_sector (c, b), ca->sb.nr_this_dev);
drivers/md/bcache/extents.c +1 -1
@@ -584,7 +584,7 @@ static bool bch_extent_merge(struct btrereturn false;for (i =0 ; i <KEY_PTRS (l); i++) -if (l->ptr[i] +PTR (0 ,KEY_SIZE (l),0 ) != r->ptr[i] || +if (l->ptr[i] +MAKE_PTR (0 ,KEY_SIZE (l),0 ) != r->ptr[i] ||PTR_BUCKET_NR (b->c, l, i) !=PTR_BUCKET_NR (b->c, r, i))return false;
drivers/md/bcache/journal.c +1 -1
@@ -508,7 +508,7 @@ static void journal_reclaim(struct cachecontinue ; ja->cur_idx = next; - k->ptr[n++] =PTR (0 , + k->ptr[n++] =MAKE_PTR (0 ,bucket_to_sector (c, ca->sb.d[ja->cur_idx]), ca->sb.nr_this_dev); }
include/uapi/linux/bcache.h +1 -1
@@ -90,7 +90,7 @@ PTR_FIELD(PTR_GEN, 0, 8)#define PTR_CHECK_DEV ((1 << PTR_DEV_BITS) - 1) -#define PTR (gen, offset, dev) \ +#define MAKE_PTR (gen, offset, dev) \ ((((__u64) dev) << 51) | ((__u64) offset) << 8 | gen)/* Bkey utility code */
Greg Kroah-Hartman
maintainerPATCH 25/38 hwmon: (jc42) optionally try to disable the SMBUS timeout
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Rosin <[email protected]>
commit 68615eb01f82256c19e41967bfb3eef902f77033 upstream.
With a nxp,se97 chip on an atmel sama5d31 board, the I2C adapter driver is not always capable of avoiding the 25-35 ms timeout as specified by the SMBUS protocol. This may cause silent corruption of the last bit of any transfer, e.g. a one is read instead of a zero if the sensor chip times out. This also affects the eeprom half of the nxp-se97 chip, where this silent corruption was originally noticed. Other I2C adapters probably suffer similar issues, e.g. bit-banging comes to mind as risky...
The SMBUS register in the nxp chip is not a standard Jedec register, but it is not special to the nxp chips either, at least the atmel chips have the same mechanism. Therefore, do not special case this on the manufacturer, it is opt-in via the device property anyway.
--- Documentation/devicetree/bindings/hwmon/jc42.txt | 4 ++++ drivers/hwmon/jc42.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+)
Documentation/devicetree/bindings/hwmon/jc42.txt +4 -0
@@ -34,6 +34,10 @@ Required properties: - reg: I2C address +Optional properties: +- smbus-timeout-disable: When set, the smbus timeout function will be disabled. + This is not supported on all chips. + Example: temp-sensor@1a {
drivers/hwmon/jc42.c +21 -0
@@ -22,6 +22,7 @@* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <linux/bitops.h> #include <linux/module.h> #include <linux/init.h> #include <linux/slab.h>
@@ -45,6 +46,7 @@ static const unsigned short normal_i2c[]#define JC42_REG_TEMP 0x05#define JC42_REG_MANID 0x06#define JC42_REG_DEVICEID 0x07 +#define JC42_REG_SMBUS 0x22/* NXP and Atmel, possibly others? */ /* Status bits in temperature register */ #define JC42_ALARM_CRIT_BIT 15
@@ -73,6 +75,9 @@ static const unsigned short normal_i2c[]#define ONS_MANID 0x1b09/* ON Semiconductor */ #define STM_MANID 0x104a/* ST Microelectronics */ +/* SMBUS register */ +#define SMBUS_STMOUT BIT(7)/* SMBus time-out, active low */ +/* Supported chips */ /* Analog Devices */
@@ -476,6 +481,22 @@ static int jc42_probe(struct i2c_client data->extended = !!(cap &JC42_CAP_RANGE ); +if (device_property_read_bool (dev,"smbus-timeout-disable" )) { +int smbus; + +/* +* Not all chips support this register, but from a +* quick read of various datasheets no chip appears +* incompatible with the below attempt to disable +* the timeout. And the whole thing is opt-in... +*/ + smbus =i2c_smbus_read_word_swapped (client,JC42_REG_SMBUS ); +if (smbus <0 ) +return smbus; +i2c_smbus_write_word_swapped (client,JC42_REG_SMBUS , + smbus |SMBUS_STMOUT ); + } + config =i2c_smbus_read_word_swapped (client,JC42_REG_CONFIG );if (config <0 )return config;
Greg Kroah-Hartman
maintainerPATCH 26/38 nvme-pci: add quirk for delay before CHK RDY for WDC SN200
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Lien <[email protected]>
commit 8c97eeccf0ad8783c057830119467b877bdfced7 upstream.
And increase the existing delay to cover this device as well.
--- drivers/nvme/host/nvme.h | 2 +- drivers/nvme/host/pci.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
drivers/nvme/host/nvme.h +1 -1
@@ -84,7 +84,7 @@ enum nvme_quirks {* NVME_QUIRK_DELAY_BEFORE_CHK_RDY quirk enabled. The value (in ms) was * found empirically. */ -#define NVME_QUIRK_DELAY_AMOUNT 2000 +#define NVME_QUIRK_DELAY_AMOUNT 2300enum nvme_ctrl_state {NVME_CTRL_NEW ,
drivers/nvme/host/pci.c +2 -0
@@ -2109,6 +2109,8 @@ static const struct pci_device_id nvme_i .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, + { PCI_DEVICE(0x1c58, 0x0023), /* WDC SN200 adapter */ + .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE(0x1c5f, 0x0540), /* Memblaze Pblaze4 adapter */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
RE: [PATCH 4.9 26/38] nvme-pci: add quirk for delay before CHK RDY for WDC SN200
I have no objections to adding this to 4.9-stable or 4.14-stable.
Jeff Lien
-----Original Message-----
From: Greg Kroah-Hartman [mailto:[email protected]]
Sent: Monday, December 4, 2017 10:00 AM
To: [email protected]
Cc: Greg Kroah-Hartman; [email protected]; Jeffrey Lien; Christoph Hellwig
Subject: [PATCH 4.9 26/38] nvme-pci: add quirk for delay before CHK RDY for WDC SN200
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Lien <[email protected]>
commit 8c97eeccf0ad8783c057830119467b877bdfced7 upstream.
And increase the existing delay to cover this device as well.
--- drivers/nvme/host/nvme.h | 2 +- drivers/nvme/host/pci.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
drivers/nvme/host/nvme.h +1 -1
@@ -84,7 +84,7 @@ enum nvme_quirks {* NVME_QUIRK_DELAY_BEFORE_CHK_RDY quirk enabled. The value (in ms) was * found empirically. */ -#define NVME_QUIRK_DELAY_AMOUNT 2000 +#define NVME_QUIRK_DELAY_AMOUNT 2300enum nvme_ctrl_state {NVME_CTRL_NEW ,
drivers/nvme/host/pci.c +2 -0
@@ -2109,6 +2109,8 @@ static const struct pci_device_id nvme_i .driver_data = NVME_QUIRK_IDENTIFY_CNS, }, { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, + { PCI_DEVICE(0x1c58, 0x0023), /* WDC SN200 adapter */ + .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE(0x1c5f, 0x0540), /* Memblaze Pblaze4 adapter */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
Greg Kroah-Hartman
maintainerPATCH 30/38 drm/radeon: fix atombios on big endian
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Roman Kapl <[email protected]>
commit 4f626a4ac8f57ddabf06d03870adab91e463217f upstream.
The function for byteswapping the data send to/from atombios was buggy for num_bytes not divisible by four. The function must be aware of the fact that after byte-swapping the u32 units, valid bytes might end up after the num_bytes boundary.
This patch was tested on kernel 3.12 and allowed us to sucesfully use DisplayPort on and Radeon SI card. Namely it fixed the link training and EDID readout.
The function is patched both in radeon and amd drivers, since the functions and the fixes are identical.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 38 ++++++++++++--------------- drivers/gpu/drm/radeon/atombios_dp.c | 38 ++++++++++++--------------- 2 files changed, 36 insertions(+), 40 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +18 -20
@@ -1788,34 +1788,32 @@ void amdgpu_atombios_scratch_regs_restorWREG32 (mmBIOS_SCRATCH_0 + i, adev->bios_scratch[i]); } -/* Atom needs data in little endian format -* so swap as appropriate when copying data to -* or from atom. Note that atom operates on -* dw units. +/* Atom needs data in little endian format so swap as appropriate when copying +* data to or from atom. Note that atom operates on dw units. +* +* Use to_le=true when sending data to atom and provide at least +* ALIGN(num_bytes,4) bytes in the dst buffer. +* +* Use to_le=false when receiving data from atom and provide ALIGN(num_bytes,4) +* byes in the src buffer. */ void amdgpu_atombios_copy_swap (u8 *dst,u8 *src,u8 num_bytes,bool to_le) {#ifdef __BIG_ENDIAN -u8 src_tmp[20 ], dst_tmp[20 ];/* used for byteswapping */ -u32 *dst32, *src32; +u32 src_tmp[5 ], dst_tmp[5 ];int i; +u8 align_num_bytes =ALIGN (num_bytes,4 ); -memcpy (src_tmp, src, num_bytes); - src32 = (u32 *)src_tmp; - dst32 = (u32 *)dst_tmp;if (to_le) { -for (i =0 ; i < ((num_bytes +3 ) /4 ); i++) - dst32[i] =cpu_to_le32 (src32[i]); -memcpy (dst, dst_tmp, num_bytes); +memcpy (src_tmp, src, num_bytes); +for (i =0 ; i < align_num_bytes /4 ; i++) + dst_tmp[i] =cpu_to_le32 (src_tmp[i]); +memcpy (dst, dst_tmp, align_num_bytes); }else { -u8 dws = num_bytes & ~3 ; -for (i =0 ; i < ((num_bytes +3 ) /4 ); i++) - dst32[i] =le32_to_cpu (src32[i]); -memcpy (dst, dst_tmp, dws); -if (num_bytes %4 ) { -for (i =0 ; i < (num_bytes %4 ); i++) - dst[dws+i] = dst_tmp[dws+i]; - } +memcpy (src_tmp, src, align_num_bytes); +for (i =0 ; i < align_num_bytes /4 ; i++) + dst_tmp[i] =le32_to_cpu (src_tmp[i]); +memcpy (dst, dst_tmp, num_bytes); }#else memcpy (dst, src, num_bytes);
drivers/gpu/drm/radeon/atombios_dp.c +18 -20
@@ -45,34 +45,32 @@ static char *pre_emph_names[] = {/***** radeon AUX functions *****/ -/* Atom needs data in little endian format -* so swap as appropriate when copying data to -* or from atom. Note that atom operates on -* dw units. +/* Atom needs data in little endian format so swap as appropriate when copying +* data to or from atom. Note that atom operates on dw units. +* +* Use to_le=true when sending data to atom and provide at least +* ALIGN(num_bytes,4) bytes in the dst buffer. +* +* Use to_le=false when receiving data from atom and provide ALIGN(num_bytes,4) +* byes in the src buffer. */ void radeon_atom_copy_swap (u8 *dst,u8 *src,u8 num_bytes,bool to_le) {#ifdef __BIG_ENDIAN -u8 src_tmp[20 ], dst_tmp[20 ];/* used for byteswapping */ -u32 *dst32, *src32; +u32 src_tmp[5 ], dst_tmp[5 ];int i; +u8 align_num_bytes =ALIGN (num_bytes,4 ); -memcpy (src_tmp, src, num_bytes); - src32 = (u32 *)src_tmp; - dst32 = (u32 *)dst_tmp;if (to_le) { -for (i =0 ; i < ((num_bytes +3 ) /4 ); i++) - dst32[i] =cpu_to_le32 (src32[i]); -memcpy (dst, dst_tmp, num_bytes); +memcpy (src_tmp, src, num_bytes); +for (i =0 ; i < align_num_bytes /4 ; i++) + dst_tmp[i] =cpu_to_le32 (src_tmp[i]); +memcpy (dst, dst_tmp, align_num_bytes); }else { -u8 dws = num_bytes & ~3 ; -for (i =0 ; i < ((num_bytes +3 ) /4 ); i++) - dst32[i] =le32_to_cpu (src32[i]); -memcpy (dst, dst_tmp, dws); -if (num_bytes %4 ) { -for (i =0 ; i < (num_bytes %4 ); i++) - dst[dws+i] = dst_tmp[dws+i]; - } +memcpy (src_tmp, src, align_num_bytes); +for (i =0 ; i < align_num_bytes /4 ; i++) + dst_tmp[i] =le32_to_cpu (src_tmp[i]); +memcpy (dst, dst_tmp, num_bytes); }#else memcpy (dst, src, num_bytes);
Greg Kroah-Hartman
maintainerPATCH 31/38 drm/panel: simple: Add missing panel_simple_unprepare() calls
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonathan Liu <[email protected]>
commit f3621a8eb59a913612c8e6e37d81f16b649f8b6c upstream.
During panel removal or system shutdown panel_simple_disable() is called which disables the panel backlight but the panel is still powered due to missing calls to panel_simple_unprepare().
--- drivers/gpu/drm/panel/panel-simple.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/panel/panel-simple.c +2 -0
@@ -369,6 +369,7 @@ static int panel_simple_remove(struct dedrm_panel_remove (&panel->base);panel_simple_disable (&panel->base); +panel_simple_unprepare (&panel->base);if (panel->ddc)put_device (&panel->ddc->dev);
@@ -384,6 +385,7 @@ static void panel_simple_shutdown(structstruct panel_simple *panel =dev_get_drvdata (dev);panel_simple_disable (&panel->base); +panel_simple_unprepare (&panel->base); }static const struct drm_display_mode ampire_am800480r3tmqwa1h_mode = {
Greg Kroah-Hartman
maintainerPATCH 32/38 drm/hisilicon: Ensure LDI regs are properly configured.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Griffin <[email protected]>
commit a2f042430784d86eb2b7a6d2a869f552da30edba upstream.
This patch fixes the following soft lockup:
BUG: soft lockup - CPU#0 stuck for 23s! [weston:307]
On weston idle-timeout the IP is powered down and reset asserted. On weston resume we get a massive vblank IRQ storm due to the LDI registers having lost some state.
This state loss is caused by ade_crtc_atomic_begin() not calling ade_ldi_set_mode(). With this patch applied resuming from Weston idle-timeout works well.
--- drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c +3 -0
@@ -521,9 +521,12 @@ static void ade_crtc_atomic_begin(struct {struct ade_crtc *acrtc =to_ade_crtc (crtc);struct ade_hw_ctx *ctx = acrtc->ctx; +struct drm_display_mode *mode = &crtc->state->mode; +struct drm_display_mode *adj_mode = &crtc->state->adjusted_mode;if (!ctx->power_on) (void )ade_power_up (ctx); +ade_ldi_set_mode (acrtc, mode, adj_mode); } static void ade_crtc_atomic_flush(struct drm_crtc *crtc,
Greg Kroah-Hartman
maintainerPATCH 34/38 drm/amd/pp: fix typecast error in powerplay.
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rex Zhu <[email protected]>
commit 8d8258bdab735d9f3c4b78e091ecfbb2b2b1f2ca upstream.
resulted in unexpected data truncation
--- drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c +2 -2
@@ -850,9 +850,9 @@ static int init_over_drive_limits( const ATOM_Tonga_POWERPLAYTABLE *powerplay_table) { hwmgr->platform_descriptor.overdriveLimit.engineClock = -le16_to_cpu (powerplay_table->ulMaxODEngineClock); +le32_to_cpu (powerplay_table->ulMaxODEngineClock); hwmgr->platform_descriptor.overdriveLimit.memoryClock = -le16_to_cpu (powerplay_table->ulMaxODMemoryClock); +le32_to_cpu (powerplay_table->ulMaxODMemoryClock); hwmgr->platform_descriptor.minOverdriveVDDC =0 ; hwmgr->platform_descriptor.maxOverdriveVDDC =0 ;
Greg Kroah-Hartman
maintainerPATCH 35/38 Revert "x86/entry/64: Add missing irqflags tracing to native_load_gs_index()"
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
This reverts commit 0d794d0d018f23fb09c50f6ae26868bd6ae343d6 which is commit 0d794d0d018f23fb09c50f6ae26868bd6ae343d6 upstream.
Andy writes:
I think the thing to do is to revert the patch from -stable. The bug it fixes is very minor, and the regression is that it made a pre-existing bug in some nearly-undebuggable core resume code much easier to hit. I don't feel comfortable with a backport of the latter fix until it has a good long soak in Linus' tree.
--- arch/x86/entry/entry_64.S | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-)
arch/x86/entry/entry_64.S +2 -8
@@ -54,19 +54,15 @@ ENTRY(native_usergs_sysret64) ENDPROC(native_usergs_sysret64) #endif /* CONFIG_PARAVIRT */ -.macro TRACE_IRQS_FLAGS flags:req +.macro TRACE_IRQS_IRETQ #ifdef CONFIG_TRACE_IRQFLAGS - bt $9, \flags /* interrupts off? */ + bt $9, EFLAGS(%rsp) /* interrupts off? */ jnc 1f TRACE_IRQS_ON 1: #endif .endm -.macro TRACE_IRQS_IRETQ - TRACE_IRQS_FLAGS EFLAGS(%rsp) -.endm - /* * When dynamic function tracer is enabled it will add a breakpoint * to all locations that it is about to modify, sync CPUs, update
@@ -872,13 +868,11 @@ idtentry simd_coprocessor_error do_simd_coprocessor_error has_error_code=0 ENTRY(native_load_gs_index) pushfq DISABLE_INTERRUPTS(CLBR_ANY & ~CLBR_RDI) - TRACE_IRQS_OFF SWAPGS .Lgs_change: movl %edi, %gs 2: ALTERNATIVE "", "mfence", X86_BUG_SWAPGS_FENCE SWAPGS - TRACE_IRQS_FLAGS (%rsp) popfq ret END(native_load_gs_index)
Signature · 1 line
2.15.1
Greg Kroah-Hartman
maintainerPATCH 36/38 NFS: revalidate "." etc correctly on "open".
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: NeilBrown <[email protected]>
commit b688741cb06695312f18b730653d6611e1bad28d upstream.
For correct close-to-open semantics, NFS must validate the change attribute of a directory (or file) on open.
Since commit ecf3d1f1aa74 ("vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op"), open() of "." or a path ending ".." is not revalidated reliably (except when that direct is a mount point).
Prior to that commit, "." was revalidated using nfs_lookup_revalidate() which checks the LOOKUP_OPEN flag and forces revalidation if the flag is set.
Since that commit, nfs_weak_revalidate() is used for NFSv3 (which ignores the flags) and nothing is used for NFSv4.
This is fixed by using nfs_lookup_verify_inode() in nfs_weak_revalidate(). This does the revalidation exactly when needed. Also, add a definition of .d_weak_revalidate for NFSv4.
The incorrect behavior is easily demonstrated by running "echo *" in some non-mountpoint NFS directory while watching network traffic. Without this patch, "echo *" sometimes doesn't produce any traffic. With the patch it always does.
--- fs/nfs/dir.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/nfs/dir.c +2 -1
@@ -1292,7 +1292,7 @@ static int nfs_weak_revalidate(struct dereturn 0 ; } - error =nfs_revalidate_inode (NFS_SERVER (inode), inode); + error =nfs_lookup_verify_inode (inode, flags);dfprintk (LOOKUPCACHE ,"NFS: %s: inode %lu is %s\n" , __func__, inode->i_ino, error ?"invalid" :"valid" );return !error;
@@ -1443,6 +1443,7 @@ static int nfs4_lookup_revalidate(structconst struct dentry_operations nfs4_dentry_operations = { .d_revalidate = nfs4_lookup_revalidate, + .d_weak_revalidate = nfs_weak_revalidate, .d_delete = nfs_dentry_delete, .d_iput = nfs_dentry_iput, .d_automount = nfs_d_automount,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.67 release. There are 38 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Dec 6 15:59:56 UTC 2017. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.67-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.67 release. There are 38 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Dec 6 15:59:56 UTC 2017. Anything received after that time might be too late.
Build results:
total: 145 pass: 145 fail: 0 Qemu test results: total: 123 pass: 123 fail: 0
Details are available at http://kerneltests.org/builders.
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.67 release. There are 38 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Dec 6 15:59:56 UTC 2017. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.67-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm and x86_64.
Summary
------------------------------------------------------------------------
kernel: 4.9.67-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.9.y
git commit: 3efaa252aaafecdd666059be175f88ebd95ea236
git describe: v4.9.66-39-g3efaa252aaaf
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.9-oe/build/v4.9.66-39-g3efaa252aaaf
No regressions (compared to build v4.9.66-39-ga89dba36bba8)
Boards, architectures and test suites:
-------------------------------------
hi6220-hikey - arm64
* boot - pass: 20,
* kselftest - pass: 34, skip: 20
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 60,
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 21, skip: 1
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 14,
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 982, skip: 121
* ltp-timers-tests - pass: 12,
juno-r2 - arm64
* boot - pass: 20,
* kselftest - pass: 34, skip: 19
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 60,
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 10,
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 939, skip: 156
* ltp-timers-tests - pass: 12,
x15 - arm
* boot - pass: 20,
* kselftest - pass: 31, skip: 23
* libhugetlbfs - pass: 87, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 60,
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 20, skip: 2
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 13, skip: 1
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1036, skip: 66
* ltp-timers-tests - pass: 12,
x86_64
* boot - pass: 20,
* kselftest - pass: 49, skip: 20
* libhugetlbfs - pass: 76, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 63,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 61, skip: 1
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 18,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 2,
* ltp-ipc-tests - pass: 8,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 9, skip: 1
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 957, skip: 163
* ltp-timers-tests - pass: 11,
Documentation - https://collaborate.linaro.org/display/LKFT/Email+Reports