Linux 4.14.69
Greg KH
maintainerI'm announcing the release of the 4.14.69 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/alpha/kernel/osf_sys.c | 51 ++++++------ arch/arm/boot/dts/tegra30-cardhu.dtsi | 1 arch/arm64/Kconfig | 1 arch/powerpc/include/asm/fadump.h | 3 arch/powerpc/kernel/fadump.c | 91 +++++++++++++++++++--- arch/powerpc/mm/mmu_context_iommu.c | 17 ++-- arch/powerpc/platforms/powernv/pci-ioda.c | 37 +++++++++ arch/powerpc/platforms/pseries/ras.c | 2 arch/sparc/kernel/sys_sparc_32.c | 22 +++-- arch/sparc/kernel/sys_sparc_64.c | 20 +++-- arch/x86/kernel/kexec-bzimage64.c | 2 arch/x86/kvm/vmx.c | 26 ++++-- arch/xtensa/include/asm/cacheasm.h | 69 ++++++++++------- block/bfq-cgroup.c | 3 block/blk-core.c | 7 + certs/system_keyring.c | 3 crypto/asymmetric_keys/pkcs7_key_type.c | 2 drivers/block/zram/zram_drv.c | 7 + drivers/cpufreq/cpufreq_governor.c | 12 ++- drivers/crypto/caam/caamalg_qi.c | 6 - drivers/crypto/caam/caampkc.c | 20 ++--- drivers/crypto/caam/jr.c | 3 drivers/crypto/vmx/aes_cbc.c | 30 +++---- drivers/crypto/vmx/aes_xts.c | 21 +++-- drivers/extcon/extcon.c | 3 drivers/gpu/drm/i915/i915_gem_userptr.c | 3 drivers/hv/channel.c | 40 ++++++---- drivers/hv/channel_mgmt.c | 6 + drivers/iio/accel/sca3000.c | 1 drivers/iio/frequency/ad9523.c | 4 - drivers/infiniband/sw/rxe/rxe_comp.c | 1 drivers/infiniband/ulp/srpt/ib_srpt.c | 3 drivers/iommu/dmar.c | 6 - drivers/iommu/intel-iommu.c | 18 ++++ drivers/mailbox/mailbox-xgene-slimpro.c | 6 - drivers/md/bcache/writeback.c | 4 - drivers/md/dm-cache-metadata.c | 13 ++- drivers/md/dm-crypt.c | 10 +- drivers/md/dm-integrity.c | 6 - drivers/md/dm-thin.c | 2 drivers/media/i2c/tvp5150.c | 2 drivers/mfd/hi655x-pmic.c | 2 drivers/misc/cxl/main.c | 2 drivers/misc/vmw_balloon.c | 67 ++++++++++------ drivers/mmc/host/renesas_sdhi_internal_dmac.c | 2 drivers/net/wireless/marvell/libertas/dev.h | 1 drivers/net/wireless/marvell/libertas/if_sdio.c | 30 ++++++- drivers/nvdimm/bus.c | 4 - drivers/pwm/pwm-tiehrpwm.c | 14 --- drivers/rtc/rtc-omap.c | 14 +-- drivers/spi/spi-cadence.c | 2 drivers/spi/spi-davinci.c | 2 drivers/spi/spi-fsl-dspi.c | 24 +++--- drivers/spi/spi-pxa2xx.c | 4 + drivers/tty/serial/serial_core.c | 17 +++- drivers/video/fbdev/core/fbmem.c | 38 ++++++++- fs/9p/xattr.c | 6 + fs/nfs/blocklayout/dev.c | 2 fs/nfs/callback_proc.c | 14 ++- fs/nfs/nfs4proc.c | 9 ++ fs/nfs/pnfs_nfs.c | 16 +--- fs/overlayfs/readdir.c | 19 ++++ fs/quota/quota.c | 2 fs/ubifs/journal.c | 21 ++++- fs/ubifs/lprops.c | 8 +- fs/ubifs/xattr.c | 24 ++++++ fs/xattr.c | 2 include/linux/hyperv.h | 2 include/linux/intel-iommu.h | 8 +- include/linux/pci.h | 12 +++ include/linux/sunrpc/clnt.h | 1 include/linux/verification.h | 6 + include/video/udlfb.h | 2 kernel/livepatch/core.c | 6 + kernel/power/Kconfig | 1 kernel/printk/printk_safe.c | 4 - kernel/sys.c | 95 +++++++++++------------- kernel/trace/blktrace.c | 4 + kernel/trace/trace.c | 4 - kernel/trace/trace_uprobe.c | 2 kernel/user_namespace.c | 24 ++---- kernel/utsname_sysctl.c | 41 ++++++---- mm/memory.c | 9 -- mm/readahead.c | 12 ++- net/9p/client.c | 2 net/9p/trans_fd.c | 7 + net/9p/trans_rdma.c | 3 net/9p/trans_virtio.c | 13 +++ net/9p/trans_xen.c | 3 net/ieee802154/6lowpan/tx.c | 21 ++++- net/mac802154/tx.c | 15 +++ net/sunrpc/clnt.c | 28 +++++-- security/commoncap.c | 2 tools/perf/util/auxtrace.c | 3 95 files changed, 842 insertions(+), 420 deletions(-)
Adrian Hunter (1):
perf auxtrace: Fix queue resize
Alexander Aring (2):
net: 6lowpan: fix reserved space for single frames
net: mac802154: tx: expand tailroom if necessary
Amir Goldstein (1):
ovl: fix wrong use of impure dir cache in ovl_iterate()
Bart Van Assche (2):
ib_srpt: Fix a use-after-free in srpt_close_ch()
RDMA/rxe: Set wqe->status correctly if an unexpected response is received
Bartosz Golaszewski (1):
spi: davinci: fix a NULL pointer dereference
Benjamin Herrenschmidt (1):
powerpc/powernv/pci: Work around races in PCI bridge enabling
Bill Baker (1):
NFSv4 client live hangs after live data migration recovery
Chanwoo Choi (1):
extcon: Release locking when sending the notification of connector state
Chirantan Ekbote (1):
9p/net: Fix zero-copy path in the 9p virtio transport
Christian Brauner (1):
getxattr: use correct xattr length
Dan Carpenter (1):
pnfs/blocklayout: off by one in bl_map_stripe()
Daniel Mack (1):
libertas: fix suspend and resume for SDIO connected cards
Dexuan Cui (1):
Drivers: hv: vmbus: Reset the channel callback in vmbus_onoffer_rescind()
Eddie.Horng (1):
cap_inode_getsecurity: use d_find_any_alias() instead of d_find_alias()
Frederick Lawler (1):
PCI: Add wrappers for dev_printk()
Greg Kroah-Hartman (1):
Linux 4.14.69
Gustavo A. R. Silva (2):
mailbox: xgene-slimpro: Fix potential NULL pointer dereference
iio: sca3000: Fix missing return in switch
Hari Bathini (1):
powerpc/fadump: handle crash memory ranges array index overflow
Henry Willard (1):
cpufreq: governor: Avoid accessing invalid governor_data
Horia Geantă (3):
crypto: caam - fix DMA mapping direction for RSA forms 2 & 3
crypto: caam/jr - fix descriptor DMA unmapping
crypto: caam/qi - fix error path in xts setkey
Hou Tao (1):
dm thin: stop no_space_timeout worker when switching to write-mode
Ilya Dryomov (1):
dm cache metadata: set dirty on all cache blocks after a crash
Jacob Pan (2):
iommu/vt-d: Add definitions for PFSID
iommu/vt-d: Fix dev iotlb pfsid use
James Morse (1):
arm64: mm: always enable CONFIG_HOLES_IN_ZONE
Janek Kotas (1):
spi: cadence: Change usleep_range() to udelay(), for atomic context
Jann Horn (2):
sys: don't hold uts_sem while accessing userspace memory
userns: move user access out of the mutex
Javier Martinez Canillas (1):
media: Revert "[media] tvp5150: fix pad format frame height"
Jeremy Cline (1):
fs/quota: Fix spectre gadget in do_quotactl
Johan Hovold (1):
rtc: omap: fix potential crash on power off
Jon Hunter (1):
ARM: tegra: Fix Tegra30 Cardhu PCA954x reset
Kamalesh Babulal (1):
livepatch: Validate module/old func name length
Krzysztof Kozlowski (1):
spi: spi-fsl-dspi: Fix imprecise abort on VF500 during probe
Lars-Peter Clausen (2):
iio: ad9523: Fix displayed phase
iio: ad9523: Fix return value for ad952x_store()
Maciej S. Szmigiero (1):
block, bfq: return nbytes and not zero from struct cftype .write() method
Mahesh Salgaonkar (1):
powerpc/pseries: Fix endianness while restoring of r3 in MCE handler.
Markus Stockhausen (1):
readahead: stricter check for bdi io_pages
Matthew Auld (1):
drm/i915/userptr: reject zero user_size
Max Filippov (2):
xtensa: limit offsets in __loop_cache_{all,page}
xtensa: increase ranges in ___invalidate_{i,d}cache_all
Mika Westerberg (1):
spi: pxa2xx: Add support for Intel Ice Lake
Mike Snitzer (1):
dm cache metadata: save in-core policy_hint_size to on-disk superblock
Mikulas Patocka (4):
dm integrity: change 'suspending' variable from bool to int dm crypt: don't decrease device limits
fb: fix lost console when the user unplugs a USB adapter
udlfb: set optimal write delay
Ming Lei (1):
block: really disable runtime-pm for blk-mq
Nadav Amit (4):
vmw_balloon: fix inflation of 64-bit GFNs
vmw_balloon: do not use 2MB without batching
vmw_balloon: VMCI_DOORBELL_SET does not check status
vmw_balloon: fix VMCI use when balloon built into kernel
Ondrej Mosnacek (1):
crypto: vmx - Fix sleep-in-atomic bugs
Paolo Bonzini (1):
KVM: VMX: fixes for vmentry_l1d_flush module parameter
Paul Mackerras (1):
KVM: PPC: Book3S: Fix guest DMA when guest partially backed by THP pages
Peter Kalauskas (1):
drivers/block/zram/zram_drv.c: fix bug storing backing_dev
Peter Zijlstra (1):
mm/tlb: Remove tlb_remove_table() non-concurrent condition
Rafael David Tinoco (1):
mfd: hi655x: Fix regmap area declared size for hi655x
Richard Weinberger (5):
ubifs: Fix memory leak in lprobs self-check Revert "UBIFS: Fix potential integer overflow in allocation"
ubifs: Check data node size before truncate
ubifs: xattr: Don't operate on deleted inodes
ubifs: Fix synced_i_size calculation for xattr inodes
Sergei Shtylyov (1):
mmc: renesas_sdhi_internal_dmac: fix #define RST_RESERVED_BITS
Shan Hai (1):
bcache: release dc->writeback_lock properly in bch_writeback_thread()
Steven Rostedt (VMware) (4):
tracing: Do not call start/stop() functions when tracing_on does not change tracing/blktrace: Fix to allow setting same value printk/tracing: Do not trace printk_nmi_enter()
uprobes: Use synchronize_rcu() not synchronize_sched()
Tomas Bortoli (3):
9p: fix multiple NULL-pointer-dereferences
net/9p/client.c: version pointer uninitialized net/9p/trans_fd.c: fix race-condition by flushing workqueue before the kfree()
Trond Myklebust (2):
NFSv4: Fix locking in pnfs_generic_recover_commit_reqs
NFSv4: Fix a sleep in atomic context in nfs4_callback_sequence()
Tycho Andersen (1):
uart: fix race between uart_put_char() and uart_shutdown()
Vaibhav Jain (1):
cxl: Fix wrong comparison in cxl_adapter_context_get()
Vignesh R (2):
pwm: tiehrpwm: Don't use emulation mode bits to control PWM output
pwm: tiehrpwm: Fix disabling of output of PWMs
Vishal Verma (1):
libnvdimm: fix ars_status output length calculation
Yannik Sembritzki (2):
Replace magic for trusting the secondary keyring with #define Fix kexec forbidding kernels signed with keys in the secondary keyring to boot
jiangyiwen (1):
9p/virtio: fix off-by-one error in sg list bounds check
piaojun (1):
fs/9p/xattr.c: catch the error of p9_client_clunk when setting xattr failed
xiao jin (1):
block: blk_init_allocated_queue() set q->fq as NULL in the fail case
zhangyi (F) (1):
PM / sleep: wakeup: Fix build error caused by missing SRCU support
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 68 +SUBLEVEL = 69 EXTRAVERSION = NAME = Petit Gorille
arch/alpha/kernel/osf_sys.c +24 -27
92 lines not on this page · raw message
arch/arm/boot/dts/tegra30-cardhu.dtsi +1 -0
@@ -206,6 +206,7 @@ #address-cells = <1>; #size-cells = <0>; reg = <0x70>; + reset-gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_LOW>; }; };
arch/arm64/Kconfig +0 -1
@@ -693,7 +693,6 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK config HOLES_IN_ZONE def_bool y - depends on NUMA source kernel/Kconfig.preempt source kernel/Kconfig.hz
arch/powerpc/include/asm/fadump.h +0 -3
@@ -195,9 +195,6 @@ struct fadump_crash_info_header {struct cpumask online_mask; }; -/* Crash memory ranges */ -#define INIT_CRASHMEM_RANGES (INIT_MEMBLOCK_REGIONS + 2) -struct fad_crash_memory_ranges {unsigned long long base;unsigned long long size;
arch/powerpc/kernel/fadump.c +77 -14
167 lines not on this page · raw message
arch/powerpc/mm/mmu_context_iommu.c +10 -7
@@ -130,6 +130,7 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries,long i, j, ret =0 , locked_entries =0 ;unsigned int pageshift;unsigned long flags; +unsigned long cur_ua;struct page *page =NULL ;mutex_lock (&mem_list_mutex);
@@ -178,7 +179,8 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries, }for (i =0 ; i < entries; ++i) { -if (1 !=get_user_pages_fast (ua + (i <<PAGE_SHIFT ), + cur_ua = ua + (i <<PAGE_SHIFT ); +if (1 !=get_user_pages_fast (cur_ua,1 /* pages */ ,1 /* iswrite */ , &page)) { ret = -EFAULT ;for (j =0 ; j < i; ++j)
@@ -197,7 +199,7 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries,if (is_migrate_cma_page (page)) {if (mm_iommu_move_page_from_cma (page)) goto populate; -if (1 !=get_user_pages_fast (ua + (i <<PAGE_SHIFT ), +if (1 !=get_user_pages_fast (cur_ua,1 /* pages */ ,1 /* iswrite */ , &page)) { ret = -EFAULT ;
@@ -211,20 +213,21 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries, } populate: pageshift =PAGE_SHIFT ; -if (PageCompound (page)) { +if (mem->pageshift >PAGE_SHIFT &&PageCompound (page)) {pte_t *pte;struct page *head =compound_head (page);unsigned int compshift =compound_order (head); +unsigned int pteshift;local_irq_save (flags);/* disables as well */ - pte =find_linux_pte (mm->pgd, ua,NULL , &pageshift); -local_irq_restore (flags); + pte =find_linux_pte (mm->pgd, cur_ua,NULL , &pteshift);/* Double check it is still the same pinned page */ if (pte &&pte_page (*pte) == head && - pageshift == compshift) - pageshift = max_t(unsigned int, pageshift, + pteshift == compshift +PAGE_SHIFT ) + pageshift = max_t(unsigned int, pteshift,PAGE_SHIFT ); +local_irq_restore (flags); } mem->pageshift =min (mem->pageshift, pageshift); mem->hpas[i] =page_to_pfn (page) <<PAGE_SHIFT ;
arch/powerpc/platforms/powernv/pci-ioda.c +37 -0
@@ -3286,12 +3286,49 @@ static void pnv_pci_ioda_create_dbgfs(void)#endif /* CONFIG_DEBUG_FS */ } +static void pnv_pci_enable_bridge (struct pci_bus *bus) +{ +struct pci_dev *dev = bus->self; +struct pci_bus *child; + +/* Empty bus ? bail */ +if (list_empty (&bus->devices)) +return ; + +/* +* If there's a bridge associated with that bus enable it. This works +* around races in the generic code if the enabling is done during +* parallel probing. This can be removed once those races have been +* fixed. +*/ +if (dev) { +int rc =pci_enable_device (dev); +if (rc) +pci_err (dev,"Error enabling bridge (%d)\n" , rc); +pci_set_master (dev); + } + +/* Perform the same to child busses */ +list_for_each_entry (child, &bus->children, node) +pnv_pci_enable_bridge (child); +} + +static void pnv_pci_enable_bridges (void ) +{ +struct pci_controller *hose; + +list_for_each_entry (hose, &hose_list, list_node) +pnv_pci_enable_bridge (hose->bus); +} +static void pnv_pci_ioda_fixup (void ) {pnv_pci_ioda_setup_PEs ();pnv_pci_ioda_setup_iommu_api ();pnv_pci_ioda_create_dbgfs (); +pnv_pci_enable_bridges (); +#ifdef CONFIG_EEH eeh_init ();eeh_addr_cache_build ();
arch/powerpc/platforms/pseries/ras.c +1 -1
@@ -360,7 +360,7 @@ static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs) } savep =__va (regs->gpr[3 ]); - regs->gpr[3 ] = savep[0 ];/* restore original r3 */ + regs->gpr[3 ] =be64_to_cpu (savep[0 ]);/* restore original r3 */ /* If it isn't an extended log we can use the per cpu 64bit buffer */ h = (struct rtas_error_log *)&savep[1 ];
arch/sparc/kernel/sys_sparc_32.c +13 -9
@@ -204,23 +204,27 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig,asmlinkage long sys_getdomainname (char __user *name,int len) { -int nlen, err; - +int nlen, err; +char tmp[__NEW_UTS_LEN +1 ]; +if (len <0 )return -EINVAL ; -down_read (&uts_sem); - +down_read (&uts_sem); + nlen =strlen (utsname ()->domainname) +1 ; err = -EINVAL ;if (nlen > len) - goto out; + goto out_unlock; +memcpy (tmp,utsname ()->domainname, nlen); - err = -EFAULT ; -if (!copy_to_user (name,utsname ()->domainname, nlen)) - err =0 ; +up_read (&uts_sem); -out: +if (copy_to_user (name, tmp, nlen)) +return -EFAULT ; +return 0 ; + +out_unlock:up_read (&uts_sem);return err; }
arch/sparc/kernel/sys_sparc_64.c +12 -8
@@ -527,23 +527,27 @@ extern void check_pending(int signum); SYSCALL_DEFINE2(getdomainname, char __user *, name, int, len) { -int nlen, err; +int nlen, err; +char tmp[__NEW_UTS_LEN +1 ];if (len <0 )return -EINVAL ; -down_read (&uts_sem); - +down_read (&uts_sem); + nlen =strlen (utsname ()->domainname) +1 ; err = -EINVAL ;if (nlen > len) - goto out; + goto out_unlock; +memcpy (tmp,utsname ()->domainname, nlen); + +up_read (&uts_sem); - err = -EFAULT ; -if (!copy_to_user (name,utsname ()->domainname, nlen)) - err =0 ; +if (copy_to_user (name, tmp, nlen)) +return -EFAULT ; +return 0 ; -out: +out_unlock:up_read (&uts_sem);return err; }
arch/x86/kernel/kexec-bzimage64.c +1 -1
@@ -532,7 +532,7 @@ static int bzImage64_cleanup(void *loader_data)static int bzImage64_verify_sig (const char *kernel,unsigned long kernel_len) {return verify_pefile_signature (kernel, kernel_len, -NULL , +VERIFY_USE_SECONDARY_KEYRING ,VERIFYING_KEXEC_PE_SIGNATURE ); }#endif
arch/x86/kvm/vmx.c +16 -10
@@ -200,12 +200,14 @@ static enum vmx_l1d_flush_state __read_mostly vmentry_l1d_flush_param = VMENTER_static const struct {const char *option; -enum vmx_l1d_flush_state cmd; +bool for_parse; } vmentry_l1d_param[] = { - {"auto" ,VMENTER_L1D_FLUSH_AUTO }, - {"never" ,VMENTER_L1D_FLUSH_NEVER }, - {"cond" ,VMENTER_L1D_FLUSH_COND }, - {"always" ,VMENTER_L1D_FLUSH_ALWAYS }, + [VMENTER_L1D_FLUSH_AUTO ] = {"auto" , true}, + [VMENTER_L1D_FLUSH_NEVER ] = {"never" , true}, + [VMENTER_L1D_FLUSH_COND ] = {"cond" , true}, + [VMENTER_L1D_FLUSH_ALWAYS ] = {"always" , true}, + [VMENTER_L1D_FLUSH_EPT_DISABLED ] = {"EPT disabled" , false}, + [VMENTER_L1D_FLUSH_NOT_REQUIRED ] = {"not required" , false}, };#define L1D_CACHE_ORDER 4
@@ -289,8 +291,9 @@ static int vmentry_l1d_flush_parse(const char *s)if (s) {for (i =0 ; i <ARRAY_SIZE (vmentry_l1d_param); i++) { -if (sysfs_streq (s, vmentry_l1d_param[i].option)) -return vmentry_l1d_param[i].cmd; +if (vmentry_l1d_param[i].for_parse && +sysfs_streq (s, vmentry_l1d_param[i].option)) +return i; } }return -EINVAL ;
@@ -300,13 +303,13 @@ static int vmentry_l1d_flush_set(const char *s, const struct kernel_param *kp) {int l1tf, ret; -if (!boot_cpu_has (X86_BUG_L1TF )) -return 0 ; - l1tf =vmentry_l1d_flush_parse (s);if (l1tf <0 )return l1tf; +if (!boot_cpu_has (X86_BUG_L1TF )) +return 0 ; +/* * Has vmx_init() run already? If not then this is the pre init * parameter parsing. In that case just store the value and let
@@ -326,6 +329,9 @@ static int vmentry_l1d_flush_set(const char *s, const struct kernel_param *kp)static int vmentry_l1d_flush_get (char *s,const struct kernel_param *kp) { +if (WARN_ON_ONCE (l1tf_vmx_mitigation >=ARRAY_SIZE (vmentry_l1d_param))) +return sprintf (s,"???\n" ); +return sprintf (s,"%s\n" , vmentry_l1d_param[l1tf_vmx_mitigation].option); }
arch/xtensa/include/asm/cacheasm.h +42 -27
144 lines not on this page · raw message
block/bfq-cgroup.c +2 -1
@@ -887,7 +887,8 @@ static ssize_t bfq_io_set_weight(struct kernfs_open_file *of,if (ret)return ret; -return bfq_io_set_weight_legacy (of_css (of),NULL , weight); + ret =bfq_io_set_weight_legacy (of_css (of),NULL , weight); +return ret ?: nbytes; }static int bfqg_print_stat (struct seq_file *sf,void *v)
block/blk-core.c +5 -2
@@ -1025,6 +1025,7 @@ int blk_init_allocated_queue(struct request_queue *q) q->exit_rq_fn (q, q->fq->flush_rq); out_free_flush_queue:blk_free_flush_queue (q->fq); + q->fq =NULL ;return -ENOMEM ; }EXPORT_SYMBOL (blk_init_allocated_queue);
@@ -3458,9 +3459,11 @@ EXPORT_SYMBOL(blk_finish_plug);*/ void blk_pm_runtime_init (struct request_queue *q,struct device *dev) { -/* not support for RQF_PM and ->rpm_status in blk-mq yet */ -if (q->mq_ops) +/* Don't enable runtime PM for blk-mq until it is ready */ +if (q->mq_ops) { +pm_runtime_disable (dev);return ; + } q->dev = dev; q->rpm_status =RPM_ACTIVE ;
certs/system_keyring.c +2 -1
@@ -15,6 +15,7 @@#include <linux/cred.h> #include <linux/err.h> #include <linux/slab.h> +#include <linux/verification.h> #include <keys/asymmetric-type.h> #include <keys/system_keyring.h> #include <crypto/pkcs7.h>
@@ -230,7 +231,7 @@ int verify_pkcs7_signature(const void *data, size_t len,if (!trusted_keys) { trusted_keys = builtin_trusted_keys; - }else if (trusted_keys == (void *)1UL ) { + }else if (trusted_keys ==VERIFY_USE_SECONDARY_KEYRING ) {#ifdef CONFIG_SECONDARY_TRUSTED_KEYRING trusted_keys = secondary_trusted_keys;#else
crypto/asymmetric_keys/pkcs7_key_type.c +1 -1
@@ -62,7 +62,7 @@ static int pkcs7_preparse(struct key_preparsed_payload *prep)return verify_pkcs7_signature (NULL ,0 , prep->data, prep->datalen, - (void *)1UL , usage, +VERIFY_USE_SECONDARY_KEYRING , usage, pkcs7_view_content, prep); }
drivers/block/zram/zram_drv.c +6 -1
@@ -321,6 +321,7 @@ static ssize_t backing_dev_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { char *file_name; +size_t sz;struct file *backing_dev =NULL ;struct inode *inode;struct address_space *mapping;
@@ -341,7 +342,11 @@ static ssize_t backing_dev_store(struct device *dev, goto out; } -strlcpy (file_name, buf, len); +strlcpy (file_name, buf,PATH_MAX ); +/* ignore trailing newline */ + sz =strlen (file_name); +if (sz >0 && file_name[sz -1 ] =='\n' ) + file_name[sz -1 ] =0x00 ; backing_dev =filp_open (file_name,O_RDWR |O_LARGEFILE ,0 );if (IS_ERR (backing_dev)) {
drivers/cpufreq/cpufreq_governor.c +10 -2
@@ -555,12 +555,20 @@ EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_stop);void cpufreq_dbs_governor_limits (struct cpufreq_policy *policy) { -struct policy_dbs_info *policy_dbs = policy->governor_data; +struct policy_dbs_info *policy_dbs; + +/* Protect gov->gdbs_data against cpufreq_dbs_governor_exit() */ +mutex_lock (&gov_dbs_data_mutex); + policy_dbs = policy->governor_data; +if (!policy_dbs) + goto out;mutex_lock (&policy_dbs->update_mutex);cpufreq_policy_apply_limits (policy);gov_update_sample_delay (policy_dbs,0 ); -mutex_unlock (&policy_dbs->update_mutex); + +out: +mutex_unlock (&gov_dbs_data_mutex); }EXPORT_SYMBOL_GPL (cpufreq_dbs_governor_limits);
drivers/crypto/caam/caamalg_qi.c +2 -4
@@ -350,10 +350,8 @@ static int xts_ablkcipher_setkey(struct crypto_ablkcipher *ablkcipher,int ret =0 ;if (keylen !=2 *AES_MIN_KEY_SIZE && keylen !=2 *AES_MAX_KEY_SIZE ) { -crypto_ablkcipher_set_flags (ablkcipher, -CRYPTO_TFM_RES_BAD_KEY_LEN );dev_err (jrdev,"key size mismatch\n" ); -return -EINVAL ; + goto badkey; }memcpy (ctx->key, key, keylen);
@@ -388,7 +386,7 @@ static int xts_ablkcipher_setkey(struct crypto_ablkcipher *ablkcipher,return ret; badkey:crypto_ablkcipher_set_flags (ablkcipher,CRYPTO_TFM_RES_BAD_KEY_LEN ); -return 0 ; +return -EINVAL ; }/*
drivers/crypto/caam/caampkc.c +10 -10
@@ -71,8 +71,8 @@ static void rsa_priv_f2_unmap(struct device *dev, struct rsa_edesc *edesc,dma_unmap_single (dev, pdb->d_dma, key->d_sz,DMA_TO_DEVICE );dma_unmap_single (dev, pdb->p_dma, p_sz,DMA_TO_DEVICE );dma_unmap_single (dev, pdb->q_dma, q_sz,DMA_TO_DEVICE ); -dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_TO_DEVICE ); -dma_unmap_single (dev, pdb->tmp2_dma, q_sz,DMA_TO_DEVICE ); +dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_BIDIRECTIONAL ); +dma_unmap_single (dev, pdb->tmp2_dma, q_sz,DMA_BIDIRECTIONAL ); } static void rsa_priv_f3_unmap(struct device *dev, struct rsa_edesc *edesc,
@@ -90,8 +90,8 @@ static void rsa_priv_f3_unmap(struct device *dev, struct rsa_edesc *edesc,dma_unmap_single (dev, pdb->dp_dma, p_sz,DMA_TO_DEVICE );dma_unmap_single (dev, pdb->dq_dma, q_sz,DMA_TO_DEVICE );dma_unmap_single (dev, pdb->c_dma, p_sz,DMA_TO_DEVICE ); -dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_TO_DEVICE ); -dma_unmap_single (dev, pdb->tmp2_dma, q_sz,DMA_TO_DEVICE ); +dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_BIDIRECTIONAL ); +dma_unmap_single (dev, pdb->tmp2_dma, q_sz,DMA_BIDIRECTIONAL ); }/* RSA Job Completion handler */
@@ -417,13 +417,13 @@ static int set_rsa_priv_f2_pdb(struct akcipher_request *req, goto unmap_p; } - pdb->tmp1_dma =dma_map_single (dev, key->tmp1, p_sz,DMA_TO_DEVICE ); + pdb->tmp1_dma =dma_map_single (dev, key->tmp1, p_sz,DMA_BIDIRECTIONAL );if (dma_mapping_error (dev, pdb->tmp1_dma)) {dev_err (dev,"Unable to map RSA tmp1 memory\n" ); goto unmap_q; } - pdb->tmp2_dma =dma_map_single (dev, key->tmp2, q_sz,DMA_TO_DEVICE ); + pdb->tmp2_dma =dma_map_single (dev, key->tmp2, q_sz,DMA_BIDIRECTIONAL );if (dma_mapping_error (dev, pdb->tmp2_dma)) {dev_err (dev,"Unable to map RSA tmp2 memory\n" ); goto unmap_tmp1;
@@ -451,7 +451,7 @@ static int set_rsa_priv_f2_pdb(struct akcipher_request *req,return 0 ; unmap_tmp1: -dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_TO_DEVICE ); +dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_BIDIRECTIONAL ); unmap_q:dma_unmap_single (dev, pdb->q_dma, q_sz,DMA_TO_DEVICE ); unmap_p:
@@ -504,13 +504,13 @@ static int set_rsa_priv_f3_pdb(struct akcipher_request *req, goto unmap_dq; } - pdb->tmp1_dma =dma_map_single (dev, key->tmp1, p_sz,DMA_TO_DEVICE ); + pdb->tmp1_dma =dma_map_single (dev, key->tmp1, p_sz,DMA_BIDIRECTIONAL );if (dma_mapping_error (dev, pdb->tmp1_dma)) {dev_err (dev,"Unable to map RSA tmp1 memory\n" ); goto unmap_qinv; } - pdb->tmp2_dma =dma_map_single (dev, key->tmp2, q_sz,DMA_TO_DEVICE ); + pdb->tmp2_dma =dma_map_single (dev, key->tmp2, q_sz,DMA_BIDIRECTIONAL );if (dma_mapping_error (dev, pdb->tmp2_dma)) {dev_err (dev,"Unable to map RSA tmp2 memory\n" ); goto unmap_tmp1;
@@ -538,7 +538,7 @@ static int set_rsa_priv_f3_pdb(struct akcipher_request *req,return 0 ; unmap_tmp1: -dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_TO_DEVICE ); +dma_unmap_single (dev, pdb->tmp1_dma, p_sz,DMA_BIDIRECTIONAL ); unmap_qinv:dma_unmap_single (dev, pdb->c_dma, p_sz,DMA_TO_DEVICE ); unmap_dq:
drivers/crypto/caam/jr.c +2 -1
@@ -190,7 +190,8 @@ static void caam_jr_dequeue(unsigned long devarg)BUG_ON (CIRC_CNT (head, tail + i,JOBR_DEPTH ) <=0 );/* Unmap just-run descriptor so we can post-process */ -dma_unmap_single (dev, jrp->outring[hw_idx].desc, +dma_unmap_single (dev, +caam_dma_to_cpu (jrp->outring[hw_idx].desc), jrp->entinfo[sw_idx].desc_size,DMA_TO_DEVICE );
drivers/crypto/vmx/aes_cbc.c +14 -16
@@ -107,24 +107,23 @@ static int p8_aes_cbc_encrypt(struct blkcipher_desc *desc, ret =crypto_skcipher_encrypt (req);skcipher_request_zero (req); }else { -preempt_disable (); -pagefault_disable (); -enable_kernel_vsx (); -blkcipher_walk_init (&walk, dst, src, nbytes); ret =blkcipher_walk_virt (desc, &walk);while ((nbytes = walk.nbytes)) { +preempt_disable (); +pagefault_disable (); +enable_kernel_vsx ();aes_p8_cbc_encrypt (walk.src.virt.addr, walk.dst.virt.addr, nbytes &AES_BLOCK_MASK , &ctx->enc_key, walk.iv,1 ); +disable_kernel_vsx (); +pagefault_enable (); +preempt_enable (); + nbytes &=AES_BLOCK_SIZE -1 ; ret =blkcipher_walk_done (desc, &walk, nbytes); } - -disable_kernel_vsx (); -pagefault_enable (); -preempt_enable (); }return ret;
@@ -147,24 +146,23 @@ static int p8_aes_cbc_decrypt(struct blkcipher_desc *desc, ret =crypto_skcipher_decrypt (req);skcipher_request_zero (req); }else { -preempt_disable (); -pagefault_disable (); -enable_kernel_vsx (); -blkcipher_walk_init (&walk, dst, src, nbytes); ret =blkcipher_walk_virt (desc, &walk);while ((nbytes = walk.nbytes)) { +preempt_disable (); +pagefault_disable (); +enable_kernel_vsx ();aes_p8_cbc_encrypt (walk.src.virt.addr, walk.dst.virt.addr, nbytes &AES_BLOCK_MASK , &ctx->dec_key, walk.iv,0 ); +disable_kernel_vsx (); +pagefault_enable (); +preempt_enable (); + nbytes &=AES_BLOCK_SIZE -1 ; ret =blkcipher_walk_done (desc, &walk, nbytes); } - -disable_kernel_vsx (); -pagefault_enable (); -preempt_enable (); }return ret;
drivers/crypto/vmx/aes_xts.c +14 -7
@@ -116,32 +116,39 @@ static int p8_aes_xts_crypt(struct blkcipher_desc *desc, ret = enc?crypto_skcipher_encrypt (req) :crypto_skcipher_decrypt (req);skcipher_request_zero (req); }else { +blkcipher_walk_init (&walk, dst, src, nbytes); + + ret =blkcipher_walk_virt (desc, &walk); +preempt_disable ();pagefault_disable ();enable_kernel_vsx (); -blkcipher_walk_init (&walk, dst, src, nbytes); - - ret =blkcipher_walk_virt (desc, &walk); iv = walk.iv;memset (tweak,0 ,AES_BLOCK_SIZE );aes_p8_encrypt (iv, tweak, &ctx->tweak_key); +disable_kernel_vsx (); +pagefault_enable (); +preempt_enable (); +while ((nbytes = walk.nbytes)) { +preempt_disable (); +pagefault_disable (); +enable_kernel_vsx ();if (enc)aes_p8_xts_encrypt (walk.src.virt.addr, walk.dst.virt.addr, nbytes &AES_BLOCK_MASK , &ctx->enc_key,NULL , tweak);else aes_p8_xts_decrypt (walk.src.virt.addr, walk.dst.virt.addr, nbytes &AES_BLOCK_MASK , &ctx->dec_key,NULL , tweak); +disable_kernel_vsx (); +pagefault_enable (); +preempt_enable (); nbytes &=AES_BLOCK_SIZE -1 ; ret =blkcipher_walk_done (desc, &walk, nbytes); } - -disable_kernel_vsx (); -pagefault_enable (); -preempt_enable (); }return ret; }
drivers/extcon/extcon.c +2 -1
@@ -433,8 +433,8 @@ int extcon_sync(struct extcon_dev *edev, unsigned int id)return index;spin_lock_irqsave (&edev->lock, flags); - state = !!(edev->state &BIT (index)); +spin_unlock_irqrestore (&edev->lock, flags);/* * Call functions in a raw notifier chain for the specific one
@@ -448,6 +448,7 @@ int extcon_sync(struct extcon_dev *edev, unsigned int id)*/ raw_notifier_call_chain (&edev->nh_all, state, edev); +spin_lock_irqsave (&edev->lock, flags);/* This could be in interrupt handler */ prop_buf = (char *)get_zeroed_page (GFP_ATOMIC );if (!prop_buf) {
drivers/gpu/drm/i915/i915_gem_userptr.c +3 -0
@@ -782,6 +782,9 @@ i915_gem_userptr_ioctl(struct drm_device *dev, void *data, struct drm_file *file I915_USERPTR_UNSYNCHRONIZED))return -EINVAL ; +if (!args->user_size) +return -EINVAL ; +if (offset_in_page (args->user_ptr | args->user_size))return -EINVAL ;
drivers/hv/channel.c +24 -16
@@ -541,11 +541,8 @@ static void reset_channel_cb(void *arg) channel->onchannel_callback =NULL ; } -static int vmbus_close_internal (struct vmbus_channel *channel) +void vmbus_reset_channel_cb (struct vmbus_channel *channel) { -struct vmbus_channel_close_channel *msg; -int ret; -/* * vmbus_on_event(), running in the per-channel tasklet, can race * with vmbus_close_internal() in the case of SMP guest, e.g., when
@@ -555,6 +552,29 @@ static int vmbus_close_internal(struct vmbus_channel *channel)*/ tasklet_disable (&channel->callback_event); + channel->sc_creation_callback =NULL ; + +/* Stop the callback asap */ +if (channel->target_cpu !=get_cpu ()) { +put_cpu (); +smp_call_function_single (channel->target_cpu, reset_channel_cb, + channel, true); + }else { +reset_channel_cb (channel); +put_cpu (); + } + +/* Re-enable tasklet for use on re-open */ +tasklet_enable (&channel->callback_event); +} + +static int vmbus_close_internal (struct vmbus_channel *channel) +{ +struct vmbus_channel_close_channel *msg; +int ret; + +vmbus_reset_channel_cb (channel); +/* * In case a device driver's probe() fails (e.g., * util_probe() -> vmbus_open() returns -ENOMEM) and the device is
@@ -568,16 +588,6 @@ static int vmbus_close_internal(struct vmbus_channel *channel) } channel->state =CHANNEL_OPEN_STATE ; - channel->sc_creation_callback =NULL ; -/* Stop callback and cancel the timer asap */ -if (channel->target_cpu !=get_cpu ()) { -put_cpu (); -smp_call_function_single (channel->target_cpu, reset_channel_cb, - channel, true); - }else { -reset_channel_cb (channel); -put_cpu (); - }/* Send a closing message */
@@ -620,8 +630,6 @@ static int vmbus_close_internal(struct vmbus_channel *channel) get_order(channel->ringbuffer_pagecount * PAGE_SIZE)); out: -/* re-enable tasklet for use on re-open */ -tasklet_enable (&channel->callback_event);return ret; }
drivers/hv/channel_mgmt.c +6 -0
@@ -881,6 +881,12 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)return ; } +/* +* Before setting channel->rescind in vmbus_rescind_cleanup(), we +* should make sure the channel callback is not running any more. +*/ +vmbus_reset_channel_cb (channel); +/* * Now wait for offer handling to complete. */
drivers/iio/accel/sca3000.c +1 -0
@@ -797,6 +797,7 @@ static int sca3000_write_raw(struct iio_dev *indio_dev,mutex_lock (&st->lock); ret =sca3000_write_3db_freq (st, val);mutex_unlock (&st->lock); +return ret;default :return -EINVAL ; }
drivers/iio/frequency/ad9523.c +2 -2
@@ -508,7 +508,7 @@ static ssize_t ad9523_store(struct device *dev,return ret;if (!state) -return 0 ; +return len;mutex_lock (&indio_dev->mlock);switch ((u32 )this_attr->address) {
@@ -642,7 +642,7 @@ static int ad9523_read_raw(struct iio_dev *indio_dev, code = (AD9523_CLK_DIST_DIV_PHASE_REV (ret) *3141592 ) /AD9523_CLK_DIST_DIV_REV (ret); *val = code /1000000 ; - *val2 = (code %1000000 ) *10 ; + *val2 = code %1000000 ;return IIO_VAL_INT_PLUS_MICRO ;default :return -EINVAL ;
drivers/infiniband/sw/rxe/rxe_comp.c +1 -0
@@ -276,6 +276,7 @@ static inline enum comp_state check_ack(struct rxe_qp *qp,case IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE :if (wqe->wr.opcode !=IB_WR_RDMA_READ && wqe->wr.opcode !=IB_WR_RDMA_READ_WITH_INV ) { + wqe->status =IB_WC_FATAL_ERR ;return COMPST_ERROR ; }reset_retry_counters (qp);
drivers/infiniband/ulp/srpt/ib_srpt.c +1 -2
@@ -1713,8 +1713,7 @@ static bool srpt_close_ch(struct srpt_rdma_ch *ch)int ret;if (!srpt_set_ch_state (ch,CH_DRAINING )) { -pr_debug ("%s-%d: already closed\n" , ch->sess_name, - ch->qp->qp_num); +pr_debug ("%s: already closed\n" , ch->sess_name);return false; }
drivers/iommu/dmar.c +3 -3
@@ -1336,8 +1336,8 @@ void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,qi_submit_sync (&desc, iommu); } -void qi_flush_dev_iotlb (struct intel_iommu *iommu,u16 sid,u16 qdep, -u64 addr,unsigned mask) +void qi_flush_dev_iotlb (struct intel_iommu *iommu,u16 sid,u16 pfsid, +u16 qdep,u64 addr,unsigned mask) {struct qi_desc desc;
@@ -1352,7 +1352,7 @@ void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 qdep, qdep =0 ; desc.low =QI_DEV_IOTLB_SID (sid) |QI_DEV_IOTLB_QDEP (qdep) | -QI_DIOTLB_TYPE ; +QI_DIOTLB_TYPE |QI_DEV_IOTLB_PFSID (pfsid);qi_submit_sync (&desc, iommu); }
drivers/iommu/intel-iommu.c +17 -1
@@ -422,6 +422,7 @@ struct device_domain_info {struct list_head global;/* link to global list */ u8 bus;/* PCI bus number */ u8 devfn;/* PCI devfn number */ +u16 pfsid;/* SRIOV physical function source ID */ u8 pasid_supported:3; u8 pasid_enabled:1; u8 pri_supported:1;
@@ -1502,6 +1503,20 @@ static void iommu_enable_dev_iotlb(struct device_domain_info *info)return ; pdev =to_pci_dev (info->dev); +/* For IOMMU that supports device IOTLB throttling (DIT), we assign +* PFSID to the invalidation desc of a VF such that IOMMU HW can gauge +* queue depth at PF level. If DIT is not set, PFSID will be treated as +* reserved, which should be set to 0. +*/ +if (!ecap_dit (info->iommu->ecap)) + info->pfsid =0 ; +else { +struct pci_dev *pf_pdev; + +/* pdev will be returned if device is not a vf */ + pf_pdev =pci_physfn (pdev); + info->pfsid =PCI_DEVID (pf_pdev->bus->number, pf_pdev->devfn); + }#ifdef CONFIG_INTEL_IOMMU_SVM /* The PCIe spec, in its wisdom, declares that the behaviour of
@@ -1567,7 +1582,8 @@ static void iommu_flush_dev_iotlb(struct dmar_domain *domain, sid = info->bus <<8 | info->devfn; qdep = info->ats_qdep; -qi_flush_dev_iotlb (info->iommu, sid, qdep, addr, mask); +qi_flush_dev_iotlb (info->iommu, sid, info->pfsid, + qdep, addr, mask); }spin_unlock_irqrestore (&device_domain_lock, flags); }
drivers/mailbox/mailbox-xgene-slimpro.c +3 -3
@@ -195,9 +195,9 @@ static int slimpro_mbox_probe(struct platform_device *pdev)platform_set_drvdata (pdev, ctx); regs =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - mb_base =devm_ioremap (&pdev->dev, regs->start,resource_size (regs)); -if (!mb_base) -return -ENOMEM ; + mb_base =devm_ioremap_resource (&pdev->dev, regs); +if (IS_ERR (mb_base)) +return PTR_ERR (mb_base);/* Setup mailbox links */ for (i =0 ; i <MBOX_CNT ; i++) {
drivers/md/bcache/writeback.c +3 -1
@@ -456,8 +456,10 @@ static int bch_writeback_thread(void *arg)* data on cache. BCACHE_DEV_DETACHING flag is set in * bch_cached_dev_detach(). */ -if (test_bit (BCACHE_DEV_DETACHING , &dc->disk.flags)) +if (test_bit (BCACHE_DEV_DETACHING , &dc->disk.flags)) { +up_write (&dc->writeback_lock);break ; + } }up_write (&dc->writeback_lock);
drivers/md/dm-cache-metadata.c +9 -4
@@ -362,7 +362,7 @@ static int __write_initial_superblock(struct dm_cache_metadata *cmd) disk_super->version =cpu_to_le32 (cmd->version);memset (disk_super->policy_name,0 ,sizeof (disk_super->policy_name));memset (disk_super->policy_version,0 ,sizeof (disk_super->policy_version)); - disk_super->policy_hint_size =0 ; + disk_super->policy_hint_size =cpu_to_le32 (0 );__copy_sm_root (cmd, disk_super);
@@ -700,6 +700,7 @@ static int __commit_transaction(struct dm_cache_metadata *cmd, disk_super->policy_version[0 ] =cpu_to_le32 (cmd->policy_version[0 ]); disk_super->policy_version[1 ] =cpu_to_le32 (cmd->policy_version[1 ]); disk_super->policy_version[2 ] =cpu_to_le32 (cmd->policy_version[2 ]); + disk_super->policy_hint_size =cpu_to_le32 (cmd->policy_hint_size); disk_super->read_hits =cpu_to_le32 (cmd->stats.read_hits); disk_super->read_misses =cpu_to_le32 (cmd->stats.read_misses);
@@ -1321,6 +1322,7 @@ static int __load_mapping_v1(struct dm_cache_metadata *cmd,dm_oblock_t oblock;unsigned flags; +bool dirty = true;dm_array_cursor_get_value (mapping_cursor, (void **) &mapping_value_le);memcpy (&mapping, mapping_value_le,sizeof (mapping));
@@ -1331,8 +1333,10 @@ static int __load_mapping_v1(struct dm_cache_metadata *cmd,dm_array_cursor_get_value (hint_cursor, (void **) &hint_value_le);memcpy (&hint, hint_value_le,sizeof (hint)); } +if (cmd->clean_when_opened) + dirty = flags &M_DIRTY ; - r =fn (context, oblock,to_cblock (cb), flags &M_DIRTY , + r =fn (context, oblock,to_cblock (cb), dirty,le32_to_cpu (hint), hints_valid);if (r) { DMERR("policy couldn't load cache block %llu",
@@ -1360,7 +1364,7 @@ static int __load_mapping_v2(struct dm_cache_metadata *cmd,dm_oblock_t oblock;unsigned flags; -bool dirty; +bool dirty = true;dm_array_cursor_get_value (mapping_cursor, (void **) &mapping_value_le);memcpy (&mapping, mapping_value_le,sizeof (mapping));
@@ -1371,8 +1375,9 @@ static int __load_mapping_v2(struct dm_cache_metadata *cmd,dm_array_cursor_get_value (hint_cursor, (void **) &hint_value_le);memcpy (&hint, hint_value_le,sizeof (hint)); } +if (cmd->clean_when_opened) + dirty =dm_bitset_cursor_get_value (dirty_cursor); - dirty =dm_bitset_cursor_get_value (dirty_cursor); r =fn (context, oblock,to_cblock (cb), dirty,le32_to_cpu (hint), hints_valid);if (r) {
drivers/md/dm-crypt.c +5 -5
@@ -3072,11 +3072,11 @@ static void crypt_io_hints(struct dm_target *ti, struct queue_limits *limits)*/ limits->max_segment_size =PAGE_SIZE ; -if (cc->sector_size != (1 <<SECTOR_SHIFT )) { - limits->logical_block_size = cc->sector_size; - limits->physical_block_size = cc->sector_size; -blk_limits_io_min (limits, cc->sector_size); - } + limits->logical_block_size = + max_t(unsigned short, limits->logical_block_size, cc->sector_size); + limits->physical_block_size = +max_t (unsigned, limits->physical_block_size, cc->sector_size); + limits->io_min =max_t (unsigned, limits->io_min, cc->sector_size); }static struct target_type crypt_target = {
drivers/md/dm-integrity.c +3 -3
@@ -177,7 +177,7 @@ struct dm_integrity_c {__u8 sectors_per_block;unsigned char mode; -bool suspending; +int suspending;int failed;
@@ -2209,7 +2209,7 @@ static void dm_integrity_postsuspend(struct dm_target *ti)del_timer_sync (&ic->autocommit_timer); - ic->suspending = true; +WRITE_ONCE (ic->suspending,1 );queue_work (ic->commit_wq, &ic->commit_work);drain_workqueue (ic->commit_wq);
@@ -2219,7 +2219,7 @@ static void dm_integrity_postsuspend(struct dm_target *ti)dm_integrity_flush_buffers (ic); } - ic->suspending = false; +WRITE_ONCE (ic->suspending,0 );BUG_ON (!RB_EMPTY_ROOT (&ic->in_progress));
drivers/md/dm-thin.c +2 -0
@@ -2514,6 +2514,8 @@ static void set_pool_mode(struct pool *pool, enum pool_mode new_mode)case PM_WRITE :if (old_mode != new_mode)notify_of_pool_mode_change (pool,"write" ); +if (old_mode ==PM_OUT_OF_DATA_SPACE ) +cancel_delayed_work_sync (&pool->no_space_timeout); pool->out_of_data_space = false; pool->pf.error_if_no_space = pt->requested_pf.error_if_no_space;dm_pool_metadata_read_write (pool->pmd);
drivers/media/i2c/tvp5150.c +1 -1
@@ -871,7 +871,7 @@ static int tvp5150_fill_fmt(struct v4l2_subdev *sd, f = &format->format; f->width = decoder->rect.width; - f->height = decoder->rect.height; + f->height = decoder->rect.height /2 ; f->code =MEDIA_BUS_FMT_UYVY8_2X8 ; f->field =V4L2_FIELD_ALTERNATE ;
drivers/mfd/hi655x-pmic.c +1 -1
@@ -49,7 +49,7 @@ static struct regmap_config hi655x_regmap_config = { .reg_bits = 32, .reg_stride = HI655X_STRIDE, .val_bits = 8, - .max_register = HI655X_BUS_ADDR(0xFFF), + .max_register = HI655X_BUS_ADDR(0x400) - HI655X_STRIDE, };static struct resource pwrkey_resources[] = {
drivers/misc/cxl/main.c +1 -1
@@ -287,7 +287,7 @@ int cxl_adapter_context_get(struct cxl *adapter)int rc; rc =atomic_inc_unless_negative (&adapter->contexts_num); -return rc >=0 ?0 : -EBUSY ; +return rc ?0 : -EBUSY ; }void cxl_adapter_context_put (struct cxl *adapter)
drivers/misc/vmw_balloon.c +41 -26
116 lines not on this page · raw message
drivers/mmc/host/renesas_sdhi_internal_dmac.c +1 -1
@@ -44,7 +44,7 @@/* DM_CM_RST */ #define RST_DTRANRST1 BIT(9)#define RST_DTRANRST0 BIT(8) -#define RST_RESERVED_BITS GENMASK_ULL(32, 0) +#define RST_RESERVED_BITS GENMASK_ULL(31, 0)/* DM_CM_INFO1 and DM_CM_INFO1_MASK */ #define INFO1_CLEAR 0
drivers/net/wireless/marvell/libertas/dev.h +1 -0
@@ -104,6 +104,7 @@ struct lbs_private {u8 fw_ready;u8 surpriseremoved;u8 setup_fw_on_resume; +u8 power_up_on_resume;int (*hw_host_to_card) (struct lbs_private *priv,u8 type,u8 *payload,u16 nb);void (*reset_card) (struct lbs_private *priv);int (*power_save) (struct lbs_private *priv);
drivers/net/wireless/marvell/libertas/if_sdio.c +24 -6
@@ -1290,15 +1290,23 @@ static void if_sdio_remove(struct sdio_func *func)static int if_sdio_suspend (struct device *dev) {struct sdio_func *func =dev_to_sdio_func (dev); -int ret;struct if_sdio_card *card =sdio_get_drvdata (func); +struct lbs_private *priv = card->priv; +int ret;mmc_pm_flag_t flags =sdio_get_host_pm_caps (func); + priv->power_up_on_resume = false;/* If we're powered off anyway, just let the mmc layer remove the * card. */ -if (!lbs_iface_active (card->priv)) -return -ENOSYS ; +if (!lbs_iface_active (priv)) { +if (priv->fw_ready) { + priv->power_up_on_resume = true; +if_sdio_power_off (card); + } + +return 0 ; + }dev_info (dev,"%s: suspend: PM flags = 0x%x\n" ,sdio_func_id (func), flags);
@@ -1306,9 +1314,14 @@ static int if_sdio_suspend(struct device *dev)/* If we aren't being asked to wake on anything, we should bail out * and let the SD stack power down the card. */ -if (card->priv->wol_criteria ==EHS_REMOVE_WAKEUP ) { +if (priv->wol_criteria ==EHS_REMOVE_WAKEUP ) {dev_info (dev,"Suspend without wake params -- powering down card\n" ); -return -ENOSYS ; +if (priv->fw_ready) { + priv->power_up_on_resume = true; +if_sdio_power_off (card); + } + +return 0 ; }if (!(flags &MMC_PM_KEEP_POWER )) {
@@ -1321,7 +1334,7 @@ static int if_sdio_suspend(struct device *dev)if (ret)return ret; - ret =lbs_suspend (card->priv); + ret =lbs_suspend (priv);if (ret)return ret;
@@ -1336,6 +1349,11 @@ static int if_sdio_resume(struct device *dev)dev_info (dev,"%s: resume: we're back\n" ,sdio_func_id (func)); +if (card->priv->power_up_on_resume) { +if_sdio_power_on (card); +wait_event (card->pwron_waitq, card->priv->fw_ready); + } + ret =lbs_resume (card->priv);return ret;
drivers/nvdimm/bus.c +2 -2
@@ -808,9 +808,9 @@ u32 nd_cmd_out_size(struct nvdimm *nvdimm, int cmd,* overshoots the remainder by 4 bytes, assume it was * including 'status'. */ -if (out_field[1 ] -8 == remainder) +if (out_field[1 ] -4 == remainder)return remainder; -return out_field[1 ] -4 ; +return out_field[1 ] -8 ; }else if (cmd ==ND_CMD_CALL ) {struct nd_cmd_pkg *pkg = (struct nd_cmd_pkg *) in_field;
drivers/pwm/pwm-tiehrpwm.c +3 -11
@@ -33,10 +33,6 @@#define TBCTL 0x00#define TBPRD 0x0A -#define TBCTL_RUN_MASK (BIT(15) | BIT(14)) -#define TBCTL_STOP_NEXT 0 -#define TBCTL_STOP_ON_CYCLE BIT(14) -#define TBCTL_FREE_RUN (BIT(15) | BIT(14))#define TBCTL_PRDLD_MASK BIT(3)#define TBCTL_PRDLD_SHDW 0#define TBCTL_PRDLD_IMDT BIT(3)
@@ -360,7 +356,7 @@ static int ehrpwm_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)/* Channels polarity can be configured from action qualifier module */ configure_polarity (pc, pwm->hwpwm); -/* Enable TBCLK before enabling PWM device */ +/* Enable TBCLK */ ret =clk_enable (pc->tbclk);if (ret) { dev_err(chip->dev, "Failed to enable TBCLK for %s: %d\n",
@@ -368,9 +364,6 @@ static int ehrpwm_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)return ret; } -/* Enable time counter for free_run */ -ehrpwm_modify (pc->mmio_base,TBCTL ,TBCTL_RUN_MASK ,TBCTL_FREE_RUN ); -return 0 ; }
@@ -388,6 +381,8 @@ static void ehrpwm_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) aqcsfrc_mask =AQCSFRC_CSFA_MASK ; } +/* Update shadow register first before modifying active register */ +ehrpwm_modify (pc->mmio_base,AQCSFRC , aqcsfrc_mask, aqcsfrc_val);/* * Changes to immediate action on Action Qualifier. This puts * Action Qualifier control on PWM output from next TBCLK
@@ -400,9 +395,6 @@ static void ehrpwm_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)/* Disabling TBCLK on PWM disable */ clk_disable (pc->tbclk); -/* Stop Time base counter */ -ehrpwm_modify (pc->mmio_base,TBCTL ,TBCTL_RUN_MASK ,TBCTL_STOP_NEXT ); -/* Disable clock on PWM disable */ pm_runtime_put_sync (chip->dev); }
drivers/rtc/rtc-omap.c +7 -7
@@ -817,13 +817,6 @@ static int omap_rtc_probe(struct platform_device *pdev) goto err; } -if (rtc->is_pmic_controller) { -if (!pm_power_off) { - omap_rtc_power_off_rtc = rtc; - pm_power_off = omap_rtc_power_off; - } - } -/* Support ext_wakeup pinconf */ rtc_pinctrl_desc.name =dev_name (&pdev->dev);
@@ -833,6 +826,13 @@ static int omap_rtc_probe(struct platform_device *pdev)return PTR_ERR (rtc->pctldev); } +if (rtc->is_pmic_controller) { +if (!pm_power_off) { + omap_rtc_power_off_rtc = rtc; + pm_power_off = omap_rtc_power_off; + } + } +return 0 ; err:
drivers/spi/spi-cadence.c +1 -1
@@ -319,7 +319,7 @@ static void cdns_spi_fill_tx_fifo(struct cdns_spi *xspi)*/ if (cdns_spi_read (xspi,CDNS_SPI_ISR ) &CDNS_SPI_IXR_TXFULL ) -usleep_range (10 ,20 ); +udelay (10 );if (xspi->txbuf)cdns_spi_write (xspi,CDNS_SPI_TXD , *xspi->txbuf++);
drivers/spi/spi-davinci.c +1 -1
@@ -217,7 +217,7 @@ static void davinci_spi_chipselect(struct spi_device *spi, int value) pdata = &dspi->pdata;/* program delay transfers if tx_delay is non zero */ -if (spicfg->wdelay) +if (spicfg && spicfg->wdelay) spidat1 |=SPIDAT1_WDEL ;/*
drivers/spi/spi-fsl-dspi.c +12 -12
@@ -1006,30 +1006,30 @@ static int dspi_probe(struct platform_device *pdev) goto out_master_put; } + dspi->clk =devm_clk_get (&pdev->dev,"dspi" ); +if (IS_ERR (dspi->clk)) { + ret =PTR_ERR (dspi->clk); +dev_err (&pdev->dev,"unable to get clock\n" ); + goto out_master_put; + } + ret =clk_prepare_enable (dspi->clk); +if (ret) + goto out_master_put; +dspi_init (dspi); dspi->irq =platform_get_irq (pdev,0 );if (dspi->irq <0 ) {dev_err (&pdev->dev,"can't get platform irq\n" ); ret = dspi->irq; - goto out_master_put; + goto out_clk_put; } ret =devm_request_irq (&pdev->dev, dspi->irq, dspi_interrupt,0 , pdev->name, dspi);if (ret <0 ) {dev_err (&pdev->dev,"Unable to attach DSPI interrupt\n" ); - goto out_master_put; - } - - dspi->clk =devm_clk_get (&pdev->dev,"dspi" ); -if (IS_ERR (dspi->clk)) { - ret =PTR_ERR (dspi->clk); -dev_err (&pdev->dev,"unable to get clock\n" ); - goto out_master_put; + goto out_clk_put; } - ret =clk_prepare_enable (dspi->clk); -if (ret) - goto out_master_put;if (dspi->devtype_data->trans_mode ==DSPI_DMA_MODE ) { ret =dspi_request_dma (dspi, res->start);
drivers/spi/spi-pxa2xx.c +4 -0
@@ -1480,6 +1480,10 @@ static const struct pci_device_id pxa2xx_spi_pci_compound_match[] = { { PCI_VDEVICE(INTEL, 0x31c2), LPSS_BXT_SSP }, { PCI_VDEVICE(INTEL, 0x31c4), LPSS_BXT_SSP }, { PCI_VDEVICE(INTEL, 0x31c6), LPSS_BXT_SSP }, +/* ICL-LP */ + { PCI_VDEVICE(INTEL, 0x34aa), LPSS_CNL_SSP }, + { PCI_VDEVICE(INTEL, 0x34ab), LPSS_CNL_SSP }, + { PCI_VDEVICE(INTEL, 0x34fb), LPSS_CNL_SSP },/* APL */ { PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP }, { PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP },
drivers/tty/serial/serial_core.c +12 -5
@@ -195,6 +195,7 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state, {struct uart_port *uport =uart_port_check (state);unsigned long page; +unsigned long flags =0 ;int retval =0 ;if (uport->type ==PORT_UNKNOWN )
@@ -209,15 +210,18 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,* Initialise and allocate the transmit and temporary * buffer. */ -if (!state->xmit.buf) { -/* This is protected by the per port mutex */ - page =get_zeroed_page (GFP_KERNEL ); -if (!page) -return -ENOMEM ; + page =get_zeroed_page (GFP_KERNEL ); +if (!page) +return -ENOMEM ; +uart_port_lock (state, flags); +if (!state->xmit.buf) { state->xmit.buf = (unsigned char *) page;uart_circ_clear (&state->xmit); + }else { +free_page (page); } +uart_port_unlock (uport, flags); retval = uport->ops->startup (uport);if (retval ==0 ) {
@@ -276,6 +280,7 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state) {struct uart_port *uport =uart_port_check (state);struct tty_port *port = &state->port; +unsigned long flags =0 ;/* * Set the TTY IO error marker
@@ -308,10 +313,12 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)/* * Free the transmit buffer page. */ +uart_port_lock (state, flags);if (state->xmit.buf) {free_page ((unsigned long )state->xmit.buf); state->xmit.buf =NULL ; } +uart_port_unlock (uport, flags); }/**
drivers/video/fbdev/core/fbmem.c +32 -6
@@ -1716,12 +1716,12 @@ static int do_register_framebuffer(struct fb_info *fb_info)return 0 ; } -static int do_unregister_framebuffer (struct fb_info *fb_info) +static int unbind_console (struct fb_info *fb_info) {struct fb_event event; -int i, ret =0 ; +int ret; +int i = fb_info->node; - i = fb_info->node;if (i <0 || i >=FB_MAX || registered_fb[i] != fb_info)return -EINVAL ;
@@ -1736,17 +1736,29 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)unlock_fb_info (fb_info);console_unlock (); +return ret; +} + +static int __unlink_framebuffer (struct fb_info *fb_info); + +static int do_unregister_framebuffer (struct fb_info *fb_info) +{ +struct fb_event event; +int ret; + + ret =unbind_console (fb_info); +if (ret)return -EINVAL ;pm_vt_switch_unregister (fb_info->dev); -unlink_framebuffer (fb_info); +__unlink_framebuffer (fb_info);if (fb_info->pixmap.addr && (fb_info->pixmap.flags &FB_PIXMAP_DEFAULT ))kfree (fb_info->pixmap.addr);fb_destroy_modelist (&fb_info->modelist); - registered_fb[i] =NULL ; + registered_fb[fb_info->node] =NULL ; num_registered_fb--;fb_cleanup_device (fb_info); event.info = fb_info;
@@ -1759,7 +1771,7 @@ static int do_unregister_framebuffer(struct fb_info *fb_info)return 0 ; } -int unlink_framebuffer (struct fb_info *fb_info) +static int __unlink_framebuffer (struct fb_info *fb_info) {int i;
@@ -1771,6 +1783,20 @@ int unlink_framebuffer(struct fb_info *fb_info)device_destroy (fb_class,MKDEV (FB_MAJOR , i)); fb_info->dev =NULL ; } + +return 0 ; +} + +int unlink_framebuffer (struct fb_info *fb_info) +{ +int ret; + + ret =__unlink_framebuffer (fb_info); +if (ret) +return ret; + +unbind_console (fb_info); +return 0 ; }EXPORT_SYMBOL (unlink_framebuffer);
fs/9p/xattr.c +4 -2
@@ -105,7 +105,7 @@ int v9fs_fid_xattr_set(struct p9_fid *fid, const char *name, {struct kvec kvec = {.iov_base = (void *)value, .iov_len = value_len};struct iov_iter from; -int retval; +int retval, err;iov_iter_kvec (&from,WRITE |ITER_KVEC , &kvec,1 , value_len);
@@ -126,7 +126,9 @@ int v9fs_fid_xattr_set(struct p9_fid *fid, const char *name, retval); else p9_client_write(fid, 0, &from, &retval); -p9_client_clunk (fid); + err =p9_client_clunk (fid); +if (!retval && err) + retval = err;return retval; }
fs/nfs/blocklayout/dev.c +1 -1
@@ -204,7 +204,7 @@ static bool bl_map_stripe(struct pnfs_block_dev *dev, u64 offset, chunk =div_u64 (offset, dev->chunk_size);div_u64_rem (chunk, dev->nr_children, &chunk_idx); -if (chunk_idx > dev->nr_children) { +if (chunk_idx >= dev->nr_children) {dprintk ("%s: invalid chunk idx %d (%lld/%lld)\n" , __func__, chunk_idx, offset, dev->chunk_size);/* error, should not happen */
fs/nfs/callback_proc.c +10 -4
@@ -433,11 +433,14 @@ validate_seqid(const struct nfs4_slot_table *tbl, const struct nfs4_slot *slot,* a match. If the slot is in use and the sequence numbers match, the * client is still waiting for a response to the original request. */ -static bool referring_call_exists (struct nfs_client *clp, +static int referring_call_exists (struct nfs_client *clp,uint32_t nrclists, -struct referring_call_list *rclists) +struct referring_call_list *rclists, +spinlock_t *lock) +__releases (lock) +__acquires (lock) { -bool status =0 ; +int status =0 ;int i, j;struct nfs4_session *session;struct nfs4_slot_table *tbl;
@@ -460,8 +463,10 @@ static bool referring_call_exists(struct nfs_client *clp,for (j =0 ; j < rclist->rcl_nrefcalls; j++) { ref = &rclist->rcl_refcalls[j]; +spin_unlock (lock); status =nfs4_slot_wait_on_seqid (tbl, ref->rc_slotid, ref->rc_sequenceid,HZ >>1 ) <0 ; +spin_lock (lock);if (status) goto out; }
@@ -538,7 +543,8 @@ __be32 nfs4_callback_sequence(void *argp, void *resp,* related callback was received before the response to the original * call. */ -if (referring_call_exists (clp, args->csa_nrclists, args->csa_rclists)) { +if (referring_call_exists (clp, args->csa_nrclists, args->csa_rclists, + &tbl->slot_tbl_lock) <0 ) { status =htonl (NFS4ERR_DELAY ); goto out_unlock; }
fs/nfs/nfs4proc.c +8 -1
@@ -547,8 +547,15 @@ nfs4_async_handle_exception(struct rpc_task *task, struct nfs_server *server, ret = -EIO ;return ret; out_retry: -if (ret ==0 ) +if (ret ==0 ) { exception->retry =1 ; +/* +* For NFS4ERR_MOVED, the client transport will need to +* be recomputed after migration recovery has completed. +*/ +if (errorcode == -NFS4ERR_MOVED ) +rpc_task_release_transport (task); + }return ret; }
fs/nfs/pnfs_nfs.c +7 -9
@@ -61,7 +61,7 @@ EXPORT_SYMBOL_GPL(pnfs_generic_commit_release);/* The generic layer is about to remove the req from the commit list. * If this will make the bucket empty, it will need to put the lseg reference. -* Note this must be called holding i_lock +* Note this must be called holding nfsi->commit_mutex */ void pnfs_generic_clear_request_commit(struct nfs_page *req,
@@ -149,9 +149,7 @@ void pnfs_generic_recover_commit_reqs(struct list_head *dst,if (list_empty (&b->written)) { freeme = b->wlseg; b->wlseg =NULL ; -spin_unlock (&cinfo->inode->i_lock);pnfs_put_lseg (freeme); -spin_lock (&cinfo->inode->i_lock); goto restart; } }
@@ -167,7 +165,7 @@ static void pnfs_generic_retry_commit(struct nfs_commit_info *cinfo, int idx)LIST_HEAD (pages);int i; -spin_lock (&cinfo->inode->i_lock); +mutex_lock (&NFS_I (cinfo->inode)->commit_mutex);for (i = idx; i < fl_cinfo->nbuckets; i++) { bucket = &fl_cinfo->buckets[i];if (list_empty (&bucket->committing))
@@ -177,12 +175,12 @@ static void pnfs_generic_retry_commit(struct nfs_commit_info *cinfo, int idx)list_for_each (pos, &bucket->committing) cinfo->ds->ncommitting--;list_splice_init (&bucket->committing, &pages); -spin_unlock (&cinfo->inode->i_lock); +mutex_unlock (&NFS_I (cinfo->inode)->commit_mutex);nfs_retry_commit (&pages, freeme, cinfo, i);pnfs_put_lseg (freeme); -spin_lock (&cinfo->inode->i_lock); +mutex_lock (&NFS_I (cinfo->inode)->commit_mutex); } -spin_unlock (&cinfo->inode->i_lock); +mutex_unlock (&NFS_I (cinfo->inode)->commit_mutex); } static unsigned int
@@ -222,13 +220,13 @@ void pnfs_fetch_commit_bucket_list(struct list_head *pages,struct list_head *pos; bucket = &cinfo->ds->buckets[data->ds_commit_index]; -spin_lock (&cinfo->inode->i_lock); +mutex_lock (&NFS_I (cinfo->inode)->commit_mutex);list_for_each (pos, &bucket->committing) cinfo->ds->ncommitting--;list_splice_init (&bucket->committing, pages); data->lseg = bucket->clseg; bucket->clseg =NULL ; -spin_unlock (&cinfo->inode->i_lock); +mutex_unlock (&NFS_I (cinfo->inode)->commit_mutex); }
fs/overlayfs/readdir.c +17 -2
@@ -623,6 +623,21 @@ static int ovl_fill_real(struct dir_context *ctx, const char *name,return orig_ctx->actor (orig_ctx, name, namelen, offset, ino, d_type); } +static bool ovl_is_impure_dir (struct file *file) +{ +struct ovl_dir_file *od = file->private_data; +struct inode *dir =d_inode (file->f_path.dentry); + +/* +* Only upper dir can be impure, but if we are in the middle of +* iterating a lower real dir, dir could be copied up and marked +* impure. We only want the impure cache if we started iterating +* a real upper dir to begin with. +*/ +return od->is_upper &&ovl_test_flag (OVL_IMPURE , dir); + +} +static int ovl_iterate_real (struct file *file,struct dir_context *ctx) {int err;
@@ -646,7 +661,7 @@ static int ovl_iterate_real(struct file *file, struct dir_context *ctx) rdt.parent_ino = stat.ino; } -if (ovl_test_flag (OVL_IMPURE ,d_inode (dir))) { +if (ovl_is_impure_dir (file)) { rdt.cache =ovl_cache_get_impure (&file->f_path);if (IS_ERR (rdt.cache))return PTR_ERR (rdt.cache);
@@ -676,7 +691,7 @@ static int ovl_iterate(struct file *file, struct dir_context *ctx)* entries. */ if (ovl_same_sb (dentry->d_sb) && - (ovl_test_flag (OVL_IMPURE ,d_inode (dentry)) || + (ovl_is_impure_dir (file) ||OVL_TYPE_MERGE (ovl_path_type (dentry->d_parent)))) {return ovl_iterate_real (file, ctx); }
fs/quota/quota.c +2 -0
@@ -18,6 +18,7 @@#include <linux/quotaops.h> #include <linux/types.h> #include <linux/writeback.h> +#include <linux/nospec.h> static int check_quotactl_permission (struct super_block *sb,int type,int cmd,qid_t id)
@@ -703,6 +704,7 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,if (type >= (XQM_COMMAND (cmd) ?XQM_MAXQUOTAS :MAXQUOTAS ))return -EINVAL ; + type =array_index_nospec (type,MAXQUOTAS );/* * Quota not supported on this fs? Check this before s_quota_types * since they needn't be set if quota is not supported at all.
fs/ubifs/journal.c +17 -4
@@ -665,6 +665,11 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,spin_lock (&ui->ui_lock); ui->synced_i_size = ui->ui_size;spin_unlock (&ui->ui_lock); +if (xent) { +spin_lock (&host_ui->ui_lock); + host_ui->synced_i_size = host_ui->ui_size; +spin_unlock (&host_ui->ui_lock); + }mark_inode_clean (c, ui);mark_inode_clean (c, host_ui);return 0 ;
@@ -1283,11 +1288,10 @@ static int truncate_data_node(const struct ubifs_info *c, const struct inode *in int *new_len) {void *buf; -int err, compr_type; -u32 dlen, out_len, old_dlen; +int err, dlen, compr_type, out_len, old_dlen; out_len =le32_to_cpu (dn->size); - buf =kmalloc_array (out_len,WORST_COMPR_FACTOR ,GFP_NOFS ); + buf =kmalloc (out_len *WORST_COMPR_FACTOR ,GFP_NOFS );if (!buf)return -ENOMEM ;
@@ -1389,7 +1393,16 @@ int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode,else if (err) goto out_free;else { -if (le32_to_cpu (dn->size) <= dlen) +int dn_len =le32_to_cpu (dn->size); + +if (dn_len <=0 || dn_len >UBIFS_BLOCK_SIZE ) { +ubifs_err (c,"bad data node (block %u, inode %lu)" , + blk, inode->i_ino); +ubifs_dump_node (c, dn); + goto out_free; + } + +if (dn_len <= dlen) dlen =0 ;/* Nothing to do */ else { err =truncate_data_node (c, inode, blk, dn, &dlen);
fs/ubifs/lprops.c +4 -4
@@ -1091,10 +1091,6 @@ static int scan_check_cb(struct ubifs_info *c, } } - buf =__vmalloc (c->leb_size,GFP_NOFS ,PAGE_KERNEL ); -if (!buf) -return -ENOMEM ; -/* * After an unclean unmount, empty and freeable LEBs * may contain garbage - do not scan them.
@@ -1113,6 +1109,10 @@ static int scan_check_cb(struct ubifs_info *c,return LPT_SCAN_CONTINUE ; } + buf =__vmalloc (c->leb_size,GFP_NOFS ,PAGE_KERNEL ); +if (!buf) +return -ENOMEM ; + sleb =ubifs_scan (c, lnum,0 , buf,0 );if (IS_ERR (sleb)) { ret =PTR_ERR (sleb);
fs/ubifs/xattr.c +24 -0
@@ -152,6 +152,12 @@ static int create_xattr(struct ubifs_info *c, struct inode *host, ui->data_len = size;mutex_lock (&host_ui->ui_mutex); + +if (!host->i_nlink) { + err = -ENOENT ; + goto out_noent; + } + host->i_ctime =current_time (host); host_ui->xattr_cnt +=1 ; host_ui->xattr_size +=CALC_DENT_SIZE (fname_len (nm));
@@ -183,6 +189,7 @@ static int create_xattr(struct ubifs_info *c, struct inode *host, host_ui->xattr_size -=CALC_XATTR_BYTES (size); host_ui->xattr_names -=fname_len (nm); host_ui->flags &= ~UBIFS_CRYPT_FL ; +out_noent:mutex_unlock (&host_ui->ui_mutex); out_free:make_bad_inode (inode);
@@ -234,6 +241,12 @@ static int change_xattr(struct ubifs_info *c, struct inode *host,mutex_unlock (&ui->ui_mutex);mutex_lock (&host_ui->ui_mutex); + +if (!host->i_nlink) { + err = -ENOENT ; + goto out_noent; + } + host->i_ctime =current_time (host); host_ui->xattr_size -=CALC_XATTR_BYTES (old_size); host_ui->xattr_size +=CALC_XATTR_BYTES (size);
@@ -255,6 +268,7 @@ static int change_xattr(struct ubifs_info *c, struct inode *host, out_cancel: host_ui->xattr_size -=CALC_XATTR_BYTES (size); host_ui->xattr_size +=CALC_XATTR_BYTES (old_size); +out_noent:mutex_unlock (&host_ui->ui_mutex);make_bad_inode (inode); out_free:
@@ -483,6 +497,12 @@ static int remove_xattr(struct ubifs_info *c, struct inode *host,return err;mutex_lock (&host_ui->ui_mutex); + +if (!host->i_nlink) { + err = -ENOENT ; + goto out_noent; + } + host->i_ctime =current_time (host); host_ui->xattr_cnt -=1 ; host_ui->xattr_size -=CALC_DENT_SIZE (fname_len (nm));
@@ -502,6 +522,7 @@ static int remove_xattr(struct ubifs_info *c, struct inode *host, host_ui->xattr_size +=CALC_DENT_SIZE (fname_len (nm)); host_ui->xattr_size +=CALC_XATTR_BYTES (ui->data_len); host_ui->xattr_names +=fname_len (nm); +out_noent:mutex_unlock (&host_ui->ui_mutex);ubifs_release_budget (c, &req);make_bad_inode (inode);
@@ -541,6 +562,9 @@ static int ubifs_xattr_remove(struct inode *host, const char *name)ubifs_assert (inode_is_locked (host)); +if (!host->i_nlink) +return -ENOENT ; +if (fname_len (&nm) >UBIFS_MAX_NLEN )return -ENAMETOOLONG ;
fs/xattr.c +1 -1
@@ -541,7 +541,7 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,if (error >0 ) {if ((strcmp (kname,XATTR_NAME_POSIX_ACL_ACCESS ) ==0 ) || (strcmp (kname,XATTR_NAME_POSIX_ACL_DEFAULT ) ==0 )) -posix_acl_fix_xattr_to_user (kvalue, size); +posix_acl_fix_xattr_to_user (kvalue, error);if (size &©_to_user (value, kvalue, error)) error = -EFAULT ; }else if (error == -ERANGE && size >=XATTR_SIZE_MAX ) {
include/linux/hyperv.h +2 -0
@@ -1026,6 +1026,8 @@ extern int vmbus_establish_gpadl(struct vmbus_channel *channel,extern int vmbus_teardown_gpadl (struct vmbus_channel *channel,u32 gpadl_handle); +void vmbus_reset_channel_cb (struct vmbus_channel *channel); + extern int vmbus_recvpacket(struct vmbus_channel *channel, void *buffer, u32 bufferlen,
include/linux/intel-iommu.h +5 -3
@@ -112,6 +112,7 @@* Extended Capability Register */ +#define ecap_dit (e) ((e >> 41) & 0x1)#define ecap_pasid (e) ((e >> 40) & 0x1)#define ecap_pss (e) ((e >> 35) & 0x1f)#define ecap_eafs (e) ((e >> 34) & 0x1)
@@ -281,6 +282,7 @@ enum {#define QI_DEV_IOTLB_SID (sid) ((u64)((sid) & 0xffff) << 32)#define QI_DEV_IOTLB_QDEP (qdep) (((qdep) & 0x1f) << 16)#define QI_DEV_IOTLB_ADDR (addr) ((u64)(addr) & VTD_PAGE_MASK) +#define QI_DEV_IOTLB_PFSID (pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52))#define QI_DEV_IOTLB_SIZE 1#define QI_DEV_IOTLB_MAX_INVS 32
@@ -305,6 +307,7 @@ enum {#define QI_DEV_EIOTLB_PASID (p) (((u64)p) << 32)#define QI_DEV_EIOTLB_SID (sid) ((u64)((sid) & 0xffff) << 16)#define QI_DEV_EIOTLB_QDEP (qd) ((u64)((qd) & 0x1f) << 4) +#define QI_DEV_EIOTLB_PFSID (pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52))#define QI_DEV_EIOTLB_MAX_INVS 32#define QI_PGRP_IDX (idx) (((u64)(idx)) << 55)
@@ -450,9 +453,8 @@ extern void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm, u64 type);extern void qi_flush_iotlb (struct intel_iommu *iommu,u16 did,u64 addr,unsigned int size_order,u64 type); -extern void qi_flush_dev_iotlb (struct intel_iommu *iommu,u16 sid,u16 qdep, -u64 addr,unsigned mask); - +extern void qi_flush_dev_iotlb (struct intel_iommu *iommu,u16 sid,u16 pfsid, +u16 qdep,u64 addr,unsigned mask);extern int qi_submit_sync (struct qi_desc *desc,struct intel_iommu *iommu);extern int dmar_ir_support (void );
include/linux/pci.h +12 -0
@@ -2292,4 +2292,16 @@ static inline bool pci_is_thunderbolt_attached(struct pci_dev *pdev)/* provide the legacy pci_dma_* API */ #include <linux/pci-dma-compat.h> +#define pci_printk(level, pdev, fmt, arg...) \ + dev_printk(level, &(pdev)->dev, fmt, ##arg) + +#define pci_emerg(pdev, fmt, arg...) dev_emerg(&(pdev)->dev, fmt, ##arg) +#define pci_alert(pdev, fmt, arg...) dev_alert(&(pdev)->dev, fmt, ##arg) +#define pci_crit(pdev, fmt, arg...) dev_crit(&(pdev)->dev, fmt, ##arg) +#define pci_err(pdev, fmt, arg...) dev_err(&(pdev)->dev, fmt, ##arg) +#define pci_warn(pdev, fmt, arg...) dev_warn(&(pdev)->dev, fmt, ##arg) +#define pci_notice(pdev, fmt, arg...) dev_notice(&(pdev)->dev, fmt, ##arg) +#define pci_info(pdev, fmt, arg...) dev_info(&(pdev)->dev, fmt, ##arg) +#define pci_dbg(pdev, fmt, arg...) dev_dbg(&(pdev)->dev, fmt, ##arg) +#endif /* LINUX_PCI_H */
include/linux/sunrpc/clnt.h +1 -0
@@ -156,6 +156,7 @@ int rpc_switch_client_transport(struct rpc_clnt *,void rpc_shutdown_client (struct rpc_clnt *);void rpc_release_client (struct rpc_clnt *); +void rpc_task_release_transport (struct rpc_task *);void rpc_task_release_client (struct rpc_task *);int rpcb_create_local (struct net *);
include/linux/verification.h +6 -0
@@ -12,6 +12,12 @@#ifndef _LINUX_VERIFICATION_H#define _LINUX_VERIFICATION_H +/* +* Indicate that both builtin trusted keys and secondary trusted keys +* should be used. +*/ +#define VERIFY_USE_SECONDARY_KEYRING ((struct key *)1UL) +/* * The use to which an asymmetric key is being put. */
include/video/udlfb.h +1 -1
@@ -88,7 +88,7 @@ struct dlfb_data {#define MIN_RAW_PIX_BYTES 2#define MIN_RAW_CMD_BYTES (RAW_HEADER_BYTES + MIN_RAW_PIX_BYTES) -#define DL_DEFIO_WRITE_DELAY 5/* fb_deferred_io.delay in jiffies */ +#define DL_DEFIO_WRITE_DELAY msecs_to_jiffies(HZ <= 300 ? 4 : 10)/* optimal value for 720p video */ #define DL_DEFIO_WRITE_DISABLE (HZ*60)/* "disable" with long delay */ /* remove these once align.h patch is taken into kernel */
kernel/livepatch/core.c +6 -0
@@ -605,6 +605,9 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func)if (!func->old_name || !func->new_func)return -EINVAL ; +if (strlen (func->old_name) >=KSYM_NAME_LEN ) +return -EINVAL ; +INIT_LIST_HEAD (&func->stack_node); func->patched = false; func->transition = false;
@@ -678,6 +681,9 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)if (!obj->funcs)return -EINVAL ; +if (klp_is_module (obj) &&strlen (obj->name) >=MODULE_NAME_LEN ) +return -EINVAL ; + obj->patched = false; obj->mod =NULL ;
kernel/power/Kconfig +1 -0
@@ -105,6 +105,7 @@ config PM_SLEEP def_bool y depends on SUSPEND || HIBERNATE_CALLBACKS select PM + select SRCU config PM_SLEEP_SMP def_bool y
kernel/printk/printk_safe.c +2 -2
@@ -309,12 +309,12 @@ static __printf(1, 0) int vprintk_nmi(const char *fmt, va_list args)return printk_safe_log_store (s, fmt, args); } -void printk_nmi_enter (void ) +void notrace printk_nmi_enter(void) {this_cpu_or (printk_context,PRINTK_NMI_CONTEXT_MASK ); } -void printk_nmi_exit (void ) +void notrace printk_nmi_exit(void) {this_cpu_and (printk_context, ~PRINTK_NMI_CONTEXT_MASK ); }
kernel/sys.c +45 -50
171 lines not on this page · raw message
kernel/trace/blktrace.c +4 -0
@@ -1809,6 +1809,10 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,mutex_lock (&q->blk_trace_mutex);if (attr == &dev_attr_enable) { +if (!!value == !!q->blk_trace) { + ret =0 ; + goto out_unlock_bdev; + }if (value) ret =blk_trace_setup_queue (q, bdev);else
kernel/trace/trace.c +3 -1
@@ -7545,7 +7545,9 @@ rb_simple_write(struct file *filp, const char __user *ubuf,if (buffer) {mutex_lock (&trace_types_lock); -if (val) { +if (!!val ==tracer_tracing_is_on (tr)) { + val =0 ;/* do nothing */ + }else if (val) {tracer_tracing_on (tr);if (tr->current_trace->start) tr->current_trace->start (tr);
kernel/trace/trace_uprobe.c +1 -1
@@ -967,7 +967,7 @@ probe_event_disable(struct trace_uprobe *tu, struct trace_event_file *file)list_del_rcu (&link->list);/* synchronize with u{,ret}probe_trace_func */ -synchronize_sched (); +synchronize_rcu ();kfree (link);if (!list_empty (&tu->tp.files))
kernel/user_namespace.c +10 -14
@@ -650,7 +650,16 @@ static ssize_t map_write(struct file *file, const char __user *buf,unsigned idx;struct uid_gid_extent *extent =NULL ;char *kbuf =NULL , *pos, *next_line; -ssize_t ret = -EINVAL ; +ssize_t ret; + +/* Only allow < page size writes at the beginning of the file */ +if ((*ppos !=0 ) || (count >=PAGE_SIZE )) +return -EINVAL ; + +/* Slurp in the user data */ + kbuf =memdup_user_nul (buf, count); +if (IS_ERR (kbuf)) +return PTR_ERR (kbuf);/* * The userns_state_mutex serializes all writes to any given map.
@@ -684,19 +693,6 @@ static ssize_t map_write(struct file *file, const char __user *buf,if (cap_valid (cap_setid) && !file_ns_capable (file, ns,CAP_SYS_ADMIN )) goto out; -/* Only allow < page size writes at the beginning of the file */ - ret = -EINVAL ; -if ((*ppos !=0 ) || (count >=PAGE_SIZE )) - goto out; - -/* Slurp in the user data */ - kbuf =memdup_user_nul (buf, count); -if (IS_ERR (kbuf)) { - ret =PTR_ERR (kbuf); - kbuf =NULL ; - goto out; - } -/* Parse the user data */ ret = -EINVAL ; pos = kbuf;
kernel/utsname_sysctl.c +25 -16
66 lines not on this page · raw message
mm/memory.c +0 -9
@@ -392,15 +392,6 @@ void tlb_remove_table(struct mmu_gather *tlb, void *table) {struct mmu_table_batch **batch = &tlb->batch; -/* -* When there's less then two users of this mm there cannot be a -* concurrent page-table walk. -*/ -if (atomic_read (&tlb->mm->mm_users) <2 ) { -__tlb_remove_table (table); -return ; - } -if (*batch ==NULL ) { *batch = (struct mmu_table_batch *)__get_free_page (GFP_NOWAIT | __GFP_NOWARN);if (*batch ==NULL ) {
mm/readahead.c +10 -2
@@ -380,6 +380,7 @@ ondemand_readahead(struct address_space *mapping, {struct backing_dev_info *bdi =inode_to_bdi (mapping->host);unsigned long max_pages = ra->ra_pages; +unsigned long add_pages;pgoff_t prev_offset;/*
@@ -469,10 +470,17 @@ ondemand_readahead(struct address_space *mapping,* Will this read hit the readahead marker made by itself? * If so, trigger the readahead marker hit now, and merge * the resulted next readahead window into the current one. +* Take care of maximum IO pages as above. */ if (offset == ra->start && ra->size == ra->async_size) { - ra->async_size =get_next_ra_size (ra, max_pages); - ra->size += ra->async_size; + add_pages =get_next_ra_size (ra, max_pages); +if (ra->size + add_pages <= max_pages) { + ra->async_size = add_pages; + ra->size += add_pages; + }else { + ra->size = max_pages; + ra->async_size = max_pages >>1 ; + } }return ra_submit (ra, mapping, filp);
net/9p/client.c +1 -1
@@ -955,7 +955,7 @@ static int p9_client_version(struct p9_client *c) {int err =0 ;struct p9_req_t *req; -char *version; +char *version =NULL ;int msize; p9_debug(P9_DEBUG_9P, ">>> TVERSION msize %d protocol %d\n",
net/9p/trans_fd.c +6 -1
@@ -185,6 +185,8 @@ static void p9_mux_poll_stop(struct p9_conn *m)spin_lock_irqsave (&p9_poll_lock, flags);list_del_init (&m->poll_pending_link);spin_unlock_irqrestore (&p9_poll_lock, flags); + +flush_work (&p9_poll_work); }/**
@@ -951,7 +953,7 @@ p9_fd_create_tcp(struct p9_client *client, const char *addr, char *args)if (err <0 )return err; -if (valid_ipaddr4 (addr) <0 ) +if (addr ==NULL ||valid_ipaddr4 (addr) <0 )return -EINVAL ; csocket =NULL ;
@@ -1001,6 +1003,9 @@ p9_fd_create_unix(struct p9_client *client, const char *addr, char *args) csocket =NULL ; +if (addr ==NULL ) +return -EINVAL ; +if (strlen (addr) >=UNIX_PATH_MAX ) {pr_err ("%s (%d): address too long: %s\n" , __func__,task_pid_nr (current), addr);
net/9p/trans_rdma.c +3 -0
@@ -646,6 +646,9 @@ rdma_create_trans(struct p9_client *client, const char *addr, char *args)struct rdma_conn_param conn_param;struct ib_qp_init_attr qp_attr; +if (addr ==NULL ) +return -EINVAL ; +/* Parse the transport specific mount options */ err =parse_opts (args, &opts);if (err <0 )
net/9p/trans_virtio.c +12 -1
@@ -189,7 +189,7 @@ static int pack_sg_list(struct scatterlist *sg, int start, s =rest_of_page (data);if (s > count) s = count; -BUG_ON (index > limit); +BUG_ON (index >= limit);/* Make sure we don't terminate early. */ sg_unmark_end (&sg[index]);sg_set_buf (&sg[index++], data, s);
@@ -234,6 +234,7 @@ pack_sg_list_p(struct scatterlist *sg, int start, int limit, s =PAGE_SIZE - data_off;if (s > count) s = count; +BUG_ON (index >= limit);/* Make sure we don't terminate early. */ sg_unmark_end (&sg[index]);sg_set_page (&sg[index++], pdata[i++], s, data_off);
@@ -406,6 +407,7 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req,p9_debug (P9_DEBUG_TRANS ,"virtio request\n" );if (uodata) { +__le32 sz;int n =p9_get_mapped_pages (chan, &out_pages, uodata, outlen, &offs, &need_drop);if (n <0 )
@@ -416,6 +418,12 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req,memcpy (&req->tc->sdata[req->tc->size -4 ], &v,4 ); outlen = n; } +/* The size field of the message must include the length of the +* header and the length of the data. We didn't actually know +* the length of the data until this point so add it in now. +*/ + sz =cpu_to_le32 (req->tc->size + outlen); +memcpy (&req->tc->sdata[0 ], &sz,sizeof (sz)); }else if (uidata) {int n =p9_get_mapped_pages (chan, &in_pages, uidata, inlen, &offs, &need_drop);
@@ -643,6 +651,9 @@ p9_virtio_create(struct p9_client *client, const char *devname, char *args)int ret = -ENOENT ;int found =0 ; +if (devname ==NULL ) +return -EINVAL ; +mutex_lock (&virtio_9p_lock);list_for_each_entry (chan, &virtio_chan_list, chan_list) { if (!strncmp(devname, chan->tag, chan->tag_len) &&
net/9p/trans_xen.c +3 -0
@@ -95,6 +95,9 @@ static int p9_xen_create(struct p9_client *client, const char *addr, char *args) {struct xen_9pfs_front_priv *priv; +if (addr ==NULL ) +return -EINVAL ; +read_lock (&xen_9pfs_lock);list_for_each_entry (priv, &xen_9pfs_devs, list) {if (!strcmp (priv->tag, addr)) {
net/ieee802154/6lowpan/tx.c +18 -3
@@ -265,9 +265,24 @@ netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *ldev)/* We must take a copy of the skb before we modify/replace the ipv6 * header as the header could be used elsewhere */ - skb =skb_unshare (skb,GFP_ATOMIC ); -if (!skb) -return NET_XMIT_DROP ; +if (unlikely (skb_headroom (skb) < ldev->needed_headroom || +skb_tailroom (skb) < ldev->needed_tailroom)) { +struct sk_buff *nskb; + + nskb =skb_copy_expand (skb, ldev->needed_headroom, + ldev->needed_tailroom,GFP_ATOMIC ); +if (likely (nskb)) { +consume_skb (skb); + skb = nskb; + }else { +kfree_skb (skb); +return NET_XMIT_DROP ; + } + }else { + skb =skb_unshare (skb,GFP_ATOMIC ); +if (!skb) +return NET_XMIT_DROP ; + } ret =lowpan_header (skb, ldev, &dgram_size, &dgram_offset);if (ret <0 ) {
net/mac802154/tx.c +14 -1
@@ -63,8 +63,21 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)int ret;if (!(local->hw.flags &IEEE802154_HW_TX_OMIT_CKSUM )) { -u16 crc =crc_ccitt (0 , skb->data, skb->len); +struct sk_buff *nskb; +u16 crc; + +if (unlikely (skb_tailroom (skb) <IEEE802154_FCS_LEN )) { + nskb =skb_copy_expand (skb,0 ,IEEE802154_FCS_LEN , +GFP_ATOMIC ); +if (likely (nskb)) { +consume_skb (skb); + skb = nskb; + }else { + goto err_tx; + } + } + crc =crc_ccitt (0 , skb->data, skb->len);put_unaligned_le16 (crc,skb_put (skb,2 )); }
net/sunrpc/clnt.c +20 -8
@@ -965,10 +965,20 @@ struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *old, }EXPORT_SYMBOL_GPL (rpc_bind_new_program); +void rpc_task_release_transport (struct rpc_task *task) +{ +struct rpc_xprt *xprt = task->tk_xprt; + +if (xprt) { + task->tk_xprt =NULL ; +xprt_put (xprt); + } +} +EXPORT_SYMBOL_GPL (rpc_task_release_transport); +void rpc_task_release_client (struct rpc_task *task) {struct rpc_clnt *clnt = task->tk_client; -struct rpc_xprt *xprt = task->tk_xprt;if (clnt !=NULL ) {/* Remove from client task list */
@@ -979,12 +989,14 @@ void rpc_task_release_client(struct rpc_task *task)rpc_release_client (clnt); } +rpc_task_release_transport (task); +} -if (xprt !=NULL ) { - task->tk_xprt =NULL ; - -xprt_put (xprt); - } +static +void rpc_task_set_transport (struct rpc_task *task,struct rpc_clnt *clnt) +{ +if (!task->tk_xprt) + task->tk_xprt =xprt_iter_get_next (&clnt->cl_xpi); } static
@@ -992,8 +1004,7 @@ void rpc_task_set_client(struct rpc_task *task, struct rpc_clnt *clnt) {if (clnt !=NULL ) { -if (task->tk_xprt ==NULL ) - task->tk_xprt =xprt_iter_get_next (&clnt->cl_xpi); +rpc_task_set_transport (task, clnt); task->tk_client = clnt;atomic_inc (&clnt->cl_count);if (clnt->cl_softrtry)
@@ -1529,6 +1540,7 @@ call_start(struct rpc_task *task) clnt->cl_program->version[clnt->cl_vers]->counts[idx]++; clnt->cl_stats->rpccnt++; task->tk_action = call_reserve; +rpc_task_set_transport (task, clnt); }/*
security/commoncap.c +1 -1
@@ -388,7 +388,7 @@ int cap_inode_getsecurity(struct inode *inode, const char *name, void **buffer,if (strcmp (name,"capability" ) !=0 )return -EOPNOTSUPP ; - dentry =d_find_alias (inode); + dentry =d_find_any_alias (inode);if (!dentry)return -EINVAL ;
tools/perf/util/auxtrace.c +3 -0
@@ -197,6 +197,9 @@ static int auxtrace_queues__grow(struct auxtrace_queues *queues,for (i =0 ; i < queues->nr_queues; i++) {list_splice_tail (&queues->queue_array[i].head, &queue_array[i].head); + queue_array[i].tid = queues->queue_array[i].tid; + queue_array[i].cpu = queues->queue_array[i].cpu; + queue_array[i].set = queues->queue_array[i].set; queue_array[i].priv = queues->queue_array[i].priv; }