Lines Matching refs:rd

37 static struct page *rd_lookup_page(struct rd_device *rd, sector_t sector)  in rd_lookup_page()  argument
43 page = phys_to_page(rd->mem_addr + (idx << PAGE_SHIFT)); in rd_lookup_page()
52 static void copy_to_rd(struct rd_device *rd, const void *src, in copy_to_rd() argument
61 page = rd_lookup_page(rd, sector); in copy_to_rd()
72 page = rd_lookup_page(rd, sector); in copy_to_rd()
84 static void copy_from_rd(void *dst, struct rd_device *rd, in copy_from_rd() argument
93 page = rd_lookup_page(rd, sector); in copy_from_rd()
106 page = rd_lookup_page(rd, sector); in copy_from_rd()
120 static int rd_do_bvec(struct rd_device *rd, struct page *page, in rd_do_bvec() argument
128 copy_from_rd(mem + off, rd, sector, len); in rd_do_bvec()
132 copy_to_rd(rd, mem + off, sector, len); in rd_do_bvec()
141 struct rd_device *rd = bio->bi_disk->private_data; in rd_submit_bio() local
158 err = rd_do_bvec(rd, bvec.bv_page, len, bvec.bv_offset, in rd_submit_bio()
175 struct rd_device *rd = bdev->bd_disk->private_data; in rd_rw_page() local
180 err = rd_do_bvec(rd, page, PAGE_SIZE, 0, op, sector); in rd_rw_page()
194 struct rd_device *rd = dax_get_private(dax_dev); in rd_dax_direct_access() local
197 size_t max_nr_pages = rd->mem_pages - pgoff; in rd_dax_direct_access()
200 *kaddr = rd->mem_kaddr + offset; in rd_dax_direct_access()
202 *pfn = phys_to_pfn_t(rd->mem_addr + offset, PFN_DEV | PFN_MAP); in rd_dax_direct_access()
247 static int rd_init(struct rd_device *rd, int major, int minor) in rd_init() argument
252 rd->rd_queue = blk_alloc_queue(NUMA_NO_NODE); in rd_init()
253 if (!rd->rd_queue) in rd_init()
262 blk_queue_physical_block_size(rd->rd_queue, PAGE_SIZE); in rd_init()
271 disk->private_data = rd; in rd_init()
274 set_capacity(disk, rd->mem_size >> SECTOR_SHIFT); in rd_init()
275 rd->rd_disk = disk; in rd_init()
277 rd->mem_kaddr = phys_to_virt(rd->mem_addr); in rd_init()
278 rd->mem_pages = PHYS_PFN(rd->mem_size); in rd_init()
279 rd->dax_dev = alloc_dax(rd, disk->disk_name, &rd_dax_ops, DAXDEV_F_SYNC); in rd_init()
280 if (IS_ERR(rd->dax_dev)) { in rd_init()
281 ret = PTR_ERR(rd->dax_dev); in rd_init()
282 dev_err(rd->dev, "alloc_dax failed %d\n", ret); in rd_init()
283 rd->dax_dev = NULL; in rd_init()
288 blk_queue_flag_set(QUEUE_FLAG_NONROT, rd->rd_queue); in rd_init()
289 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, rd->rd_queue); in rd_init()
290 if (rd->dax_dev) in rd_init()
291 blk_queue_flag_set(QUEUE_FLAG_DAX, rd->rd_queue); in rd_init()
293 rd->rd_disk->queue = rd->rd_queue; in rd_init()
294 add_disk(rd->rd_disk); in rd_init()
299 blk_cleanup_queue(rd->rd_queue); in rd_init()
305 struct rd_device *rd; in rd_probe() local
311 rd = devm_kzalloc(dev, sizeof(*rd), GFP_KERNEL); in rd_probe()
312 if (!rd) in rd_probe()
315 rd->dev = dev; in rd_probe()
329 rd->mem_addr = reg.start; in rd_probe()
330 rd->mem_size = resource_size(&reg); in rd_probe()
332 ret = rd_init(rd, rd_major, 0); in rd_probe()
334 rd->mem_size, &rd->mem_addr, rd->mem_kaddr, (bool)rd->dax_dev, ret); in rd_probe()