This is the 5.4.161 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmGaPeoACgkQONu9yGCS
 aT4y9RAArO/V2GJCWb2hbycStqH/oLKxDnY2Du0fji5uj7iKaN1wzW2DT5tNstlZ
 I/aJS5ULZ8IYV/otIxzpCLzc0EHJ82sSqA8l2TgtK/SaqkoWABzcNdeZC3KPoAy+
 QLyDIlSIXc2ODhf7Q8sk+6Pxwa5IPjNchKbtjJpaqM3YnMApJ+ub4M89toI6kYYd
 G9F8BbjCyJ7FQ4TcIXQQG2L+XHWGPXGk/WDrFUlMyj5n4ztOjXMbbT/VmWJdf6cA
 hyYj1AKfekhKYdb21/ko/6z8D1wlrnZ2OBVVSJJdwbN7VnNB2bA2rxTzds7vJzzW
 z8dqb3WTnNwkxaoTsKxV59Ii2ienrb7RU60QU9jHg1Yef8g7o7KYknF08OoTl4C5
 z2dwxlxr76KR6u19L5jgLSYg/0HXYWNhDq5lyLsDJbrbWjWOFtRIe1jqVc/v3+4f
 nl54wztGqj0aBGZUsqtK4Ypjs4LJxDD1LqXSKgN9AbZjWq6jtcj25deXPuQNWoBh
 cZ8PXMD3L6Vl27brHYZ4EmAoLlVQRAdqD4sicUParyMhincb10Eil6xI8ipbvRbR
 ij0VXhfu6uV/qMfL6nGznIKbbBnK4EgrDzNCAlYC+CiXQvDCHdulZ2Bz3VzK5J3q
 fIkfSE1DZCwXOzP4JJ43M01BkAk/eOoHI9n4sPC6HZOtokAoIVg=
 =01H9
 -----END PGP SIGNATURE-----

Merge 5.4.161 into android11-5.4-lts

Changes in 5.4.161
	soc/tegra: pmc: Fix imbalanced clock disabling in error code path
	scsi: ufs: Fix interrupt error message for shared interrupts
	MIPS: Fix assembly error from MIPSr2 code used within MIPS_ISA_ARCH_LEVEL
	ext4: fix lazy initialization next schedule time computation in more granular unit
	scsi: ufs: Fix tm request when non-fatal error happens
	fortify: Explicitly disable Clang support
	parisc/entry: fix trace test in syscall exit path
	PCI/MSI: Destroy sysfs before freeing entries
	PCI/MSI: Deal with devices lying about their MSI mask capability
	PCI: Add MSI masking quirk for Nvidia ION AHCI
	erofs: remove the occupied parameter from z_erofs_pagevec_enqueue()
	erofs: fix unsafe pagevec reuse of hooked pclusters
	Linux 5.4.161

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I5c1942d0f5c822a788147c7ade349701a9451cee
This commit is contained in:
Greg Kroah-Hartman 2021-11-21 15:34:05 +01:00
commit 26b09f181d
12 changed files with 60 additions and 37 deletions

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 160
SUBLEVEL = 161
EXTRAVERSION =
NAME = Kleptomaniac Octopus

View File

