[PATCH v2 17/29] drm/xe: Add SVM device memory mirroring
Matthew Brost
matthew.brost at intel.com
Wed Dec 11 19:44:56 UTC 2024
On Wed, Nov 20, 2024 at 05:05:32AM +0200, Gwan-gyeong Mun wrote:
>
>
> On 10/16/24 6:25 AM, Matthew Brost wrote:
> > +/**
> > + * xe_devm_add: Remap and provide memmap backing for device memory
> > + * @tile: tile that the memory region belongs to
> > + * @mr: memory region to remap
> > + *
> > + * This remap device memory to host physical address space and create
> > + * struct page to back device memory
> > + *
> > + * Return: 0 on success standard error code otherwise
> > + */
> > +int xe_devm_add(struct xe_tile *tile, struct xe_mem_region *mr)
> > +{
> > + struct xe_device *xe = tile_to_xe(tile);
> > + struct device *dev = &to_pci_dev(xe->drm.dev)->dev;
> > + struct resource *res;
> > + void *addr;
> > + int ret;
> > +
> > + res = devm_request_free_mem_region(dev, &iomem_resource,
> > + mr->usable_size);
> To use the devm_request_free_mem_region() function, CONFIG_GET_FREE_REGION=y
> in config.
> xe's kconfig need to have CONFIG_GET_FREE_REGION dependency.
Will add CONFIG_GET_FREE_REGION dependency or perhaps even
CONFIG_XE_DEVMEM_MIRROR Kconfig which enables this code.
Matt
> > + if (IS_ERR(res)) {
> > + ret = PTR_ERR(res);
> > + return ret;
> > + }
> > +
> > + mr->pagemap.type = MEMORY_DEVICE_PRIVATE;
> > + mr->pagemap.range.start = res->start;
> > + mr->pagemap.range.end = res->end;
> > + mr->pagemap.nr_range = 1;
> > + mr->pagemap.ops = drm_gpusvm_pagemap_ops_get();
> > + mr->pagemap.owner = xe_svm_devm_owner(xe);
> > + addr = devm_memremap_pages(dev, &mr->pagemap);
> > + if (IS_ERR(addr)) {
> > + devm_release_mem_region(dev, res->start, resource_size(res));
> > + ret = PTR_ERR(addr);
> > + drm_err(&xe->drm, "Failed to remap tile %d memory, errno %d\n",
> > + tile->id, ret);
> > + return ret;
> > + }
> > + mr->hpa_base = res->start;
> > +
> > + drm_info(&xe->drm, "Added tile %d memory [%llx-%llx] to devm, remapped to %pr\n",
> > + tile->id, mr->io_start, mr->io_start + mr->usable_size, res);
> > + return 0;
> > +}
More information about the Intel-xe
mailing list