All of lore.kernel.org
 help / color / mirror / Atom feed
* [anolis-intel-cloud:devel-5.10 2/2] drivers/block/virtio_blk.c:2149:12: warning: 'virtblk_cdev_add' defined but not used
@ 2025-06-19 13:05 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-06-19 13:05 UTC (permalink / raw)
  To: aubrey.li; +Cc: oe-kbuild-all

tree:   https://gitee.com/anolis/intel-cloud-kernel.git devel-5.10
head:   72ad9fd00b32380d70b2ad46ae6dfbf606f42a02
commit: 2114cb6d98e2b0719a7b37bf3cbedab06a854e00 [2/2] anolis: virtio-blk: make chardev only exposed to specific devices
config: x86_64-anolis-intel-cloud-devel-5.10 (https://download.01.org/0day-ci/archive/20250619/202506192047.C7GlCBTP-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/20250619/202506192047.C7GlCBTP-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/202506192047.C7GlCBTP-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/block/virtio_blk.c:2102:5: warning: no previous prototype for 'virtblk_chr_uring_cmd_iopoll' [-Wmissing-prototypes]
    2102 | int virtblk_chr_uring_cmd_iopoll(struct io_uring_cmd *ioucmd,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/block/virtio_blk.c: In function 'virtblk_probe':
   drivers/block/virtio_blk.c:2293:25: warning: unused variable 'i' [-Wunused-variable]
    2293 |         int err, index, i;
         |                         ^
   drivers/block/virtio_blk.c: At top level:
>> drivers/block/virtio_blk.c:2149:12: warning: 'virtblk_cdev_add' defined but not used [-Wunused-function]
    2149 | static int virtblk_cdev_add(struct virtio_blk *vblk)
         |            ^~~~~~~~~~~~~~~~
>> drivers/block/virtio_blk.c:2143:13: warning: 'virtblk_cdev_del' defined but not used [-Wunused-function]
    2143 | static void virtblk_cdev_del(struct cdev *cdev, struct device *cdev_device)
         |             ^~~~~~~~~~~~~~~~


vim +/virtblk_cdev_add +2149 drivers/block/virtio_blk.c

6cc24e242a114a Ferry Meng            2024-07-02  2101  
45a746d87c4215 Ferry Meng            2024-06-20 @2102  int virtblk_chr_uring_cmd_iopoll(struct io_uring_cmd *ioucmd,
45a746d87c4215 Ferry Meng            2024-06-20  2103  				 struct io_comp_batch *iob, unsigned int poll_flags)
45a746d87c4215 Ferry Meng            2024-06-20  2104  {
45a746d87c4215 Ferry Meng            2024-06-20  2105  	struct request *req;
45a746d87c4215 Ferry Meng            2024-06-20  2106  	int ret = 0;
45a746d87c4215 Ferry Meng            2024-06-20  2107  	struct virtio_blk *vblk;
45a746d87c4215 Ferry Meng            2024-06-20  2108  	struct request_queue *q;
45a746d87c4215 Ferry Meng            2024-06-20  2109  
45a746d87c4215 Ferry Meng            2024-06-20  2110  	req = READ_ONCE(ioucmd->cookie);
45a746d87c4215 Ferry Meng            2024-06-20  2111  	vblk = container_of(file_inode(ioucmd->file)->i_cdev,
45a746d87c4215 Ferry Meng            2024-06-20  2112  			struct virtio_blk, cdev);
45a746d87c4215 Ferry Meng            2024-06-20  2113  	q = vblk->disk->queue;
45a746d87c4215 Ferry Meng            2024-06-20  2114  	if (test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
45a746d87c4215 Ferry Meng            2024-06-20  2115  		ret = bio_poll(req->bio, iob, poll_flags);
45a746d87c4215 Ferry Meng            2024-06-20  2116  	return ret;
45a746d87c4215 Ferry Meng            2024-06-20  2117  }
beb2017abd5c9b Ferry Meng            2024-07-29  2118  
beb2017abd5c9b Ferry Meng            2024-07-29  2119  static int virtblk_chr_open(struct inode *inode, struct file *file)
beb2017abd5c9b Ferry Meng            2024-07-29  2120  {
beb2017abd5c9b Ferry Meng            2024-07-29  2121  	return virtblk_device_open(container_of(inode->i_cdev, struct virtio_blk, cdev));
beb2017abd5c9b Ferry Meng            2024-07-29  2122  }
beb2017abd5c9b Ferry Meng            2024-07-29  2123  
beb2017abd5c9b Ferry Meng            2024-07-29  2124  static int virtblk_chr_release(struct inode *inode, struct file *file)
beb2017abd5c9b Ferry Meng            2024-07-29  2125  {
beb2017abd5c9b Ferry Meng            2024-07-29  2126  	virtblk_device_release(container_of(inode->i_cdev, struct virtio_blk, cdev));
beb2017abd5c9b Ferry Meng            2024-07-29  2127  	return 0;
beb2017abd5c9b Ferry Meng            2024-07-29  2128  }
beb2017abd5c9b Ferry Meng            2024-07-29  2129  
beb2017abd5c9b Ferry Meng            2024-07-29  2130  static const struct file_operations virtblk_chr_fops = {
beb2017abd5c9b Ferry Meng            2024-07-29  2131  	.owner		= THIS_MODULE,
beb2017abd5c9b Ferry Meng            2024-07-29  2132  	.open		= virtblk_chr_open,
beb2017abd5c9b Ferry Meng            2024-07-29  2133  	.release	= virtblk_chr_release,
6cc24e242a114a Ferry Meng            2024-07-02  2134  	.uring_cmd	= virtblk_chr_uring_cmd,
45a746d87c4215 Ferry Meng            2024-06-20  2135  	.uring_cmd_iopoll = virtblk_chr_uring_cmd_iopoll,
beb2017abd5c9b Ferry Meng            2024-07-29  2136  };
beb2017abd5c9b Ferry Meng            2024-07-29  2137  
beb2017abd5c9b Ferry Meng            2024-07-29  2138  static void virtblk_cdev_rel(struct device *dev)
beb2017abd5c9b Ferry Meng            2024-07-29  2139  {
beb2017abd5c9b Ferry Meng            2024-07-29  2140  	ida_free(&vd_chr_minor_ida, MINOR(dev->devt));
beb2017abd5c9b Ferry Meng            2024-07-29  2141  }
beb2017abd5c9b Ferry Meng            2024-07-29  2142  
beb2017abd5c9b Ferry Meng            2024-07-29 @2143  static void virtblk_cdev_del(struct cdev *cdev, struct device *cdev_device)
beb2017abd5c9b Ferry Meng            2024-07-29  2144  {
beb2017abd5c9b Ferry Meng            2024-07-29  2145  	cdev_device_del(cdev, cdev_device);
beb2017abd5c9b Ferry Meng            2024-07-29  2146  	put_device(cdev_device);
beb2017abd5c9b Ferry Meng            2024-07-29  2147  }
beb2017abd5c9b Ferry Meng            2024-07-29  2148  
beb2017abd5c9b Ferry Meng            2024-07-29 @2149  static int virtblk_cdev_add(struct virtio_blk *vblk)
beb2017abd5c9b Ferry Meng            2024-07-29  2150  {
beb2017abd5c9b Ferry Meng            2024-07-29  2151  	struct cdev *cdev = &vblk->cdev;
beb2017abd5c9b Ferry Meng            2024-07-29  2152  	struct device *cdev_device = &vblk->cdev_device;
beb2017abd5c9b Ferry Meng            2024-07-29  2153  	int minor, ret;
beb2017abd5c9b Ferry Meng            2024-07-29  2154  
beb2017abd5c9b Ferry Meng            2024-07-29  2155  	minor = ida_alloc(&vd_chr_minor_ida, GFP_KERNEL);
beb2017abd5c9b Ferry Meng            2024-07-29  2156  	if (minor < 0)
beb2017abd5c9b Ferry Meng            2024-07-29  2157  		return minor;
beb2017abd5c9b Ferry Meng            2024-07-29  2158  
beb2017abd5c9b Ferry Meng            2024-07-29  2159  	device_initialize(cdev_device);
beb2017abd5c9b Ferry Meng            2024-07-29  2160  	cdev_device->parent = &vblk->vdev->dev;
beb2017abd5c9b Ferry Meng            2024-07-29  2161  	cdev_device->devt = MKDEV(MAJOR(vd_chr_devt), minor);
beb2017abd5c9b Ferry Meng            2024-07-29  2162  	cdev_device->class = vd_chr_class;
beb2017abd5c9b Ferry Meng            2024-07-29  2163  	cdev_device->release = virtblk_cdev_rel;
beb2017abd5c9b Ferry Meng            2024-07-29  2164  
beb2017abd5c9b Ferry Meng            2024-07-29  2165  	ret = dev_set_name(cdev_device, "%sc0", vblk->disk->disk_name);
beb2017abd5c9b Ferry Meng            2024-07-29  2166  	if (ret)
beb2017abd5c9b Ferry Meng            2024-07-29  2167  		goto fail;
beb2017abd5c9b Ferry Meng            2024-07-29  2168  
beb2017abd5c9b Ferry Meng            2024-07-29  2169  	cdev_init(cdev, &virtblk_chr_fops);
beb2017abd5c9b Ferry Meng            2024-07-29  2170  	cdev->owner = THIS_MODULE;
beb2017abd5c9b Ferry Meng            2024-07-29  2171  	ret = cdev_device_add(cdev, cdev_device);
beb2017abd5c9b Ferry Meng            2024-07-29  2172  	if (ret)
beb2017abd5c9b Ferry Meng            2024-07-29  2173  		goto fail;
beb2017abd5c9b Ferry Meng            2024-07-29  2174  
beb2017abd5c9b Ferry Meng            2024-07-29  2175  	return 0;
beb2017abd5c9b Ferry Meng            2024-07-29  2176  fail:
beb2017abd5c9b Ferry Meng            2024-07-29  2177  	put_device(cdev_device);
beb2017abd5c9b Ferry Meng            2024-07-29  2178  	return ret;
beb2017abd5c9b Ferry Meng            2024-07-29  2179  }
beb2017abd5c9b Ferry Meng            2024-07-29  2180  
cead3662bf2846 Ferry Meng            2025-03-28  2181  #ifdef CONFIG_DEBUG_FS
cead3662bf2846 Ferry Meng            2025-03-28  2182  static int virtblk_dbg_virtqueues_show(struct seq_file *s, void *unused)
cead3662bf2846 Ferry Meng            2025-03-28  2183  {
cead3662bf2846 Ferry Meng            2025-03-28  2184  	struct virtio_blk *vblk = s->private;
cead3662bf2846 Ferry Meng            2025-03-28  2185  	unsigned long flags;
cead3662bf2846 Ferry Meng            2025-03-28  2186  	int i;
cead3662bf2846 Ferry Meng            2025-03-28  2187  
cead3662bf2846 Ferry Meng            2025-03-28  2188  	for (i = 0; i < vblk->num_vqs; i++) {
cead3662bf2846 Ferry Meng            2025-03-28  2189  		spin_lock_irqsave(&vblk->vqs[i].lock, flags);
cead3662bf2846 Ferry Meng            2025-03-28  2190  		virtqueue_show_split_message(vblk->vqs[i].vq, s);
cead3662bf2846 Ferry Meng            2025-03-28  2191  		spin_unlock_irqrestore(&vblk->vqs[i].lock, flags);
cead3662bf2846 Ferry Meng            2025-03-28  2192  	}
cead3662bf2846 Ferry Meng            2025-03-28  2193  	return 0;
cead3662bf2846 Ferry Meng            2025-03-28  2194  }
cead3662bf2846 Ferry Meng            2025-03-28  2195  
cead3662bf2846 Ferry Meng            2025-03-28  2196  static int virtblk_dbg_virtqueues_open(struct inode *inode, struct file *file)
cead3662bf2846 Ferry Meng            2025-03-28  2197  {
cead3662bf2846 Ferry Meng            2025-03-28  2198  	return single_open(file, virtblk_dbg_virtqueues_show, inode->i_private);
cead3662bf2846 Ferry Meng            2025-03-28  2199  }
cead3662bf2846 Ferry Meng            2025-03-28  2200  
cead3662bf2846 Ferry Meng            2025-03-28  2201  static const struct file_operations virtblk_dbg_virtqueue_ops = {
cead3662bf2846 Ferry Meng            2025-03-28  2202  	.open = virtblk_dbg_virtqueues_open,
cead3662bf2846 Ferry Meng            2025-03-28  2203  	.read = seq_read,
cead3662bf2846 Ferry Meng            2025-03-28  2204  	.llseek = seq_lseek,
cead3662bf2846 Ferry Meng            2025-03-28  2205  	.release = single_release,
cead3662bf2846 Ferry Meng            2025-03-28  2206  };
cead3662bf2846 Ferry Meng            2025-03-28  2207  
cead3662bf2846 Ferry Meng            2025-03-28  2208  #ifdef CONFIG_VIRTIO_BLK_RING_PAIR
cead3662bf2846 Ferry Meng            2025-03-28  2209  static int virtblk_dbg_rqs_show(struct seq_file *s, void *unused)
cead3662bf2846 Ferry Meng            2025-03-28  2210  {
cead3662bf2846 Ferry Meng            2025-03-28  2211  	struct virtio_blk *vblk = s->private;
cead3662bf2846 Ferry Meng            2025-03-28  2212  	struct virtblk_indir_desc *indir_desc;
cead3662bf2846 Ferry Meng            2025-03-28  2213  	int i, j;
cead3662bf2846 Ferry Meng            2025-03-28  2214  
cead3662bf2846 Ferry Meng            2025-03-28  2215  	seq_printf(s, "ring_pair is %d\n", vblk->ring_pair);
cead3662bf2846 Ferry Meng            2025-03-28  2216  	if (!vblk->ring_pair)
cead3662bf2846 Ferry Meng            2025-03-28  2217  		return 0;
cead3662bf2846 Ferry Meng            2025-03-28  2218  
cead3662bf2846 Ferry Meng            2025-03-28  2219  	for (i = 0; i < vblk->num_vqs / VIRTBLK_RING_NUM; i++) {
cead3662bf2846 Ferry Meng            2025-03-28  2220  		for (j = 0; j < vblk->tag_set.queue_depth; j++) {
cead3662bf2846 Ferry Meng            2025-03-28  2221  			indir_desc = &vblk->indir_desc[i][j];
cead3662bf2846 Ferry Meng            2025-03-28  2222  			if (indir_desc->desc) {
cead3662bf2846 Ferry Meng            2025-03-28  2223  				seq_printf(s, "hctx %d, tag %d, desc 0x%px, ",
cead3662bf2846 Ferry Meng            2025-03-28  2224  					i / VIRTBLK_RING_NUM, j,
cead3662bf2846 Ferry Meng            2025-03-28  2225  					indir_desc->desc);
cead3662bf2846 Ferry Meng            2025-03-28  2226  				seq_printf(s, "dma_addr 0x%llx, len 0x%x\n",
cead3662bf2846 Ferry Meng            2025-03-28  2227  					indir_desc->dma_addr, indir_desc->len);
cead3662bf2846 Ferry Meng            2025-03-28  2228  			}
cead3662bf2846 Ferry Meng            2025-03-28  2229  		}
cead3662bf2846 Ferry Meng            2025-03-28  2230  	}
cead3662bf2846 Ferry Meng            2025-03-28  2231  
cead3662bf2846 Ferry Meng            2025-03-28  2232  	return 0;
cead3662bf2846 Ferry Meng            2025-03-28  2233  }
cead3662bf2846 Ferry Meng            2025-03-28  2234  
cead3662bf2846 Ferry Meng            2025-03-28  2235  static int virtblk_dbg_rqs_open(struct inode *inode, struct file *file)
cead3662bf2846 Ferry Meng            2025-03-28  2236  {
cead3662bf2846 Ferry Meng            2025-03-28  2237  	return single_open(file, virtblk_dbg_rqs_show, inode->i_private);
cead3662bf2846 Ferry Meng            2025-03-28  2238  }
cead3662bf2846 Ferry Meng            2025-03-28  2239  
cead3662bf2846 Ferry Meng            2025-03-28  2240  static const struct file_operations virtblk_dbg_rqs_ops = {
cead3662bf2846 Ferry Meng            2025-03-28  2241  	.open = virtblk_dbg_rqs_open,
cead3662bf2846 Ferry Meng            2025-03-28  2242  	.read = seq_read,
cead3662bf2846 Ferry Meng            2025-03-28  2243  	.llseek = seq_lseek,
cead3662bf2846 Ferry Meng            2025-03-28  2244  	.release = single_release,
cead3662bf2846 Ferry Meng            2025-03-28  2245  };
cead3662bf2846 Ferry Meng            2025-03-28  2246  #endif
cead3662bf2846 Ferry Meng            2025-03-28  2247  
cead3662bf2846 Ferry Meng            2025-03-28  2248  static int virtio_blk_dev_dbg_init(struct virtio_blk *vblk)
cead3662bf2846 Ferry Meng            2025-03-28  2249  {
cead3662bf2846 Ferry Meng            2025-03-28  2250  	struct dentry *dir, *parent_block_dir;
cead3662bf2846 Ferry Meng            2025-03-28  2251  
cead3662bf2846 Ferry Meng            2025-03-28  2252  	parent_block_dir = vblk->disk->queue->debugfs_dir;
cead3662bf2846 Ferry Meng            2025-03-28  2253  	if (!parent_block_dir)
cead3662bf2846 Ferry Meng            2025-03-28  2254  		return -EIO;
cead3662bf2846 Ferry Meng            2025-03-28  2255  
cead3662bf2846 Ferry Meng            2025-03-28  2256  	dir = debugfs_create_dir("insight", parent_block_dir);
cead3662bf2846 Ferry Meng            2025-03-28  2257  	if (IS_ERR(dir)) {
cead3662bf2846 Ferry Meng            2025-03-28  2258  		dev_err(&vblk->vdev->dev, "Failed to get debugfs dir for '%s'\n",
cead3662bf2846 Ferry Meng            2025-03-28  2259  			vblk->disk->disk_name);
cead3662bf2846 Ferry Meng            2025-03-28  2260  		return -EIO;
cead3662bf2846 Ferry Meng            2025-03-28  2261  	}
cead3662bf2846 Ferry Meng            2025-03-28  2262  
cead3662bf2846 Ferry Meng            2025-03-28  2263  	debugfs_create_file("virtqueues", 0444, dir, vblk, &virtblk_dbg_virtqueue_ops);
cead3662bf2846 Ferry Meng            2025-03-28  2264  #ifdef CONFIG_VIRTIO_BLK_RING_PAIR
cead3662bf2846 Ferry Meng            2025-03-28  2265  	debugfs_create_file("rpair", 0444, dir, vblk, &virtblk_dbg_rqs_ops);
cead3662bf2846 Ferry Meng            2025-03-28  2266  #endif
cead3662bf2846 Ferry Meng            2025-03-28  2267  	vblk->dbg_dir = dir;
cead3662bf2846 Ferry Meng            2025-03-28  2268  	return 0;
cead3662bf2846 Ferry Meng            2025-03-28  2269  }
cead3662bf2846 Ferry Meng            2025-03-28  2270  
cead3662bf2846 Ferry Meng            2025-03-28  2271  static void virtblk_dev_dbg_close(struct virtio_blk *vblk)
cead3662bf2846 Ferry Meng            2025-03-28  2272  {
cead3662bf2846 Ferry Meng            2025-03-28  2273  	debugfs_remove_recursive(vblk->dbg_dir);
cead3662bf2846 Ferry Meng            2025-03-28  2274  }
cead3662bf2846 Ferry Meng            2025-03-28  2275  #else
cead3662bf2846 Ferry Meng            2025-03-28  2276  static int virtblk_dev_dbg_init(struct virtio_blk *vblk) { return 0; }
cead3662bf2846 Ferry Meng            2025-03-28  2277  static void virtblk_dev_dbg_close(struct virtio_blk *vblk) { }
cead3662bf2846 Ferry Meng            2025-03-28  2278  #endif
cead3662bf2846 Ferry Meng            2025-03-28  2279  
24d2f90309b23f Christoph Hellwig     2014-04-15  2280  static unsigned int virtblk_queue_depth;
24d2f90309b23f Christoph Hellwig     2014-04-15  2281  module_param_named(queue_depth, virtblk_queue_depth, uint, 0444);
1cf7e9c68fe842 Jens Axboe            2013-11-01  2282  
c1706d4de3de49 Ferry Meng            2025-03-12  2283  #ifdef CONFIG_VIRTIO_BLK_RING_PAIR
c1706d4de3de49 Ferry Meng            2025-03-12  2284  static unsigned short virtblk_dyn_max_rqs = 16384;
c1706d4de3de49 Ferry Meng            2025-03-12  2285  module_param_named(dyn_max_rqs, virtblk_dyn_max_rqs, short, 0444);
c1706d4de3de49 Ferry Meng            2025-03-12  2286  MODULE_PARM_DESC(dyn_max_rqs, "Max requests per rpair(0~65535), default 2^14");
c1706d4de3de49 Ferry Meng            2025-03-12  2287  #endif
c1706d4de3de49 Ferry Meng            2025-03-12  2288  
8d85fce77edfc2 Greg Kroah-Hartman    2012-12-21  2289  static int virtblk_probe(struct virtio_device *vdev)
e467cde238184d Rusty Russell         2007-10-22  2290  {
e467cde238184d Rusty Russell         2007-10-22  2291  	struct virtio_blk *vblk;
69740c8ba878f5 Christoph Hellwig     2010-02-24  2292  	struct request_queue *q;
f082416f33f41a Ferry Meng            2025-03-25 @2293  	int err, index, i;
a98755c559e0e9 Asias He              2012-08-08  2294  
fd1068e1860e44 Joerg Roedel          2019-02-07  2295  	u32 v, blk_size, max_size, sg_elems, opt_io_size;
69740c8ba878f5 Christoph Hellwig     2010-02-24  2296  	u16 min_io_size;
69740c8ba878f5 Christoph Hellwig     2010-02-24  2297  	u8 physical_block_exp, alignment_offset;
a888f361041681 Joseph Qi             2021-01-22  2298  	unsigned int queue_depth;
e467cde238184d Rusty Russell         2007-10-22  2299  
a4379fd841cc1a Michael S. Tsirkin    2015-01-12  2300  	if (!vdev->config->get) {
a4379fd841cc1a Michael S. Tsirkin    2015-01-12  2301  		dev_err(&vdev->dev, "%s failure: config access disabled\n",
a4379fd841cc1a Michael S. Tsirkin    2015-01-12  2302  			__func__);
a4379fd841cc1a Michael S. Tsirkin    2015-01-12  2303  		return -EINVAL;
a4379fd841cc1a Michael S. Tsirkin    2015-01-12  2304  	}
a4379fd841cc1a Michael S. Tsirkin    2015-01-12  2305  
5087a50e66bd51 Michael S. Tsirkin    2011-10-30  2306  	err = ida_simple_get(&vd_index_ida, 0, minor_to_index(1 << MINORBITS),
5087a50e66bd51 Michael S. Tsirkin    2011-10-30  2307  			     GFP_KERNEL);
5087a50e66bd51 Michael S. Tsirkin    2011-10-30  2308  	if (err < 0)
5087a50e66bd51 Michael S. Tsirkin    2011-10-30  2309  		goto out;
5087a50e66bd51 Michael S. Tsirkin    2011-10-30  2310  	index = err;
4f3bf19c6e8164 Christian Borntraeger 2008-01-31  2311  
0864b79a153342 Rusty Russell         2008-12-30  2312  	/* We need to know how many segments before we allocate. */
855e0c5288177b Rusty Russell         2013-10-14  2313  	err = virtio_cread_feature(vdev, VIRTIO_BLK_F_SEG_MAX,
855e0c5288177b Rusty Russell         2013-10-14  2314  				   struct virtio_blk_config, seg_max,
0864b79a153342 Rusty Russell         2008-12-30  2315  				   &sg_elems);
a5b365a652206c Christoph Hellwig     2010-05-25  2316  
a5b365a652206c Christoph Hellwig     2010-05-25  2317  	/* We need at least one SG element, whatever they say. */
a5b365a652206c Christoph Hellwig     2010-05-25  2318  	if (err || !sg_elems)
0864b79a153342 Rusty Russell         2008-12-30  2319  		sg_elems = 1;
0864b79a153342 Rusty Russell         2008-12-30  2320  
dc1352d4c31048 Stefan Hajnoczi       2021-05-24  2321  	/* Prevent integer overflows and honor max vq size */
dc1352d4c31048 Stefan Hajnoczi       2021-05-24  2322  	sg_elems = min_t(u32, sg_elems, VIRTIO_BLK_MAX_SG_ELEMS - 2);
dc1352d4c31048 Stefan Hajnoczi       2021-05-24  2323  
beb2017abd5c9b Ferry Meng            2024-07-29  2324  	vdev->priv = vblk = kzalloc(sizeof(*vblk), GFP_KERNEL);
e467cde238184d Rusty Russell         2007-10-22  2325  	if (!vblk) {
e467cde238184d Rusty Russell         2007-10-22  2326  		err = -ENOMEM;
5087a50e66bd51 Michael S. Tsirkin    2011-10-30  2327  		goto out_free_index;
e467cde238184d Rusty Russell         2007-10-22  2328  	}
e467cde238184d Rusty Russell         2007-10-22  2329  
90b5feb8c4bebc Stefan Hajnoczi       2020-04-30  2330  	/* This reference is dropped in virtblk_remove(). */
90b5feb8c4bebc Stefan Hajnoczi       2020-04-30  2331  	refcount_set(&vblk->refs, 1);
90b5feb8c4bebc Stefan Hajnoczi       2020-04-30  2332  	mutex_init(&vblk->vdev_mutex);
90b5feb8c4bebc Stefan Hajnoczi       2020-04-30  2333  
e467cde238184d Rusty Russell         2007-10-22  2334  	vblk->vdev = vdev;
a98755c559e0e9 Asias He              2012-08-08  2335  
7a7c924cf03da2 Christoph Hellwig     2011-02-01  2336  	INIT_WORK(&vblk->config_work, virtblk_config_changed_work);
e467cde238184d Rusty Russell         2007-10-22  2337  
6abd6e5a440405 Amit Shah             2011-12-22  2338  	err = init_vq(vblk);
6abd6e5a440405 Amit Shah             2011-12-22  2339  	if (err)
e467cde238184d Rusty Russell         2007-10-22  2340  		goto out_free_vblk;
e467cde238184d Rusty Russell         2007-10-22  2341  
e467cde238184d Rusty Russell         2007-10-22  2342  	/* FIXME: How many partitions?  How long is a piece of string? */
4f3bf19c6e8164 Christian Borntraeger 2008-01-31  2343  	vblk->disk = alloc_disk(1 << PART_BITS);
e467cde238184d Rusty Russell         2007-10-22  2344  	if (!vblk->disk) {
e467cde238184d Rusty Russell         2007-10-22  2345  		err = -ENOMEM;
1cf7e9c68fe842 Jens Axboe            2013-11-01  2346  		goto out_free_vq;
e467cde238184d Rusty Russell         2007-10-22  2347  	}
e467cde238184d Rusty Russell         2007-10-22  2348  
fc4324b4597c4e Rusty Russell         2014-03-19  2349  	/* Default queue sizing is to fill the ring. */
a888f361041681 Joseph Qi             2021-01-22  2350  	if (likely(!virtblk_queue_depth)) {
a888f361041681 Joseph Qi             2021-01-22  2351  		queue_depth = vblk->vqs[0].vq->num_free;
fc4324b4597c4e Rusty Russell         2014-03-19  2352  		/* ... but without indirect descs, we use 2 descs per req */
fc4324b4597c4e Rusty Russell         2014-03-19  2353  		if (!virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC))
a888f361041681 Joseph Qi             2021-01-22  2354  			queue_depth /= 2;
a888f361041681 Joseph Qi             2021-01-22  2355  	} else {
a888f361041681 Joseph Qi             2021-01-22  2356  		queue_depth = virtblk_queue_depth;
fc4324b4597c4e Rusty Russell         2014-03-19  2357  	}
24d2f90309b23f Christoph Hellwig     2014-04-15  2358  
24d2f90309b23f Christoph Hellwig     2014-04-15  2359  	memset(&vblk->tag_set, 0, sizeof(vblk->tag_set));
f082416f33f41a Ferry Meng            2025-03-25  2360  #ifdef CONFIG_VIRTIO_BLK_RING_PAIR
c1706d4de3de49 Ferry Meng            2025-03-12  2361  	if (vblk->ring_pair) {
c1706d4de3de49 Ferry Meng            2025-03-12  2362  		vblk->tag_set.ops = &virtio_mq_pair_ops;
c1706d4de3de49 Ferry Meng            2025-03-12  2363  		vblk->tag_set.nr_hw_queues = vblk->num_vqs / VIRTBLK_RING_NUM;
c1706d4de3de49 Ferry Meng            2025-03-12  2364  		/* For ring pair, we don't want to use io scheduler. So we set
c1706d4de3de49 Ferry Meng            2025-03-12  2365  		 * NO_SCHED flag, in this case BLK_MQ_F_SHOULD_MERGE is unused.
c1706d4de3de49 Ferry Meng            2025-03-12  2366  		 */
c1706d4de3de49 Ferry Meng            2025-03-12  2367  		vblk->tag_set.flags = BLK_MQ_F_DYN_ALLOC | BLK_MQ_F_NO_SCHED;
c1706d4de3de49 Ferry Meng            2025-03-12  2368  		vblk->tag_set.queue_depth = virtblk_dyn_max_rqs;
c1706d4de3de49 Ferry Meng            2025-03-12  2369  		vblk->tag_set.nr_static_rqs = queue_depth;
c1706d4de3de49 Ferry Meng            2025-03-12  2370  	} else {
c1706d4de3de49 Ferry Meng            2025-03-12  2371  		vblk->tag_set.ops = &virtio_mq_ops;
c1706d4de3de49 Ferry Meng            2025-03-12  2372  		vblk->tag_set.nr_hw_queues = vblk->num_vqs;
c1706d4de3de49 Ferry Meng            2025-03-12  2373  		vblk->tag_set.queue_depth = queue_depth;
c1706d4de3de49 Ferry Meng            2025-03-12  2374  		vblk->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
c1706d4de3de49 Ferry Meng            2025-03-12  2375  	}
f082416f33f41a Ferry Meng            2025-03-25  2376  #else
24d2f90309b23f Christoph Hellwig     2014-04-15  2377  	vblk->tag_set.ops = &virtio_mq_ops;
f082416f33f41a Ferry Meng            2025-03-25  2378  	vblk->tag_set.nr_hw_queues = vblk->num_vqs;
a888f361041681 Joseph Qi             2021-01-22  2379  	vblk->tag_set.queue_depth = queue_depth;
24d2f90309b23f Christoph Hellwig     2014-04-15  2380  	vblk->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
c1706d4de3de49 Ferry Meng            2025-03-12  2381  #endif
c1706d4de3de49 Ferry Meng            2025-03-12  2382  	vblk->tag_set.numa_node = NUMA_NO_NODE;
b8b7e0926c7836 Ferry Meng            2024-07-22  2383  	/* For bidirectional passthrough vblk request, both WRITE and READ
b8b7e0926c7836 Ferry Meng            2024-07-22  2384  	 * operations need pre-alloc inline SGs. So we should prealloc twice
b8b7e0926c7836 Ferry Meng            2024-07-22  2385  	 * the size than original ways. Due to the inability to predict whether
b8b7e0926c7836 Ferry Meng            2024-07-22  2386  	 * a request is bidirectional, there may be memory wastage, but won't
b8b7e0926c7836 Ferry Meng            2024-07-22  2387  	 * be significant.
b8b7e0926c7836 Ferry Meng            2024-07-22  2388  	 */
24d2f90309b23f Christoph Hellwig     2014-04-15  2389  	vblk->tag_set.cmd_size =
1cf7e9c68fe842 Jens Axboe            2013-11-01  2390  		sizeof(struct virtblk_req) +
b8b7e0926c7836 Ferry Meng            2024-07-22  2391  		sizeof(struct scatterlist) * 2 * VIRTIO_BLK_INLINE_SG_CNT;
24d2f90309b23f Christoph Hellwig     2014-04-15  2392  	vblk->tag_set.driver_data = vblk;
10e33ddf40faed Suwan Kim             2022-04-07  2393  	vblk->tag_set.nr_maps = 1;
10e33ddf40faed Suwan Kim             2022-04-07  2394  	if (vblk->io_queues[HCTX_TYPE_POLL])
10e33ddf40faed Suwan Kim             2022-04-07  2395  		vblk->tag_set.nr_maps = 3;
1cf7e9c68fe842 Jens Axboe            2013-11-01  2396  

:::::: The code at line 2149 was first introduced by commit
:::::: beb2017abd5c9bd4e92e15d67637e465ca299df3 anolis: virtio-blk: add virtio-blk chardev support

:::::: TO: Ferry Meng <mengferry@linux.alibaba.com>
:::::: CC: Ferry Meng <mengferry@linux.alibaba.com>

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-06-19 13:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-19 13:05 [anolis-intel-cloud:devel-5.10 2/2] drivers/block/virtio_blk.c:2149:12: warning: 'virtblk_cdev_add' defined but not used kernel test robot

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.