@ -239,6 +239,7 @@ static inline unsigned long __cmpxchg64(volatile void *ptr,
" .set " MIPS_ISA_ARCH_LEVEL " \n"
/* Load 64 bits from ptr */
"1: lld %L0, %3 # __cmpxchg64 \n"
" .set pop \n"
/*
* Split the 64 bit value we loaded into the 2 registers that hold the
* ret variable.
@ -266,6 +267,8 @@ static inline unsigned long __cmpxchg64(volatile void *ptr,
" or %L1, %L1, $at \n"
" .set at \n"
# endif
" .set push \n"
" .set " MIPS_ISA_ARCH_LEVEL " \n"
/* Attempt to store new at ptr */
" scd %L1, %2 \n"
/* If we failed, loop! */

View File

@ -1842,7 +1842,7 @@ syscall_restore:
/* Are we being ptraced? */
LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19
ldi _TIF_SYSCALL_TRACE_MASK,%r2
ldi _TIF_SINGLESTEP|_TIF_BLOCKSTEP,%r2
and,COND(=) %r19,%r2,%r0
b,n syscall_restore_rfi

View File

@ -394,18 +394,6 @@ static void free_msi_irqs(struct pci_dev *dev)
for (i = 0; i < entry->nvec_used; i++)
BUG_ON(irq_has_action(entry->irq + i));
pci_msi_teardown_msi_irqs(dev);
list_for_each_entry_safe(entry, tmp, msi_list, list) {
if (entry->msi_attrib.is_msix) {
if (list_is_last(&entry->list, msi_list))
iounmap(entry->mask_base);
}
list_del(&entry->list);
free_msi_entry(entry);
}
if (dev->msi_irq_groups) {
sysfs_remove_groups(&dev->dev.kobj, dev->msi_irq_groups);
msi_attrs = dev->msi_irq_groups[0]->attrs;
@ -421,6 +409,18 @@ static void free_msi_irqs(struct pci_dev *dev)
kfree(dev->msi_irq_groups);
dev->msi_irq_groups = NULL;
}
pci_msi_teardown_msi_irqs(dev);
list_for_each_entry_safe(entry, tmp, msi_list, list) {
if (entry->msi_attrib.is_msix) {
if (list_is_last(&entry->list, msi_list))
iounmap(entry->mask_base);
}
list_del(&entry->list);
free_msi_entry(entry);
}
}
static void pci_intx_for_msi(struct pci_dev *dev, int enable)
@ -590,6 +590,9 @@ msi_setup_entry(struct pci_dev *dev, int nvec, struct irq_affinity *affd)
goto out;
pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
/* Lies, damned lies, and MSIs */
if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
control |= PCI_MSI_FLAGS_MASKBIT;
entry->msi_attrib.is_msix = 0;
entry->msi_attrib.is_64 = !!(control & PCI_MSI_FLAGS_64BIT);

View File

@ -5777,3 +5777,9 @@ static void apex_pci_fixup_class(struct pci_dev *pdev)
}
DECLARE_PCI_FIXUP_CLASS_HEADER(0x1ac1, 0x089a,
PCI_CLASS_NOT_DEFINED, 8, apex_pci_fixup_class);
static void nvidia_ion_ahci_fixup(struct pci_dev *pdev)
{
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);

View File

