Thread (36 messages) 36 messages, 4 authors, 2020-06-09

Re: [PATCH 4/6] vhost_vdpa: support doorbell mapping via mmap

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2020-06-03 06:35:06
Also in: kvm, lkml, oe-kbuild-all, virtualization

On Wed, Jun 03, 2020 at 12:18:44PM +0800, Jason Wang wrote:
On 2020/6/2 下午9:31, Michael S. Tsirkin wrote:
quoted
On Tue, Jun 02, 2020 at 02:49:38PM +0800, Jason Wang wrote:
quoted
On 2020/6/2 下午12:56, Michael S. Tsirkin wrote:
quoted
On Tue, Jun 02, 2020 at 03:22:49AM +0800, kbuild test robot wrote:
quoted
Hi Jason,

I love your patch! Yet something to improve:

[auto build test ERROR on vhost/linux-next]
[also build test ERROR on linus/master v5.7 next-20200529]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please seehttps://stackoverflow.com/a/37406982]

url:https://github.com/0day-ci/linux/commits/Jason-Wang/vDPA-doorbell-mapping/20200531-070834
base:https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git  linux-next
config: m68k-randconfig-r011-20200601 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
          wgethttps://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross  -O ~/bin/make.cross
          chmod +x ~/bin/make.cross
          # save the attached .config to linux build tree
          COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot<redacted>

All errors (new ones prefixed by >>, old ones prefixed by <<):

drivers/vhost/vdpa.c: In function 'vhost_vdpa_fault':
quoted
quoted
drivers/vhost/vdpa.c:754:22: error: implicit declaration of function 'pgprot_noncached' [-Werror=implicit-function-declaration]
754 |  vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|                      ^~~~~~~~~~~~~~~~
quoted
quoted
drivers/vhost/vdpa.c:754:22: error: incompatible types when assigning to type 'pgprot_t' {aka 'struct <anonymous>'} from type 'int'
cc1: some warnings being treated as errors

vim +/pgprot_noncached +754 drivers/vhost/vdpa.c

     742	
     743	static vm_fault_t vhost_vdpa_fault(struct vm_fault *vmf)
     744	{
     745		struct vhost_vdpa *v = vmf->vma->vm_file->private_data;
     746		struct vdpa_device *vdpa = v->vdpa;
     747		const struct vdpa_config_ops *ops = vdpa->config;
     748		struct vdpa_notification_area notify;
     749		struct vm_area_struct *vma = vmf->vma;
     750		u16 index = vma->vm_pgoff;
     751	
     752		notify = ops->get_vq_notification(vdpa, index);
     753	
   > 754		vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
     755		if (remap_pfn_range(vma, vmf->address & PAGE_MASK,
     756				    notify.addr >> PAGE_SHIFT, PAGE_SIZE,
     757				    vma->vm_page_prot))
     758			return VM_FAULT_SIGBUS;
     759	
     760		return VM_FAULT_NOPAGE;
     761	}
     762	
Yes well, all this remapping clearly has no chance to work
on systems without CONFIG_MMU.
It looks to me mmap can work according to Documentation/nommu-mmap.txt. But
I'm not sure it's worth to bother.

Thanks
Well

int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
                 unsigned long pfn, unsigned long size, pgprot_t prot)
{
         if (addr != (pfn << PAGE_SHIFT))
                 return -EINVAL;

         vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
         return 0;
}
EXPORT_SYMBOL(remap_pfn_range);


So things aren't going to work if you have a fixed PFN
which is the case of the hardware device.

Looking at the implementation of some drivers e.g mtd_char. If I read the
code correctly, we can do this by providing get_unmapped_area method and use
physical address directly.

But start form CONFIG_MMU should be fine.  Do you prefer making vhost_vdpa
depends on CONFIG_MMU or just fail mmap when CONFIG_MMU is not configured?

Thanks
I'd just not specify the mmap callback at all.
quoted
quoted
quoted
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help