Linux 4.9.126
Greg KH
maintainerI'm announcing the release of the 4.9.126 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.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 | 64 +++++++--------- arch/arm/boot/dts/tegra30-cardhu.dtsi | 1 arch/powerpc/include/asm/fadump.h | 3 arch/powerpc/kernel/fadump.c | 92 +++++++++++++++++++---- 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 ++++++++++------- certs/system_keyring.c | 3 crypto/asymmetric_keys/pkcs7_key_type.c | 2 drivers/crypto/caam/jr.c | 3 drivers/crypto/vmx/aes_cbc.c | 30 +++---- drivers/crypto/vmx/aes_xts.c | 21 +++-- drivers/gpu/drm/i915/i915_gem_userptr.c | 3 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 | 3 drivers/md/dm-thin.c | 2 drivers/mfd/hi655x-pmic.c | 2 drivers/misc/cxl/main.c | 2 drivers/misc/vmw_balloon.c | 67 ++++++++++------ 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 | 2 drivers/rtc/rtc-omap.c | 14 +-- drivers/spi/spi-davinci.c | 2 drivers/spi/spi-fsl-dspi.c | 24 +++--- 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/nfs4proc.c | 9 ++ fs/quota/quota.c | 2 fs/ubifs/journal.c | 18 ++++ fs/ubifs/lprops.c | 8 +- fs/xattr.c | 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/power/Kconfig | 1 kernel/printk/nmi.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 -- net/9p/client.c | 2 net/9p/trans_fd.c | 7 + net/9p/trans_rdma.c | 3 net/9p/trans_virtio.c | 13 +++ net/ieee802154/6lowpan/tx.c | 21 ++++- net/mac802154/tx.c | 15 +++ net/sunrpc/clnt.c | 28 +++++-- tools/perf/util/auxtrace.c | 3 68 files changed, 665 insertions(+), 339 deletions(-)
Adrian Hunter (1):
perf auxtrace: Fix queue resize
Al Viro (1):
osf_getdomainname(): use copy_to_user()
Alexander Aring (2):
net: 6lowpan: fix reserved space for single frames
net: mac802154: tx: expand tailroom if necessary
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
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
Frederick Lawler (1):
PCI: Add wrappers for dev_printk()
Greg Kroah-Hartman (1):
Linux 4.9.126
Gustavo A. R. Silva (1):
mailbox: xgene-slimpro: Fix potential NULL pointer dereference
Hari Bathini (1):
powerpc/fadump: handle crash memory ranges array index overflow
Horia Geantă (1):
crypto: caam/jr - fix descriptor DMA unmapping
Hou Tao (1):
dm thin: stop no_space_timeout worker when switching to write-mode
Jacob Pan (2):
iommu/vt-d: Add definitions for PFSID
iommu/vt-d: Fix dev iotlb pfsid use
Jann Horn (2):
sys: don't hold uts_sem while accessing userspace memory
userns: move user access out of the mutex
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
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()
Mahesh Salgaonkar (1):
powerpc/pseries: Fix endianness while restoring of r3 in MCE handler.
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
Mike Snitzer (1):
dm cache metadata: save in-core policy_hint_size to on-disk superblock
Mikulas Patocka (2):
fb: fix lost console when the user unplugs a USB adapter
udlfb: set optimal write delay
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
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 (4):
ubifs: Fix memory leak in lprobs self-check Revert "UBIFS: Fix potential integer overflow in allocation"
ubifs: Check data node size before truncate
ubifs: Fix synced_i_size calculation for xattr inodes
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
uprobes: Use synchronize_rcu() not synchronize_sched() printk/tracing: Do not trace printk_nmi_enter()
Tomas Bortoli (3):
net/9p/client.c: version pointer uninitialized net/9p/trans_fd.c: fix race-condition by flushing workqueue before the kfree() 9p: fix multiple NULL-pointer-dereferences
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 (1):
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
zhangyi (F) (1):
PM / sleep: wakeup: Fix build error caused by missing SRCU support
Greg KH
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 125 +SUBLEVEL = 126 EXTRAVERSION = NAME = Roaring Lionus
arch/alpha/kernel/osf_sys.c +28 -36
102 lines not on this page · raw message
arch/arm/boot/dts/tegra30-cardhu.dtsi +1 -0
@@ -205,6 +205,7 @@ #address-cells = <1>; #size-cells = <0>; reg = <0x70>; + reset-gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_LOW>; }; };
arch/powerpc/include/asm/fadump.h +0 -3
@@ -190,9 +190,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 +78 -14
174 lines not on this page · raw message
arch/powerpc/platforms/powernv/pci-ioda.c +37 -0
@@ -3124,12 +3124,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
@@ -346,7 +346,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
@@ -201,23 +201,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
@@ -524,23 +524,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
@@ -529,7 +529,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
@@ -198,12 +198,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
@@ -287,8 +289,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 ;
@@ -298,13 +301,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
@@ -324,6 +327,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
certs/system_keyring.c +2 -1
@@ -14,6 +14,7 @@#include <linux/sched.h> #include <linux/cred.h> #include <linux/err.h> +#include <linux/verification.h> #include <keys/asymmetric-type.h> #include <keys/system_keyring.h> #include <crypto/pkcs7.h>
@@ -207,7 +208,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/crypto/caam/jr.c +2 -1
@@ -189,7 +189,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
@@ -111,24 +111,23 @@ static int p8_aes_cbc_encrypt(struct blkcipher_desc *desc, ret =crypto_blkcipher_encrypt (&fallback_desc, dst, src, nbytes); }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;
@@ -152,24 +151,23 @@ static int p8_aes_cbc_decrypt(struct blkcipher_desc *desc, ret =crypto_blkcipher_decrypt (&fallback_desc, dst, src, nbytes); }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
@@ -123,32 +123,39 @@ static int p8_aes_xts_crypt(struct blkcipher_desc *desc, ret = enc ?crypto_blkcipher_encrypt (&fallback_desc, dst, src, nbytes) :crypto_blkcipher_decrypt (&fallback_desc, dst, src, nbytes); }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/gpu/drm/i915/i915_gem_userptr.c +3 -0
@@ -778,6 +778,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/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
@@ -273,6 +273,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
@@ -1701,8 +1701,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
@@ -1328,8 +1328,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;
@@ -1344,7 +1344,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
@@ -421,6 +421,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;
@@ -1511,6 +1512,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
@@ -1576,7 +1591,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 +2 -1
@@ -344,7 +344,7 @@ static int __write_initial_superblock(struct dm_cache_metadata *cmd) disk_super->version =cpu_to_le32 (MAX_CACHE_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);
@@ -659,6 +659,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);
drivers/md/dm-thin.c +2 -0
@@ -2518,6 +2518,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/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
@@ -293,7 +293,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/net/wireless/marvell/libertas/dev.h +1 -0
@@ -103,6 +103,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
@@ -1341,15 +1341,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);
@@ -1357,9 +1365,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 )) {
@@ -1372,7 +1385,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;
@@ -1387,6 +1400,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
@@ -748,9 +748,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 +2 -0
@@ -382,6 +382,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
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-davinci.c +1 -1
@@ -215,7 +215,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
@@ -715,30 +715,30 @@ static int dspi_probe(struct platform_device *pdev)return PTR_ERR (dspi->regmap); } + 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; master->max_speed_hz =clk_get_rate (dspi->clk) / dspi->devtype_data->max_clock_factor;
drivers/tty/serial/serial_core.c +12 -5
@@ -172,6 +172,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 )
@@ -186,15 +187,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 ) {
@@ -253,6 +257,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
@@ -285,10 +290,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
@@ -1695,12 +1695,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 ;
@@ -1715,17 +1715,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;
@@ -1738,7 +1750,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;
@@ -1750,6 +1762,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
@@ -203,7 +203,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/nfs4proc.c +8 -1
@@ -541,8 +541,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/quota/quota.c +2 -0
@@ -17,6 +17,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)
@@ -706,6 +707,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 +16 -2
@@ -661,6 +661,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 ;
@@ -1265,7 +1270,7 @@ static int recomp_data_node(const struct ubifs_info *c,int err, len, compr_type, out_len; 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 ;
@@ -1344,7 +1349,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 {int compr_type =le16_to_cpu (dn->compr_type);
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/xattr.c +1 -1
@@ -540,7 +540,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/intel-iommu.h +5 -3
@@ -125,6 +125,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)* 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)
@@ -294,6 +295,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
@@ -318,6 +320,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)
@@ -463,9 +466,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
@@ -2151,4 +2151,16 @@ static inline bool pci_ari_enabled(struct pci_bus *bus)/* 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
@@ -155,6 +155,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
@@ -87,7 +87,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/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/nmi.c +2 -2
@@ -260,12 +260,12 @@ void __init printk_nmi_init(void)printk_nmi_flush (); } -void printk_nmi_enter (void ) +void notrace printk_nmi_enter(void) {this_cpu_write (printk_func, vprintk_nmi); } -void printk_nmi_exit (void ) +void notrace printk_nmi_exit(void) {this_cpu_write (printk_func, vprintk_default); }
kernel/sys.c +45 -50
171 lines not on this page · raw message
kernel/trace/blktrace.c +4 -0
@@ -1720,6 +1720,10 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,mutex_lock (&bdev->bd_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
@@ -6920,7 +6920,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
@@ -969,7 +969,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
@@ -649,7 +649,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.
@@ -683,19 +692,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
@@ -373,15 +373,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 ) {
net/9p/client.c +1 -1
@@ -931,7 +931,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
@@ -181,6 +181,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); }/**
@@ -937,7 +939,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 ;
@@ -985,6 +987,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
@@ -622,6 +622,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/ieee802154/6lowpan/tx.c +18 -3
@@ -266,9 +266,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)
@@ -1550,6 +1561,7 @@ call_start(struct rpc_task *task) task->tk_msg.rpc_proc->p_count++; clnt->cl_stats->rpccnt++; task->tk_action = call_reserve; +rpc_task_set_transport (task, clnt); }/*
tools/perf/util/auxtrace.c +3 -0
@@ -195,6 +195,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; }