@ -5058,7 +5058,8 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
break;
} /* end of switch */
if ((host_byte(result) != DID_OK) && !hba->silence_err_logs)
if ((host_byte(result) != DID_OK) &&
(host_byte(result) != DID_REQUEUE) && !hba->silence_err_logs)
ufshcd_print_trs(hba, 1 << lrbp->task_tag, true);
return result;
}
@ -6264,9 +6265,12 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba)
intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
}
if (enabled_intr_status && retval == IRQ_NONE) {
dev_err(hba->dev, "%s: Unhandled interrupt 0x%08x\n",
__func__, intr_status);
if (enabled_intr_status && retval == IRQ_NONE &&
!ufshcd_eh_in_progress(hba)) {
dev_err(hba->dev, "%s: Unhandled interrupt 0x%08x (-, 0x%08x)\n",
__func__,
intr_status,
enabled_intr_status);
ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: ");
}

View File

@ -579,7 +579,7 @@ static int tegra_powergate_power_up(struct tegra_powergate *pg,
err = tegra_powergate_enable_clocks(pg);
if (err)
goto disable_clks;
goto powergate_off;
usleep_range(10, 20);

View File

@ -288,11 +288,10 @@ static inline bool z_erofs_try_inplace_io(struct z_erofs_collector *clt,
/* callers must be with collection lock held */
static int z_erofs_attach_page(struct z_erofs_collector *clt,
struct page *page,
enum z_erofs_page_type type)
struct page *page, enum z_erofs_page_type type,
bool pvec_safereuse)
{
int ret;
bool occupied;
/* give priority for inplaceio */
if (clt->mode >= COLLECT_PRIMARY &&
@ -300,10 +299,9 @@ static int z_erofs_attach_page(struct z_erofs_collector *clt,
z_erofs_try_inplace_io(clt, page))
return 0;
ret = z_erofs_pagevec_enqueue(&clt->vector,
page, type, &occupied);
ret = z_erofs_pagevec_enqueue(&clt->vector, page, type,
pvec_safereuse);
clt->cl->vcnt += (unsigned int)ret;
return ret ? 0 : -EAGAIN;
}
@ -654,14 +652,15 @@ hitted:
tight &= (clt->mode >= COLLECT_PRIMARY_FOLLOWED);
retry:
err = z_erofs_attach_page(clt, page, page_type);
err = z_erofs_attach_page(clt, page, page_type,
clt->mode >= COLLECT_PRIMARY_FOLLOWED);
/* should allocate an additional staging page for pagevec */
if (err == -EAGAIN) {
struct page *const newpage =
__stagingpage_alloc(pagepool, GFP_NOFS);
err = z_erofs_attach_page(clt, newpage,
Z_EROFS_PAGE_TYPE_EXCLUSIVE);
Z_EROFS_PAGE_TYPE_EXCLUSIVE, true);
if (!err)
goto retry;
}

View File

@ -108,12 +108,17 @@ static inline void z_erofs_pagevec_ctor_init(struct z_erofs_pagevec_ctor *ctor,
static inline bool z_erofs_pagevec_enqueue(struct z_erofs_pagevec_ctor *ctor,
struct page *page,
enum z_erofs_page_type type,
bool *occupied)
bool pvec_safereuse)
{
*occupied = false;
if (!ctor->next && type)
if (ctor->index + 1 == ctor->nr)
if (!ctor->next) {
/* some pages cannot be reused as pvec safely without I/O */
if (type == Z_EROFS_PAGE_TYPE_EXCLUSIVE && !pvec_safereuse)
type = Z_EROFS_VLE_PAGE_TYPE_TAIL_SHARED;
if (type != Z_EROFS_PAGE_TYPE_EXCLUSIVE &&
ctor->index + 1 == ctor->nr)
return false;
}
if (ctor->index >= ctor->nr)
z_erofs_pagevec_ctor_pagedown(ctor, false);
@ -125,7 +130,6 @@ static inline bool z_erofs_pagevec_enqueue(struct z_erofs_pagevec_ctor *ctor,
/* should remind that collector->next never equal to 1, 2 */
if (type == (uintptr_t)ctor->next) {
ctor->next = page;
*occupied = true;
}
ctor->pages[ctor->index++] = tagptr_fold(erofs_vtptr_t, page, type);
return true;

View File

@ -3137,8 +3137,8 @@ static int ext4_run_li_request(struct ext4_li_request *elr)
struct ext4_group_desc *gdp = NULL;
ext4_group_t group, ngroups;
struct super_block *sb;
unsigned long timeout = 0;
int ret = 0;
u64 start_time;
sb = elr->lr_super;
ngroups = EXT4_SB(sb)->s_groups_count;
@ -3158,13 +3158,12 @@ static int ext4_run_li_request(struct ext4_li_request *elr)
ret = 1;
if (!ret) {
timeout = jiffies;
start_time = ktime_get_real_ns();
ret = ext4_init_inode_table(sb, group,
elr->lr_timeout ? 0 : 1);
if (elr->lr_timeout == 0) {
timeout = (jiffies - timeout) *
elr->lr_sbi->s_li_wait_mult;
elr->lr_timeout = timeout;
elr->lr_timeout = nsecs_to_jiffies((ktime_get_real_ns() - start_time) *
elr->lr_sbi->s_li_wait_mult);
}
elr->lr_next_sched = jiffies + elr->lr_timeout;
elr->lr_next_group = group + 1;

View File

@ -209,6 +209,8 @@ enum pci_dev_flags {
PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
/* Don't use Relaxed Ordering for TLPs directed at this device */
PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
/* Device does honor MSI masking despite saying otherwise */
PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12),
};
enum pci_irq_reroute_variant {

View File

@ -191,6 +191,9 @@ config HARDENED_USERCOPY_PAGESPAN
config FORTIFY_SOURCE
bool "Harden common str/mem functions against buffer overflows"
depends on ARCH_HAS_FORTIFY_SOURCE
# https://bugs.llvm.org/show_bug.cgi?id=50322
# https://bugs.llvm.org/show_bug.cgi?id=41459
depends on !CC_IS_CLANG
help
Detect overflows of buffers in common string and memory functions
where the compiler can determine and validate the buffer sizes.