mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
This is the 5.4.20 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl5HElwACgkQONu9yGCS aT6GQBAAxBLl+L518k3/Jm7Fv5VGFtfk7QIJmLKSdI58Gj7aLib2CulB5dJpHu0Z uOJXEUKQoUC739MjS6IgrAUoee/GTgyeOS1gyI49IBVvrBgjQop/3FJ4Oe4EF6Wj aEy7xA1k1MRUM4XWy3PiMvIuaxWNWoEn22DS703adOKPEx2yS0sPtAf6RRRpzxW+ oWR9aJv5y+wKRi7frRvTJ8juQoeo67XHNQWBybv7v+th7KqF33EYk/faLJqTbqNd caJAG+DuGsu/oLcwlWEE5CZ8rP5OAOh12505J9XG5uXoqA2BrQFCTLW6okG1PUNI I+GugtMKWwOSP8dHkfq/jPKInG3H+mCwVW3wWzKfWBJwIi4NWokYK31SQty1BNBe if9ytUT97ykgkovVjVbu+X+wMnEes2JMrVyBAzY2cOK01KD2PUR/cLdZZXTil4A0 rEKXd+tJRN7+ko+z4EJRdstzNtB030tDeEUmwJSIlJoWPRROk69it8d4/OFXe+/u Le4T4V6w22tcP0H/2CtDSwTntDbjNoXWpTGzqp2HO0urObqZyX99leyCI8Ee9sRz 00B6ykAOnOMPdLmAGmpBXnhKRK89VlnfG5A/d609km4EPJuKZyX9KS6tZSwpJIAd 3W9FWaNyr8Z79BDJyeK0ftS5BD/WNGDLux7lylLzMsPAmF7YNsI= =Zp/p -----END PGP SIGNATURE----- Merge 5.4.20 into android-5.4 Changes in 5.4.20 ASoC: pcm: update FE/BE trigger order based on the command hv_sock: Remove the accept port restriction IB/mlx4: Fix memory leak in add_gid error flow IB/srp: Never use immediate data if it is disabled by a user IB/mlx4: Fix leak in id_map_find_del RDMA/netlink: Do not always generate an ACK for some netlink operations RDMA/i40iw: fix a potential NULL pointer dereference RDMA/core: Fix locking in ib_uverbs_event_read RDMA/uverbs: Verify MR access flags RDMA/cma: Fix unbalanced cm_id reference count during address resolve RDMA/umem: Fix ib_umem_find_best_pgsz() scsi: ufs: Fix ufshcd_probe_hba() reture value in case ufshcd_scsi_add_wlus() fails PCI/IOV: Fix memory leak in pci_iov_add_virtfn() ath10k: pci: Only dump ATH10K_MEM_REGION_TYPE_IOREG when safe PCI/switchtec: Use dma_set_mask_and_coherent() PCI/switchtec: Fix vep_vector_number ioread width PCI: tegra: Fix afi_pex2_ctrl reg offset for Tegra30 PCI: Don't disable bridge BARs when assigning bus resources PCI/AER: Initialize aer_fifo iwlwifi: mvm: avoid use after free for pmsr request bpftool: Don't crash on missing xlated program instructions bpf, sockmap: Don't sleep while holding RCU lock on tear-down bpf, sockhash: Synchronize_rcu before free'ing map selftests/bpf: Test freeing sockmap/sockhash with a socket in it bpf: Improve bucket_log calculation logic bpf, sockmap: Check update requirements after locking nfs: NFS_SWAP should depend on SWAP NFS: Revalidate the file size on a fatal write error NFS/pnfs: Fix pnfs_generic_prepare_to_resend_writes() NFS: Fix fix of show_nfs_errors NFSv4: pnfs_roc() must use cred_fscmp() to compare creds NFSv4: try lease recovery on NFS4ERR_EXPIRED NFSv4.0: nfs4_do_fsinfo() should not do implicit lease renewals x86/boot: Handle malformed SRAT tables during early ACPI parsing rtc: hym8563: Return -EINVAL if the time is known to be invalid rtc: cmos: Stop using shared IRQ watchdog: qcom: Use platform_get_irq_optional() for bark irq ARC: [plat-axs10x]: Add missing multicast filter number to GMAC node platform/x86: intel_mid_powerbtn: Take a copy of ddata arm64: dts: qcom: msm8998: Fix tcsr syscon size arm64: dts: uDPU: fix broken ethernet ARM: dts: at91: Reenable UART TX pull-ups ARM: dts: am43xx: add support for clkout1 clock arm64: dts: renesas: r8a77990: ebisu: Remove clkout-lr-synchronous from sound arm64: dts: marvell: clearfog-gt-8k: fix switch cpu port node ARM: dts: meson8: use the actual frequency for the GPU's 182.1MHz OPP ARM: dts: meson8b: use the actual frequency for the GPU's 364MHz OPP ARM: dts: at91: sama5d3: fix maximum peripheral clock rates ARM: dts: at91: sama5d3: define clock rate range for tcb1 tools/power/acpi: fix compilation error soc: qcom: rpmhpd: Set 'active_only' for active only power domains Revert "powerpc/pseries/iommu: Don't use dma_iommu_ops on secure guests" powerpc/ptdump: Fix W+X verification call in mark_rodata_ro() powerpc/ptdump: Only enable PPC_CHECK_WX with STRICT_KERNEL_RWX powerpc/papr_scm: Fix leaking 'bus_desc.provider_name' in some paths powerpc/pseries/vio: Fix iommu_table use-after-free refcount warning powerpc/pseries: Allow not having ibm, hypertas-functions::hcall-multi-tce for DDW iommu/arm-smmu-v3: Populate VMID field for CMDQ_OP_TLBI_NH_VA ARM: at91: pm: use SAM9X60 PMC's compatible ARM: at91: pm: use of_device_id array to find the proper shdwc node KVM: arm/arm64: vgic-its: Fix restoration of unmapped collections ARM: 8949/1: mm: mark free_memmap as __init sched/uclamp: Fix a bug in propagating uclamp value in new cgroups arm64: cpufeature: Fix the type of no FP/SIMD capability arm64: cpufeature: Set the FP/SIMD compat HWCAP bits properly arm64: ptrace: nofpsimd: Fail FP/SIMD regset operations KVM: arm/arm64: Fix young bit from mmu notifier KVM: arm: Fix DFSR setting for non-LPAE aarch32 guests KVM: arm: Make inject_abt32() inject an external abort instead KVM: arm64: pmu: Don't increment SW_INCR if PMCR.E is unset KVM: arm64: pmu: Fix chained SW_INCR counters KVM: arm64: Treat emulated TVAL TimerValue as a signed 32-bit integer arm64: nofpsmid: Handle TIF_FOREIGN_FPSTATE flag cleanly mtd: onenand_base: Adjust indentation in onenand_read_ops_nolock mtd: sharpslpart: Fix unsigned comparison to zero crypto: testmgr - don't try to decrypt uninitialized buffers crypto: artpec6 - return correct error code for failed setkey() crypto: atmel-sha - fix error handling when setting hmac key crypto: caam/qi2 - fix typo in algorithm's driver name drivers: watchdog: stm32_iwdg: set WDOG_HW_RUNNING at probe media: i2c: adv748x: Fix unsafe macros dt-bindings: iio: adc: ad7606: Fix wrong maxItems value bcache: avoid unnecessary btree nodes flushing in btree_flush_write() selinux: revert "stop passing MAY_NOT_BLOCK to the AVC upon follow_link" selinux: fix regression introduced by move_mount(2) syscall pinctrl: sh-pfc: r8a77965: Fix DU_DOTCLKIN3 drive/bias control pinctrl: sh-pfc: r8a7778: Fix duplicate SDSELF_B and SD1_CLK_B regmap: fix writes to non incrementing registers mfd: max77650: Select REGMAP_IRQ in Kconfig clk: meson: g12a: fix missing uart2 in regmap table dmaengine: axi-dmac: add a check for devm_regmap_init_mmio mwifiex: Fix possible buffer overflows in mwifiex_ret_wmm_get_status() mwifiex: Fix possible buffer overflows in mwifiex_cmd_append_vsie_tlv() libertas: don't exit from lbs_ibss_join_existing() with RCU read lock held libertas: make lbs_ibss_join_existing() return error code on rates overflow selinux: fall back to ref-walk if audit is required Linux 5.4.20 Signed-off-by: Greg Kroah-Hartman <[email protected]> Change-Id: I68c0ac72422e279b38324afc91dc52df3eadc0f7
This commit is contained in:
commit
e736cc6873
101 changed files with 899 additions and 420 deletions
|
|
@ -417,10 +417,14 @@ err:
|
|||
|
||||
/* Journalling */
|
||||
|
||||
#define nr_to_fifo_front(p, front_p, mask) (((p) - (front_p)) & (mask))
|
||||
|
||||
static void btree_flush_write(struct cache_set *c)
|
||||
{
|
||||
struct btree *b, *t, *btree_nodes[BTREE_FLUSH_NR];
|
||||
unsigned int i, n;
|
||||
unsigned int i, nr, ref_nr;
|
||||
atomic_t *fifo_front_p, *now_fifo_front_p;
|
||||
size_t mask;
|
||||
|
||||
if (c->journal.btree_flushing)
|
||||
return;
|
||||
|
|
@ -433,12 +437,50 @@ static void btree_flush_write(struct cache_set *c)
|
|||
c->journal.btree_flushing = true;
|
||||
spin_unlock(&c->journal.flush_write_lock);
|
||||
|
||||
/* get the oldest journal entry and check its refcount */
|
||||
spin_lock(&c->journal.lock);
|
||||
fifo_front_p = &fifo_front(&c->journal.pin);
|
||||
ref_nr = atomic_read(fifo_front_p);
|
||||
if (ref_nr <= 0) {
|
||||
/*
|
||||
* do nothing if no btree node references
|
||||
* the oldest journal entry
|
||||
*/
|
||||
spin_unlock(&c->journal.lock);
|
||||
goto out;
|
||||
}
|
||||
spin_unlock(&c->journal.lock);
|
||||
|
||||
mask = c->journal.pin.mask;
|
||||
nr = 0;
|
||||
atomic_long_inc(&c->flush_write);
|
||||
memset(btree_nodes, 0, sizeof(btree_nodes));
|
||||
n = 0;
|
||||
|
||||
mutex_lock(&c->bucket_lock);
|
||||
list_for_each_entry_safe_reverse(b, t, &c->btree_cache, list) {
|
||||
/*
|
||||
* It is safe to get now_fifo_front_p without holding
|
||||
* c->journal.lock here, because we don't need to know
|
||||
* the exactly accurate value, just check whether the
|
||||
* front pointer of c->journal.pin is changed.
|
||||
*/
|
||||
now_fifo_front_p = &fifo_front(&c->journal.pin);
|
||||
/*
|
||||
* If the oldest journal entry is reclaimed and front
|
||||
* pointer of c->journal.pin changes, it is unnecessary
|
||||
* to scan c->btree_cache anymore, just quit the loop and
|
||||
* flush out what we have already.
|
||||
*/
|
||||
if (now_fifo_front_p != fifo_front_p)
|
||||
break;
|
||||
/*
|
||||
* quit this loop if all matching btree nodes are
|
||||
* scanned and record in btree_nodes[] already.
|
||||
*/
|
||||
ref_nr = atomic_read(fifo_front_p);
|
||||
if (nr >= ref_nr)
|
||||
break;
|
||||
|
||||
if (btree_node_journal_flush(b))
|
||||
pr_err("BUG: flush_write bit should not be set here!");
|
||||
|
||||
|
|
@ -454,17 +496,44 @@ static void btree_flush_write(struct cache_set *c)
|
|||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Only select the btree node which exactly references
|
||||
* the oldest journal entry.
|
||||
*
|
||||
* If the journal entry pointed by fifo_front_p is
|
||||
* reclaimed in parallel, don't worry:
|
||||
* - the list_for_each_xxx loop will quit when checking
|
||||
* next now_fifo_front_p.
|
||||
* - If there are matched nodes recorded in btree_nodes[],
|
||||
* they are clean now (this is why and how the oldest
|
||||
* journal entry can be reclaimed). These selected nodes
|
||||
* will be ignored and skipped in the folowing for-loop.
|
||||
*/
|
||||
if (nr_to_fifo_front(btree_current_write(b)->journal,
|
||||
fifo_front_p,
|
||||
mask) != 0) {
|
||||
mutex_unlock(&b->write_lock);
|
||||
continue;
|
||||
}
|
||||
|
||||
set_btree_node_journal_flush(b);
|
||||
|
||||
mutex_unlock(&b->write_lock);
|
||||
|
||||
btree_nodes[n++] = b;
|
||||
if (n == BTREE_FLUSH_NR)
|
||||
btree_nodes[nr++] = b;
|
||||
/*
|
||||
* To avoid holding c->bucket_lock too long time,
|
||||
* only scan for BTREE_FLUSH_NR matched btree nodes
|
||||
* at most. If there are more btree nodes reference
|
||||
* the oldest journal entry, try to flush them next
|
||||
* time when btree_flush_write() is called.
|
||||
*/
|
||||
if (nr == BTREE_FLUSH_NR)
|
||||
break;
|
||||
}
|
||||
mutex_unlock(&c->bucket_lock);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
for (i = 0; i < nr; i++) {
|
||||
b = btree_nodes[i];
|
||||
if (!b) {
|
||||
pr_err("BUG: btree_nodes[%d] is NULL", i);
|
||||
|
|
@ -497,6 +566,7 @@ static void btree_flush_write(struct cache_set *c)
|
|||
mutex_unlock(&b->write_lock);
|
||||
}
|
||||
|
||||
out:
|
||||
spin_lock(&c->journal.flush_write_lock);
|
||||
c->journal.btree_flushing = false;
|
||||
spin_unlock(&c->journal.flush_write_lock);
|
||||
|
|
|
|||
Loading…
Reference in a new issue