Linux 5.4.141
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.141 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/virt/kvm/mmu.txt | 4 Makefile | 2 arch/x86/kvm/paging_tmpl.h | 14 - arch/x86/kvm/svm.c | 2 drivers/media/v4l2-core/v4l2-mem2mem.c | 6 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 5 drivers/net/ppp/ppp_generic.c | 19 + drivers/tee/optee/call.c | 2 drivers/tee/optee/core.c | 3 drivers/tee/optee/rpc.c | 5 drivers/tee/optee/shm_pool.c | 8 drivers/tee/tee_shm.c | 4 drivers/usb/dwc3/ep0.c | 2 drivers/usb/dwc3/gadget.c | 118 +++++++-- drivers/usb/host/ehci-pci.c | 3 fs/btrfs/ctree.h | 13 - fs/btrfs/delalloc-space.c | 2 fs/btrfs/delayed-inode.c | 3 fs/btrfs/disk-io.c | 4 fs/btrfs/file.c | 7 fs/btrfs/inode.c | 2 fs/btrfs/qgroup.c | 328 +++++++++++++++++++------- fs/btrfs/qgroup.h | 5 fs/btrfs/transaction.c | 16 - fs/btrfs/transaction.h | 15 - fs/namespace.c | 42 ++- include/linux/tee_drv.h | 1 kernel/trace/trace_events_hist.c | 20 + sound/pci/hda/patch_realtek.c | 1 29 files changed, 467 insertions(+), 189 deletions(-)
Alexandre Courbot (1):
media: v4l2-mem2mem: always consider OUTPUT queue during poll
Filipe Manana (1):
btrfs: fix lockdep splat when enabling and disabling qgroups
Greg Kroah-Hartman (1):
Linux 5.4.141
Lai Jiangshan (1):
KVM: X86: MMU: Use the correct inherited permissions to get shadow page
Longfang Liu (1):
USB:ehci:fix Kunpeng920 ehci hardware problem
Luke D Jones (1):
ALSA: hda: Add quirk for ASUS Flow x13
Masami Hiramatsu (1):
tracing: Reject string operand in the histogram expression
Miklos Szeredi (1):
ovl: prevent private clone if bind mount is not allowed
Nikolay Borisov (4):
btrfs: make qgroup_free_reserved_data take btrfs_inode
btrfs: make btrfs_qgroup_reserve_data take btrfs_inode
btrfs: export and rename qgroup_reserve_meta
btrfs: don't flush from btrfs_delayed_inode_reserve_metadata
Pali Rohár (1):
ppp: Fix generating ppp unit id when ifname is not specified
Qu Wenruo (5):
btrfs: qgroup: allow to unreserve range without releasing other ranges
btrfs: qgroup: try to flush qgroup space when we get -EDQUOT
btrfs: transaction: Cleanup unused TRANS_STATE_BLOCKED
btrfs: qgroup: remove ASYNC_COMMIT mechanism in favor of reserve retry-after-EDQUOT
btrfs: qgroup: don't commit transaction when we already hold the handle
Sean Christopherson (1):
KVM: SVM: Fix off-by-one indexing when nullifying last used SEV VMCB
Sumit Garg (1):
tee: Correct inappropriate usage of TEE_SHM_DMA_BUF flag
Wesley Cheng (7):
usb: dwc3: Stop active transfers before halting the controller
usb: dwc3: gadget: Allow runtime suspend if UDC unbinded
usb: dwc3: gadget: Restart DWC3 gadget when enabling pullup
usb: dwc3: gadget: Prevent EP queuing while stopping transfers
usb: dwc3: gadget: Clear DEP flags after stop transfers in ep disable
usb: dwc3: gadget: Disable gadget IRQ during pullup disable
usb: dwc3: gadget: Avoid runtime resume if disabling pullup
YueHaibing (1):
net: xilinx_emaclite: Do not print real IOMEM pointer
Greg Kroah-Hartman
maintainerDocumentation/virt/kvm/mmu.txt +2 -2
@@ -152,8 +152,8 @@ Shadow pages contain the following information: shadow pages) so role.quadrant takes values in the range 0..3. Each quadrant maps 1GB virtual address space. role.access: - Inherited guest access permissions in the form uwx. Note execute - permission is positive, not negative. + Inherited guest access permissions from the parent ptes in the form uwx. + Note execute permission is positive, not negative. role.invalid: The page is invalid and should not be used. It is a root page that is currently pinned (by a cpu hardware register pointing to it); once it is
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 140 +SUBLEVEL = 141 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/x86/kvm/paging_tmpl.h +9 -5
@@ -90,8 +90,8 @@ struct guest_walker {gpa_t pte_gpa[PT_MAX_FULL_LEVELS ];pt_element_t __user *ptep_user[PT_MAX_FULL_LEVELS ];bool pte_writable[PT_MAX_FULL_LEVELS ]; -unsigned pt_access; -unsigned pte_access; +unsigned int pt_access[PT_MAX_FULL_LEVELS ]; +unsigned int pte_access;gfn_t gfn;struct x86_exception fault; };
@@ -406,13 +406,15 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, } walker->ptes[walker->level -1 ] = pte; + +/* Convert to ACC_*_MASK flags for struct guest_walker. */ + walker->pt_access[walker->level -1 ] =FNAME (gpte_access)(pt_access ^ walk_nx_mask); }while (!is_last_gpte (mmu, walker->level, pte)); pte_pkey =FNAME (gpte_pkeys)(vcpu, pte); accessed_dirty = have_ad ? pte_access &PT_GUEST_ACCESSED_MASK :0 ;/* Convert to ACC_*_MASK flags for struct guest_walker. */ - walker->pt_access =FNAME (gpte_access)(pt_access ^ walk_nx_mask); walker->pte_access =FNAME (gpte_access)(pte_access ^ walk_nx_mask); errcode =permission_fault (vcpu, mmu, walker->pte_access, pte_pkey, access);if (unlikely (errcode))
@@ -451,7 +453,8 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, }pgprintk ("%s: pte %llx pte_access %x pt_access %x\n" , - __func__, (u64 )pte, walker->pte_access, walker->pt_access); + __func__, (u64 )pte, walker->pte_access, + walker->pt_access[walker->level -1 ]);return 1 ; error:
@@ -620,7 +623,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr, {struct kvm_mmu_page *sp =NULL ;struct kvm_shadow_walk_iterator it; -unsigned direct_access, access = gw->pt_access; +unsigned int direct_access, access;int top_level, ret;gfn_t gfn, base_gfn;
@@ -652,6 +655,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr, sp =NULL ;if (!is_shadow_present_pte (*it.sptep)) { table_gfn = gw->table_gfn[it.level -2 ]; + access = gw->pt_access[it.level -2 ]; sp =kvm_mmu_get_page (vcpu, table_gfn, addr, it.level-1 , false, access); }
arch/x86/kvm/svm.c +1 -1
@@ -1783,7 +1783,7 @@ static void __sev_asid_free(int asid)for_each_possible_cpu (cpu) { sd =per_cpu (svm_data, cpu); - sd->sev_vmcbs[pos] =NULL ; + sd->sev_vmcbs[asid] =NULL ; } }
drivers/media/v4l2-core/v4l2-mem2mem.c +2 -4
@@ -635,10 +635,8 @@ static __poll_t v4l2_m2m_poll_for_data(struct file *file,* If the last buffer was dequeued from the capture queue, * return immediately. DQBUF will return -EPIPE. */ -if (dst_q->last_buffer_dequeued) { -spin_unlock_irqrestore (&dst_q->done_lock, flags); -return EPOLLIN |EPOLLRDNORM ; - } +if (dst_q->last_buffer_dequeued) + rc |=EPOLLIN |EPOLLRDNORM ; }spin_unlock_irqrestore (&dst_q->done_lock, flags);
drivers/net/ethernet/xilinx/xilinx_emaclite.c +2 -3
@@ -1191,9 +1191,8 @@ static int xemaclite_of_probe(struct platform_device *ofdev) }dev_info (dev, -"Xilinx EmacLite at 0x%08X mapped to 0x%08X, irq=%d\n" , - (unsigned int __force )ndev->mem_start, - (unsigned int __force )lp->base_addr, ndev->irq); +"Xilinx EmacLite at 0x%08X mapped to 0x%p, irq=%d\n" , + (unsigned int __force )ndev->mem_start, lp->base_addr, ndev->irq);return 0 ; error:
drivers/net/ppp/ppp_generic.c +15 -4
@@ -283,7 +283,7 @@ static struct channel *ppp_find_channel(struct ppp_net *pn, int unit);static int ppp_connect_channel (struct channel *pch,int unit);static int ppp_disconnect_channel (struct channel *pch);static void ppp_destroy_channel (struct channel *pch); -static int unit_get (struct idr *p,void *ptr); +static int unit_get (struct idr *p,void *ptr,int min);static int unit_set (struct idr *p,void *ptr,int n);static void unit_put (struct idr *p,int n);static void *unit_find (struct idr *p,int n);
@@ -959,9 +959,20 @@ static int ppp_unit_register(struct ppp *ppp, int unit, bool ifname_is_set)mutex_lock (&pn->all_ppp_mutex);if (unit <0 ) { - ret =unit_get (&pn->units_idr, ppp); + ret =unit_get (&pn->units_idr, ppp,0 );if (ret <0 ) goto err; +if (!ifname_is_set) { +while (1 ) { +snprintf (ppp->dev->name,IFNAMSIZ ,"ppp%i" , ret); +if (!__dev_get_by_name (ppp->ppp_net, ppp->dev->name)) +break ; +unit_put (&pn->units_idr, ret); + ret =unit_get (&pn->units_idr, ppp, ret +1 ); +if (ret <0 ) + goto err; + } + } }else {/* Caller asked for a specific unit number. Fail with -EEXIST * if unavailable. For backward compatibility, return -EEXIST
@@ -3294,9 +3305,9 @@ static int unit_set(struct idr *p, void *ptr, int n) }/* get new free unit number and associate pointer with it */ -static int unit_get (struct idr *p,void *ptr) +static int unit_get (struct idr *p,void *ptr,int min) { -return idr_alloc (p, ptr,0 ,0 ,GFP_KERNEL ); +return idr_alloc (p, ptr, min,0 ,GFP_KERNEL ); }/* put unit number back to a pool */
drivers/tee/optee/call.c +1 -1
@@ -181,7 +181,7 @@ static struct tee_shm *get_msg_arg(struct tee_context *ctx, size_t num_params,struct optee_msg_arg *ma; shm =tee_shm_alloc (ctx,OPTEE_MSG_GET_ARG_SIZE (num_params), -TEE_SHM_MAPPED ); +TEE_SHM_MAPPED |TEE_SHM_PRIV );if (IS_ERR (shm))return shm;
drivers/tee/optee/core.c +2 -1
@@ -254,7 +254,8 @@ static void optee_release(struct tee_context *ctx)if (!ctxdata)return ; - shm =tee_shm_alloc (ctx,sizeof (struct optee_msg_arg ),TEE_SHM_MAPPED ); + shm =tee_shm_alloc (ctx,sizeof (struct optee_msg_arg ), +TEE_SHM_MAPPED |TEE_SHM_PRIV );if (!IS_ERR (shm)) { arg =tee_shm_get_va (shm,0 );/*
drivers/tee/optee/rpc.c +3 -2
@@ -220,7 +220,7 @@ static void handle_rpc_func_cmd_shm_alloc(struct tee_context *ctx, shm =cmd_alloc_suppl (ctx, sz);break ;case OPTEE_MSG_RPC_SHM_TYPE_KERNEL : - shm =tee_shm_alloc (ctx, sz,TEE_SHM_MAPPED ); + shm =tee_shm_alloc (ctx, sz,TEE_SHM_MAPPED |TEE_SHM_PRIV );break ;default : arg->ret =TEEC_ERROR_BAD_PARAMETERS ;
@@ -405,7 +405,8 @@ void optee_handle_rpc(struct tee_context *ctx, struct optee_rpc_param *param,switch (OPTEE_SMC_RETURN_GET_RPC_FUNC (param->a0)) {case OPTEE_SMC_RPC_FUNC_ALLOC : - shm =tee_shm_alloc (ctx, param->a1,TEE_SHM_MAPPED ); + shm =tee_shm_alloc (ctx, param->a1, +TEE_SHM_MAPPED |TEE_SHM_PRIV );if (!IS_ERR (shm) && !tee_shm_get_pa (shm,0 , &pa)) {reg_pair_from_64 (¶m->a1, ¶m->a2, pa); reg_pair_from_64(¶m->a4, ¶m->a5,
drivers/tee/optee/shm_pool.c +6 -2
@@ -27,7 +27,11 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, shm->paddr =page_to_phys (page); shm->size =PAGE_SIZE << order; -if (shm->flags &TEE_SHM_DMA_BUF ) { +/* +* Shared memory private to the OP-TEE driver doesn't need +* to be registered with OP-TEE. +*/ +if (!(shm->flags &TEE_SHM_PRIV )) {unsigned int nr_pages =1 << order, i;struct page **pages;
@@ -60,7 +64,7 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm,static void pool_op_free (struct tee_shm_pool_mgr *poolm,struct tee_shm *shm) { -if (shm->flags &TEE_SHM_DMA_BUF ) +if (!(shm->flags &TEE_SHM_PRIV ))optee_shm_unregister (shm->ctx, shm);free_pages ((unsigned long )shm->kaddr,get_order (shm->size));
drivers/tee/tee_shm.c +2 -2
@@ -117,7 +117,7 @@ static struct tee_shm *__tee_shm_alloc(struct tee_context *ctx,return ERR_PTR (-EINVAL ); } -if ((flags & ~(TEE_SHM_MAPPED |TEE_SHM_DMA_BUF ))) { +if ((flags & ~(TEE_SHM_MAPPED |TEE_SHM_DMA_BUF |TEE_SHM_PRIV ))) {dev_err (teedev->dev.parent,"invalid shm flags 0x%x" , flags);return ERR_PTR (-EINVAL ); }
@@ -233,7 +233,7 @@ EXPORT_SYMBOL_GPL(tee_shm_priv_alloc);*/ struct tee_shm *tee_shm_alloc_kernel_buf (struct tee_context *ctx,size_t size) { -return tee_shm_alloc (ctx, size,TEE_SHM_MAPPED |TEE_SHM_DMA_BUF ); +return tee_shm_alloc (ctx, size,TEE_SHM_MAPPED ); }EXPORT_SYMBOL_GPL (tee_shm_alloc_kernel_buf);
drivers/usb/dwc3/ep0.c +1 -1
@@ -197,7 +197,7 @@ int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,int ret;spin_lock_irqsave (&dwc->lock, flags); -if (!dep->endpoint.desc) { +if (!dep->endpoint.desc || !dwc->pullups_connected) {dev_err (dwc->dev,"%s: can't queue to disabled endpoint\n" , dep->name); ret = -ESHUTDOWN ;
drivers/usb/dwc3/gadget.c +98 -20
187 lines not on this page · raw message
drivers/usb/host/ehci-pci.c +3 -0
@@ -298,6 +298,9 @@ static int ehci_pci_setup(struct usb_hcd *hcd)if (pdev->vendor ==PCI_VENDOR_ID_STMICRO && pdev->device ==PCI_DEVICE_ID_STMICRO_USB_HOST ) ;/* ConneXT has no sbrn register */ +else if (pdev->vendor ==PCI_VENDOR_ID_HUAWEI + && pdev->device ==0xa239 ) + ;/* HUAWEI Kunpeng920 USB EHCI has no sbrn register */ else pci_read_config_byte (pdev,0x60 , &ehci->sbrn);
fs/btrfs/ctree.h +7 -6
@@ -504,11 +504,6 @@ enum {* (device replace, resize, device add/delete, balance) */ BTRFS_FS_EXCL_OP, -/* -* To info transaction_kthread we need an immediate commit so it -* doesn't need to wait for commit_interval -*/ - BTRFS_FS_NEED_ASYNC_COMMIT,/* * Indicate that balance has been set up from the ioctl and is in the * main phase. The fs_info::balance_ctl is initialized.
@@ -832,7 +827,10 @@ struct btrfs_fs_info {*/ struct ulist *qgroup_ulist; -/* protect user change for quota operations */ +/* +* Protect user change for quota operations. If a transaction is needed, +* it must be started before locking this lock. +*/ struct mutex qgroup_ioctl_lock;/* list of dirty qgroups to be written at next commit */
@@ -945,6 +943,8 @@ enum {BTRFS_ROOT_DEAD_TREE ,/* The root has a log tree. Used only for subvolume roots. */ BTRFS_ROOT_HAS_LOG_TREE , +/* Qgroup flushing is in progress */ + BTRFS_ROOT_QGROUP_FLUSHING, };/*
@@ -1097,6 +1097,7 @@ struct btrfs_root {spinlock_t qgroup_meta_rsv_lock;u64 qgroup_meta_rsv_pertrans;u64 qgroup_meta_rsv_prealloc; +wait_queue_head_t qgroup_flush_wait;/* Number of active swapfiles */ atomic_t nr_swapfiles;
fs/btrfs/delalloc-space.c +1 -1
@@ -151,7 +151,7 @@ int btrfs_check_data_free_space(struct inode *inode,return ret;/* Use new btrfs_qgroup_reserve_data to reserve precious data space. */ - ret =btrfs_qgroup_reserve_data (inode, reserved, start, len); + ret =btrfs_qgroup_reserve_data (BTRFS_I (inode), reserved, start, len);if (ret <0 )btrfs_free_reserved_data_space_noquota (inode, start, len);else
fs/btrfs/delayed-inode.c +2 -1
@@ -627,7 +627,8 @@ static int btrfs_delayed_inode_reserve_metadata(*/ if (!src_rsv || (!trans->bytes_reserved && src_rsv->type !=BTRFS_BLOCK_RSV_DELALLOC )) { - ret =btrfs_qgroup_reserve_meta_prealloc (root, num_bytes, true); + ret =btrfs_qgroup_reserve_meta (root, num_bytes, +BTRFS_QGROUP_RSV_META_PREALLOC , true);if (ret <0 )return ret; ret = btrfs_block_rsv_add(root, dst_rsv, num_bytes,
fs/btrfs/disk-io.c +2 -2
@@ -1154,6 +1154,7 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,mutex_init (&root->log_mutex);mutex_init (&root->ordered_extent_mutex);mutex_init (&root->delalloc_mutex); +init_waitqueue_head (&root->qgroup_flush_wait);init_waitqueue_head (&root->log_writer_wait);init_waitqueue_head (&root->log_commit_wait[0 ]);init_waitqueue_head (&root->log_commit_wait[1 ]);
@@ -1747,8 +1748,7 @@ static int transaction_kthread(void *arg) } now =ktime_get_seconds (); -if (cur->state <TRANS_STATE_BLOCKED && - !test_bit (BTRFS_FS_NEED_ASYNC_COMMIT , &fs_info->flags) && +if (cur->state <TRANS_STATE_COMMIT_START && (now < cur->start_time || now - cur->start_time < fs_info->commit_interval)) {spin_unlock (&fs_info->trans_lock);
fs/btrfs/file.c +4 -3
@@ -3149,7 +3149,7 @@ static int btrfs_zero_range(struct inode *inode, &cached_state);if (ret) goto out; - ret =btrfs_qgroup_reserve_data (inode, &data_reserved, + ret =btrfs_qgroup_reserve_data (BTRFS_I (inode), &data_reserved, alloc_start, bytes_to_reserve);if (ret) { unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart,
@@ -3322,8 +3322,9 @@ static long btrfs_fallocate(struct file *file, int mode,free_extent_map (em);break ; } - ret =btrfs_qgroup_reserve_data (inode, &data_reserved, - cur_offset, last_byte - cur_offset); + ret =btrfs_qgroup_reserve_data (BTRFS_I (inode), + &data_reserved, cur_offset, + last_byte - cur_offset);if (ret <0 ) { cur_offset = last_byte;free_extent_map (em);
fs/btrfs/inode.c +1 -1
@@ -6375,7 +6375,7 @@ static int btrfs_dirty_inode(struct inode *inode)return PTR_ERR (trans); ret =btrfs_update_inode (trans, root, inode); -if (ret && ret == -ENOSPC ) { +if (ret && (ret == -ENOSPC || ret == -EDQUOT )) {/* whoops, lets try again with the full transaction */ btrfs_end_transaction (trans); trans =btrfs_start_transaction (root,1 );
fs/btrfs/qgroup.c +247 -81
496 lines not on this page · raw message
fs/btrfs/qgroup.h +3 -2
@@ -344,12 +344,13 @@ int btrfs_verify_qgroup_counts(struct btrfs_fs_info *fs_info, u64 qgroupid,#endif /* New io_tree based accurate qgroup reserve API */ -int btrfs_qgroup_reserve_data (struct inode *inode, +int btrfs_qgroup_reserve_data (struct btrfs_inode *inode,struct extent_changeset **reserved,u64 start,u64 len);int btrfs_qgroup_release_data (struct inode *inode,u64 start,u64 len);int btrfs_qgroup_free_data (struct inode *inode,struct extent_changeset *reserved,u64 start,u64 len); - +int btrfs_qgroup_reserve_meta (struct btrfs_root *root,int num_bytes, +enum btrfs_qgroup_rsv_type type,bool enforce);int __btrfs_qgroup_reserve_meta (struct btrfs_root *root,int num_bytes,enum btrfs_qgroup_rsv_type type,bool enforce);/* Reserve metadata space for pertrans and prealloc type */
fs/btrfs/transaction.c +3 -13
@@ -27,7 +27,6 @@static const unsigned int btrfs_blocked_trans_types[TRANS_STATE_MAX ] = { [TRANS_STATE_RUNNING ] =0U , - [TRANS_STATE_BLOCKED ] = __TRANS_START, [TRANS_STATE_COMMIT_START ] = (__TRANS_START | __TRANS_ATTACH), [TRANS_STATE_COMMIT_DOING] = (__TRANS_START | __TRANS_ATTACH |
@@ -388,7 +387,7 @@ int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans,static inline int is_transaction_blocked (struct btrfs_transaction *trans) { -return (trans->state >=TRANS_STATE_BLOCKED && +return (trans->state >=TRANS_STATE_COMMIT_START && trans->state <TRANS_STATE_UNBLOCKED && !TRANS_ABORTED (trans)); }
@@ -580,7 +579,7 @@ start_transaction(struct btrfs_root *root, unsigned int num_items,INIT_LIST_HEAD (&h->new_bgs);smp_mb (); -if (cur_trans->state >=TRANS_STATE_BLOCKED && +if (cur_trans->state >=TRANS_STATE_COMMIT_START &&may_wait_transaction (fs_info, type)) { current->journal_info = h;btrfs_commit_transaction (h);
@@ -797,7 +796,7 @@ int btrfs_should_end_transaction(struct btrfs_trans_handle *trans)struct btrfs_transaction *cur_trans = trans->transaction;smp_mb (); -if (cur_trans->state >=TRANS_STATE_BLOCKED || +if (cur_trans->state >=TRANS_STATE_COMMIT_START || cur_trans->delayed_refs.flushing)return 1 ;
@@ -830,7 +829,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans, {struct btrfs_fs_info *info = trans->fs_info;struct btrfs_transaction *cur_trans = trans->transaction; -int lock = (trans->type !=TRANS_JOIN_NOLOCK );int err =0 ;if (refcount_read (&trans->use_count) >1 ) {
@@ -846,13 +844,6 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,btrfs_trans_release_chunk_metadata (trans); -if (lock &&READ_ONCE (cur_trans->state) ==TRANS_STATE_BLOCKED ) { -if (throttle) -return btrfs_commit_transaction (trans); -else -wake_up_process (info->transaction_kthread); - } -if (trans->type & __TRANS_FREEZABLE)sb_end_intwrite (info->sb);
@@ -2306,7 +2297,6 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)*/ cur_trans->state =TRANS_STATE_COMPLETED ;wake_up (&cur_trans->commit_wait); -clear_bit (BTRFS_FS_NEED_ASYNC_COMMIT , &fs_info->flags);spin_lock (&fs_info->trans_lock);list_del_init (&cur_trans->list);
fs/btrfs/transaction.h +0 -15
@@ -13,7 +13,6 @@enum btrfs_trans_state {TRANS_STATE_RUNNING , -TRANS_STATE_BLOCKED ,TRANS_STATE_COMMIT_START ,TRANS_STATE_COMMIT_DOING ,TRANS_STATE_UNBLOCKED ,
@@ -208,20 +207,6 @@ int btrfs_clean_one_deleted_snapshot(struct btrfs_root *root);int btrfs_commit_transaction (struct btrfs_trans_handle *trans);int btrfs_commit_transaction_async (struct btrfs_trans_handle *trans,int wait_for_unblock); - -/* -* Try to commit transaction asynchronously, so this is safe to call -* even holding a spinlock. -* -* It's done by informing transaction_kthread to commit transaction without -* waiting for commit interval. -*/ -static inline void btrfs_commit_transaction_locksafe ( -struct btrfs_fs_info *fs_info) -{ -set_bit (BTRFS_FS_NEED_ASYNC_COMMIT , &fs_info->flags); -wake_up_process (fs_info->transaction_kthread); -}int btrfs_end_transaction_throttle (struct btrfs_trans_handle *trans);int btrfs_should_end_transaction (struct btrfs_trans_handle *trans);void btrfs_throttle (struct btrfs_fs_info *fs_info);
fs/namespace.c +28 -14
67 lines not on this page · raw message
include/linux/tee_drv.h +1 -0
@@ -26,6 +26,7 @@#define TEE_SHM_REGISTER BIT(3)/* Memory registered in secure world */ #define TEE_SHM_USER_MAPPED BIT(4)/* Memory mapped in user space */ #define TEE_SHM_POOL BIT(5)/* Memory allocated from pool */ +#define TEE_SHM_PRIV BIT(7)/* Memory private to TEE driver */ struct device ;struct tee_device ;
kernel/trace/trace_events_hist.c +19 -1
@@ -66,7 +66,8 @@C (INVALID_SUBSYS_EVENT ,"Invalid subsystem or event name" ), \C (INVALID_REF_KEY ,"Using variable references in keys not supported" ), \C (VAR_NOT_FOUND ,"Couldn't find variable" ), \ -C (FIELD_NOT_FOUND ,"Couldn't find field" ), +C (FIELD_NOT_FOUND ,"Couldn't find field" ), \ +C (INVALID_STR_OPERAND ,"String type can not be an operand in expression" ), #undef C #define C(a, b) HIST_ERR_##a
@@ -3038,6 +3039,13 @@ static struct hist_field *parse_unary(struct hist_trigger_data *hist_data, ret =PTR_ERR (operand1); goto free; } +if (operand1->flags &HIST_FIELD_FL_STRING ) { +/* String type can not be the operand of unary operator. */ +hist_err (file->tr,HIST_ERR_INVALID_STR_OPERAND ,errpos (str)); +destroy_hist_field (operand1,0 ); + ret = -EINVAL ; + goto free; + } expr->flags |= operand1->flags & (HIST_FIELD_FL_TIMESTAMP |HIST_FIELD_FL_TIMESTAMP_USECS );
@@ -3139,6 +3147,11 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, operand1 =NULL ; goto free; } +if (operand1->flags &HIST_FIELD_FL_STRING ) { +hist_err (file->tr,HIST_ERR_INVALID_STR_OPERAND ,errpos (operand1_str)); + ret = -EINVAL ; + goto free; + }/* rest of string could be another expression e.g. b+c in a+b+c */ operand_flags =0 ;
@@ -3148,6 +3161,11 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, operand2 =NULL ; goto free; } +if (operand2->flags &HIST_FIELD_FL_STRING ) { +hist_err (file->tr,HIST_ERR_INVALID_STR_OPERAND ,errpos (str)); + ret = -EINVAL ; + goto free; + } ret =check_expr_operands (file->tr, operand1, operand2);if (ret)
sound/pci/hda/patch_realtek.c +1 -0
@@ -8122,6 +8122,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1043 ,0x16e3 ,"ASUS UX50" ,ALC269_FIXUP_STEREO_DMIC ),SND_PCI_QUIRK (0x1043 ,0x1740 ,"ASUS UX430UA" ,ALC295_FIXUP_ASUS_DACS ),SND_PCI_QUIRK (0x1043 ,0x17d1 ,"ASUS UX431FL" ,ALC294_FIXUP_ASUS_DUAL_SPK ), +SND_PCI_QUIRK (0x1043 ,0x1662 ,"ASUS GV301QH" ,ALC294_FIXUP_ASUS_DUAL_SPK ),SND_PCI_QUIRK (0x1043 ,0x1881 ,"ASUS Zephyrus S/M" ,ALC294_FIXUP_ASUS_GX502_PINS ),SND_PCI_QUIRK (0x1043 ,0x18b1 ,"Asus MJ401TA" ,ALC256_FIXUP_ASUS_HEADSET_MIC ), SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),