* Re: [RFC PATCH] vfio: type1: fix kthread use case [not found] <20200706104915.11460-1-hdanton@sina.com> @ 2020-07-06 11:32 ` Markus Elfring [not found] ` <20200706124241.4392-1-hdanton@sina.com> 2020-07-07 0:31 ` Yan Zhao 2 siblings, 0 replies; 5+ messages in thread From: Markus Elfring @ 2020-07-06 11:32 UTC (permalink / raw) To: Hillf Danton, Alex Williamson, iommu Cc: kernel-janitors, linux-kernel, Christoph Hellwig, Jörg Rödel, Kevin Tian, Yan Zhao … > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -2798,7 +2798,8 @@ static int vfio_iommu_type1_dma_rw_chunk … > - bool kthread = current->mm == NULL; > + bool kthread = current->flags & PF_KTHREAD; > + bool use_mm = current->mm == NULL; … Can it be helpful to convert initialisations for these variables into later assignments? Regards, Markus ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <20200706124241.4392-1-hdanton@sina.com>]
* Re: [RFC PATCH] vfio: type1: fix kthread use case [not found] ` <20200706124241.4392-1-hdanton@sina.com> @ 2020-07-06 13:33 ` Markus Elfring 2020-07-06 14:04 ` Markus Elfring [not found] ` <20200707011420.1416-1-hdanton@sina.com> 2 siblings, 0 replies; 5+ messages in thread From: Markus Elfring @ 2020-07-06 13:33 UTC (permalink / raw) To: Hillf Danton, Alex Williamson, iommu Cc: kernel-janitors, linux-kernel, Christoph Hellwig, Jörg Rödel, Kevin Tian, Yan Zhao >> Can it be helpful to convert initialisations for these variables >> into later assignments? > > Perhaps. Then it looks like the below. … > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -2798,9 +2798,12 @@ static int vfio_iommu_type1_dma_rw_chunk … > - bool kthread = current->mm == NULL; > + bool kthread; > + bool use_mm; I would prefer the following variable declarations then. + bool kthread, use_mm; > size_t offset; > > + kthread = current->flags & PF_KTHREAD; > + use_mm = current->mm == NULL; I propose to move such assignments directly before the corresponding check. … > if (!mm) > return -EPERM; + kthread = current->flags & PF_KTHREAD; + use_mm = !current->mm; > - if (kthread) > + if (kthread && use_mm) > kthread_use_mm(mm); … Regards, Markus ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH] vfio: type1: fix kthread use case [not found] ` <20200706124241.4392-1-hdanton@sina.com> 2020-07-06 13:33 ` Markus Elfring @ 2020-07-06 14:04 ` Markus Elfring [not found] ` <20200707011420.1416-1-hdanton@sina.com> 2 siblings, 0 replies; 5+ messages in thread From: Markus Elfring @ 2020-07-06 14:04 UTC (permalink / raw) To: Hillf Danton, Alex Williamson, iommu Cc: kernel-janitors, linux-kernel, Christoph Hellwig, Jörg Rödel, Kevin Tian, Yan Zhao … > +++ b/drivers/vfio/vfio_iommu_type1.c … > @@ -2812,11 +2815,10 @@ static int vfio_iommu_type1_dma_rw_chunk … > if (!mm) > return -EPERM; > > - if (kthread) > + if (kthread && use_mm) Can another design approach make sense here? + bool thread_use_mm = ((current->flags & PF_KTHREAD) && !current->mm); + if (thread_use_mm) > kthread_use_mm(mm); … Regards, Markus ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <20200707011420.1416-1-hdanton@sina.com>]
* Re: [RFC PATCH] vfio: type1: fix kthread use case [not found] ` <20200707011420.1416-1-hdanton@sina.com> @ 2020-07-07 6:04 ` Markus Elfring 0 siblings, 0 replies; 5+ messages in thread From: Markus Elfring @ 2020-07-07 6:04 UTC (permalink / raw) To: Hillf Danton, iommu Cc: kernel-janitors, linux-kernel, Alex Williamson, Christoph Hellwig, Jörg Rödel, Kevin Tian, Yan Zhao … > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -2798,7 +2798,7 @@ static int vfio_iommu_type1_dma_rw_chunk … > - bool kthread = current->mm == NULL; > + bool kthread_load_mm; > size_t offset; How do you think about to reduce the scope for such variables? https://refactoring.com/catalog/reduceScopeOfVariable.html … > @@ -2812,11 +2812,12 @@ static int vfio_iommu_type1_dma_rw_chunk … > if (!mm) > return -EPERM; … > + kthread_load_mm = current->flags & PF_KTHREAD && > + current->mm == NULL; … Would you like to apply a more succinct code variant? + kthread_load_mm = current->flags & PF_KTHREAD && !current->mm; Regards, Markus ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH] vfio: type1: fix kthread use case [not found] <20200706104915.11460-1-hdanton@sina.com> 2020-07-06 11:32 ` [RFC PATCH] vfio: type1: fix kthread use case Markus Elfring [not found] ` <20200706124241.4392-1-hdanton@sina.com> @ 2020-07-07 0:31 ` Yan Zhao 2 siblings, 0 replies; 5+ messages in thread From: Yan Zhao @ 2020-07-07 0:31 UTC (permalink / raw) To: Hillf Danton Cc: Alex Williamson, iommu, Kevin Tian, Joerg Roedel, linux-kernel, Markus Elfring, Christoph Hellwig On Mon, Jul 06, 2020 at 06:49:15PM +0800, Hillf Danton wrote: > > It's incorrect to tell out if a task is kthread without checking > PF_KTHREAD at all. > > What's also fixed, if no need to be in a seperate patch, is to > invoke kthread_use_mm() without checking the current mm first as > the kthread may hold a mm struct atm and it's not the right place > to switch mm. > > Fixes: 8d46c0cca5f4 ("vfio: introduce vfio_dma_rw to read/write a range of IOVAs") > Cc: Yan Zhao <yan.y.zhao@intel.com> > Cc: Markus Elfring <Markus.Elfring@web.de> > Cc: Christoph Hellwig <hch@lst.de> > Signed-off-by: Hillf Danton <hdanton@sina.com> > --- > > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -2798,7 +2798,8 @@ static int vfio_iommu_type1_dma_rw_chunk > struct mm_struct *mm; > unsigned long vaddr; > struct vfio_dma *dma; > - bool kthread = current->mm == NULL; > + bool kthread = current->flags & PF_KTHREAD; > + bool use_mm = current->mm == NULL; is it acceptable to just rename "kthread" to "kthread_no_use_mm"? I think "current->mm == NULL" in itself implies kthread and not use_mm, as a user thread is not able to have "current->mm == NULL", right? Thanks Yan > size_t offset; > > *copied = 0; > @@ -2812,11 +2813,10 @@ static int vfio_iommu_type1_dma_rw_chunk > return -EPERM; > > mm = get_task_mm(dma->task); > - > if (!mm) > return -EPERM; > > - if (kthread) > + if (kthread && use_mm) > kthread_use_mm(mm); > else if (current->mm != mm) > goto out; > @@ -2843,7 +2843,7 @@ static int vfio_iommu_type1_dma_rw_chunk > } else > *copied = copy_from_user(data, (void __user *)vaddr, > count) ? 0 : count; > - if (kthread) > + if (kthread && use_mm) > kthread_unuse_mm(mm); > out: > mmput(mm); > -- > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-07-07 6:05 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20200706104915.11460-1-hdanton@sina.com>
2020-07-06 11:32 ` [RFC PATCH] vfio: type1: fix kthread use case Markus Elfring
[not found] ` <20200706124241.4392-1-hdanton@sina.com>
2020-07-06 13:33 ` Markus Elfring
2020-07-06 14:04 ` Markus Elfring
[not found] ` <20200707011420.1416-1-hdanton@sina.com>
2020-07-07 6:04 ` Markus Elfring
2020-07-07 0:31 ` Yan Zhao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®