All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Takashi Iwai <tiwai@suse.de>
Subject: drivers/xen/xen-front-pgdir-shbuf.c:84: warning: Function parameter or member 'buf' not described in 'xen_front_pgdir_shbuf_get_dir_start'
Date: Fri, 3 Nov 2023 08:45:48 +0800	[thread overview]
Message-ID: <202311030829.XIMWb8FF-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   4652b8e4f3ffa48c706ec334f048c217a7d9750d
commit: 58f9d806d16a38ed3bae11e2ada83393436a4956 ALSA: xen-front: Use Xen common shared buffer implementation
date:   4 years, 11 months ago
config: x86_64-buildonly-randconfig-002-20231101 (https://download.01.org/0day-ci/archive/20231103/202311030829.XIMWb8FF-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231103/202311030829.XIMWb8FF-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311030829.XIMWb8FF-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/xen/xen-front-pgdir-shbuf.c:39: warning: cannot understand function prototype: 'struct xen_page_directory '
   drivers/xen/xen-front-pgdir-shbuf.c:50: warning: cannot understand function prototype: 'struct xen_front_pgdir_shbuf_ops '
>> drivers/xen/xen-front-pgdir-shbuf.c:84: warning: Function parameter or member 'buf' not described in 'xen_front_pgdir_shbuf_get_dir_start'
>> drivers/xen/xen-front-pgdir-shbuf.c:104: warning: Function parameter or member 'buf' not described in 'xen_front_pgdir_shbuf_map'
>> drivers/xen/xen-front-pgdir-shbuf.c:125: warning: Function parameter or member 'buf' not described in 'xen_front_pgdir_shbuf_unmap'
>> drivers/xen/xen-front-pgdir-shbuf.c:140: warning: Function parameter or member 'buf' not described in 'xen_front_pgdir_shbuf_free'
   drivers/xen/xen-front-pgdir-shbuf.c:168: warning: Function parameter or member 'buf' not described in 'get_num_pages_dir'
   drivers/xen/xen-front-pgdir-shbuf.c:179: warning: Function parameter or member 'buf' not described in 'backend_calc_num_grefs'
   drivers/xen/xen-front-pgdir-shbuf.c:191: warning: Function parameter or member 'buf' not described in 'guest_calc_num_grefs'
   drivers/xen/xen-front-pgdir-shbuf.c:210: warning: Function parameter or member 'buf' not described in 'backend_unmap'
>> drivers/xen/xen-front-pgdir-shbuf.c:257: warning: Function parameter or member 'buf' not described in 'backend_map'
   drivers/xen/xen-front-pgdir-shbuf.c:335: warning: Function parameter or member 'buf' not described in 'backend_fill_page_dir'
   drivers/xen/xen-front-pgdir-shbuf.c:362: warning: Function parameter or member 'buf' not described in 'guest_fill_page_dir'
>> drivers/xen/xen-front-pgdir-shbuf.c:406: warning: Function parameter or member 'buf' not described in 'guest_grant_refs_for_buffer'
>> drivers/xen/xen-front-pgdir-shbuf.c:406: warning: Function parameter or member 'priv_gref_head' not described in 'guest_grant_refs_for_buffer'
   drivers/xen/xen-front-pgdir-shbuf.c:406: warning: Function parameter or member 'gref_idx' not described in 'guest_grant_refs_for_buffer'
   drivers/xen/xen-front-pgdir-shbuf.c:433: warning: Function parameter or member 'buf' not described in 'grant_references'
>> drivers/xen/xen-front-pgdir-shbuf.c:478: warning: Function parameter or member 'buf' not described in 'alloc_storage'
>> drivers/xen/xen-front-pgdir-shbuf.c:518: warning: Function parameter or member 'cfg' not described in 'xen_front_pgdir_shbuf_alloc'


vim +84 drivers/xen/xen-front-pgdir-shbuf.c

b3383974fee272 Oleksandr Andrushchenko 2018-11-30   71  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   72  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   73   * Get granted reference to the very first page of the
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   74   * page directory. Usually this is passed to the backend,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   75   * so it can find/fill the grant references to the buffer's
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   76   * pages.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   77   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   78   * \param buf shared buffer which page directory is of interest.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   79   * \return granted reference to the very first page of the
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   80   * page directory.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   81   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   82  grant_ref_t
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   83  xen_front_pgdir_shbuf_get_dir_start(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  @84  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   85  	if (!buf->grefs)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   86  		return GRANT_INVALID_REF;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   87  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   88  	return buf->grefs[0];
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   89  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   90  EXPORT_SYMBOL_GPL(xen_front_pgdir_shbuf_get_dir_start);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   91  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   92  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   93   * Map granted references of the shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   94   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   95   * Depending on the shared buffer mode of allocation
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   96   * (be_alloc flag) this can either do nothing (for buffers
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   97   * shared by the frontend itself) or map the provided granted
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   98   * references onto the backing storage (buf->pages).
b3383974fee272 Oleksandr Andrushchenko 2018-11-30   99   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  100   * \param buf shared buffer which grants to be maped.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  101   * \return zero on success or a negative number on failure.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  102   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  103  int xen_front_pgdir_shbuf_map(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30 @104  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  105  	if (buf->ops && buf->ops->map)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  106  		return buf->ops->map(buf);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  107  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  108  	/* No need to map own grant references. */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  109  	return 0;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  110  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  111  EXPORT_SYMBOL_GPL(xen_front_pgdir_shbuf_map);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  112  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  113  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  114   * Unmap granted references of the shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  115   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  116   * Depending on the shared buffer mode of allocation
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  117   * (be_alloc flag) this can either do nothing (for buffers
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  118   * shared by the frontend itself) or unmap the provided granted
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  119   * references.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  120   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  121   * \param buf shared buffer which grants to be unmaped.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  122   * \return zero on success or a negative number on failure.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  123   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  124  int xen_front_pgdir_shbuf_unmap(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30 @125  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  126  	if (buf->ops && buf->ops->unmap)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  127  		return buf->ops->unmap(buf);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  128  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  129  	/* No need to unmap own grant references. */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  130  	return 0;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  131  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  132  EXPORT_SYMBOL_GPL(xen_front_pgdir_shbuf_unmap);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  133  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  134  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  135   * Free all the resources of the shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  136   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  137   * \param buf shared buffer which resources to be freed.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  138   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  139  void xen_front_pgdir_shbuf_free(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30 @140  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  141  	if (buf->grefs) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  142  		int i;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  143  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  144  		for (i = 0; i < buf->num_grefs; i++)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  145  			if (buf->grefs[i] != GRANT_INVALID_REF)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  146  				gnttab_end_foreign_access(buf->grefs[i],
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  147  							  0, 0UL);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  148  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  149  	kfree(buf->grefs);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  150  	kfree(buf->directory);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  151  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  152  EXPORT_SYMBOL_GPL(xen_front_pgdir_shbuf_free);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  153  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  154  /*
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  155   * Number of grefs a page can hold with respect to the
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  156   * struct xen_page_directory header.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  157   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  158  #define XEN_NUM_GREFS_PER_PAGE ((PAGE_SIZE - \
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  159  				 offsetof(struct xen_page_directory, \
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  160  					  gref)) / sizeof(grant_ref_t))
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  161  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  162  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  163   * Get the number of pages the page directory consumes itself.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  164   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  165   * \param buf shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  166   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  167  static int get_num_pages_dir(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  168  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  169  	return DIV_ROUND_UP(buf->num_pages, XEN_NUM_GREFS_PER_PAGE);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  170  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  171  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  172  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  173   * Calculate the number of grant references needed to share the buffer
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  174   * and its pages when backend allocates the buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  175   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  176   * \param buf shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  177   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  178  static void backend_calc_num_grefs(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  179  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  180  	/* Only for pages the page directory consumes itself. */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  181  	buf->num_grefs = get_num_pages_dir(buf);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  182  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  183  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  184  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  185   * Calculate the number of grant references needed to share the buffer
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  186   * and its pages when frontend allocates the buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  187   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  188   * \param buf shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  189   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  190  static void guest_calc_num_grefs(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  191  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  192  	/*
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  193  	 * Number of pages the page directory consumes itself
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  194  	 * plus grefs for the buffer pages.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  195  	 */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  196  	buf->num_grefs = get_num_pages_dir(buf) + buf->num_pages;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  197  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  198  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  199  #define xen_page_to_vaddr(page) \
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  200  	((uintptr_t)pfn_to_kaddr(page_to_xen_pfn(page)))
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  201  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  202  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  203   * Unmap the buffer previously mapped with grant references
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  204   * provided by the backend.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  205   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  206   * \param buf shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  207   * \return zero on success or a negative number on failure.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  208   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  209  static int backend_unmap(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  210  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  211  	struct gnttab_unmap_grant_ref *unmap_ops;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  212  	int i, ret;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  213  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  214  	if (!buf->pages || !buf->backend_map_handles || !buf->grefs)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  215  		return 0;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  216  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  217  	unmap_ops = kcalloc(buf->num_pages, sizeof(*unmap_ops),
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  218  			    GFP_KERNEL);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  219  	if (!unmap_ops)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  220  		return -ENOMEM;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  221  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  222  	for (i = 0; i < buf->num_pages; i++) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  223  		phys_addr_t addr;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  224  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  225  		addr = xen_page_to_vaddr(buf->pages[i]);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  226  		gnttab_set_unmap_op(&unmap_ops[i], addr, GNTMAP_host_map,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  227  				    buf->backend_map_handles[i]);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  228  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  229  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  230  	ret = gnttab_unmap_refs(unmap_ops, NULL, buf->pages,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  231  				buf->num_pages);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  232  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  233  	for (i = 0; i < buf->num_pages; i++) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  234  		if (unlikely(unmap_ops[i].status != GNTST_okay))
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  235  			dev_err(&buf->xb_dev->dev,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  236  				"Failed to unmap page %d: %d\n",
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  237  				i, unmap_ops[i].status);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  238  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  239  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  240  	if (ret)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  241  		dev_err(&buf->xb_dev->dev,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  242  			"Failed to unmap grant references, ret %d", ret);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  243  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  244  	kfree(unmap_ops);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  245  	kfree(buf->backend_map_handles);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  246  	buf->backend_map_handles = NULL;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  247  	return ret;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  248  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  249  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  250  /**
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  251   * Map the buffer with grant references provided by the backend.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  252   *
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  253   * \param buf shared buffer.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  254   * \return zero on success or a negative number on failure.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  255   */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  256  static int backend_map(struct xen_front_pgdir_shbuf *buf)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30 @257  {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  258  	struct gnttab_map_grant_ref *map_ops = NULL;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  259  	unsigned char *ptr;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  260  	int ret, cur_gref, cur_dir_page, cur_page, grefs_left;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  261  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  262  	map_ops = kcalloc(buf->num_pages, sizeof(*map_ops), GFP_KERNEL);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  263  	if (!map_ops)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  264  		return -ENOMEM;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  265  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  266  	buf->backend_map_handles = kcalloc(buf->num_pages,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  267  					   sizeof(*buf->backend_map_handles),
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  268  					   GFP_KERNEL);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  269  	if (!buf->backend_map_handles) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  270  		kfree(map_ops);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  271  		return -ENOMEM;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  272  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  273  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  274  	/*
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  275  	 * Read page directory to get grefs from the backend: for external
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  276  	 * buffer we only allocate buf->grefs for the page directory,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  277  	 * so buf->num_grefs has number of pages in the page directory itself.
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  278  	 */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  279  	ptr = buf->directory;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  280  	grefs_left = buf->num_pages;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  281  	cur_page = 0;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  282  	for (cur_dir_page = 0; cur_dir_page < buf->num_grefs; cur_dir_page++) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  283  		struct xen_page_directory *page_dir =
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  284  			(struct xen_page_directory *)ptr;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  285  		int to_copy = XEN_NUM_GREFS_PER_PAGE;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  286  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  287  		if (to_copy > grefs_left)
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  288  			to_copy = grefs_left;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  289  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  290  		for (cur_gref = 0; cur_gref < to_copy; cur_gref++) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  291  			phys_addr_t addr;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  292  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  293  			addr = xen_page_to_vaddr(buf->pages[cur_page]);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  294  			gnttab_set_map_op(&map_ops[cur_page], addr,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  295  					  GNTMAP_host_map,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  296  					  page_dir->gref[cur_gref],
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  297  					  buf->xb_dev->otherend_id);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  298  			cur_page++;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  299  		}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  300  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  301  		grefs_left -= to_copy;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  302  		ptr += PAGE_SIZE;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  303  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  304  	ret = gnttab_map_refs(map_ops, NULL, buf->pages, buf->num_pages);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  305  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  306  	/* Save handles even if error, so we can unmap. */
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  307  	for (cur_page = 0; cur_page < buf->num_pages; cur_page++) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  308  		buf->backend_map_handles[cur_page] = map_ops[cur_page].handle;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  309  		if (unlikely(map_ops[cur_page].status != GNTST_okay))
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  310  			dev_err(&buf->xb_dev->dev,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  311  				"Failed to map page %d: %d\n",
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  312  				cur_page, map_ops[cur_page].status);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  313  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  314  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  315  	if (ret) {
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  316  		dev_err(&buf->xb_dev->dev,
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  317  			"Failed to map grant references, ret %d", ret);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  318  		backend_unmap(buf);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  319  	}
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  320  
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  321  	kfree(map_ops);
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  322  	return ret;
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  323  }
b3383974fee272 Oleksandr Andrushchenko 2018-11-30  324  

:::::: The code at line 84 was first introduced by commit
:::::: b3383974fee272ad0d444a2d083f456879447cd8 xen: Introduce shared buffer helpers for page directory...

:::::: TO: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
:::::: CC: Boris Ostrovsky <boris.ostrovsky@oracle.com>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2023-11-03  0:46 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202311030829.XIMWb8FF-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=oleksandr_andrushchenko@epam.com \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.