Quoting Matthew Auld (2019-08-09 23:26:13) > @@ -1369,6 +1371,8 @@ struct drm_i915_private { > */ > resource_size_t stolen_usable_size; /* Total size minus reserved ranges */ > > + struct intel_memory_region *regions[INTEL_MEMORY_UKNOWN]; If there was ever an object to put inside i915_mm, this is sorely the one! > struct intel_uncore uncore; > > struct i915_virtual_gpu vgpu; > @@ -2213,6 +2217,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915, > #define HAS_IPC(dev_priv) (INTEL_INFO(dev_priv)->display.has_ipc) > > #define HAS_REGION(i915, i) (INTEL_INFO(i915)->memory_regions & (i)) > +#define HAS_LMEM(i915) HAS_REGION(i915, REGION_LMEM) > > #define HAS_GT_UC(dev_priv) (INTEL_INFO(dev_priv)->has_gt_uc) > > diff --git a/drivers/gpu/drm/i915/intel_region_lmem.c b/drivers/gpu/drm/i915/intel_region_lmem.c > new file mode 100644 > index 000000000000..ca906d1ff631 > --- /dev/null > +++ b/drivers/gpu/drm/i915/intel_region_lmem.c > @@ -0,0 +1,48 @@ > +// SPDX-License-Identifier: MIT > +/* > + * Copyright © 2019 Intel Corporation > + */ > + > +#include "i915_drv.h" > +#include "intel_memory_region.h" > +#include "gem/i915_gem_lmem.h" > +#include "gem/i915_gem_region.h" > +#include "intel_region_lmem.h" > + > +static struct drm_i915_gem_object * > +lmem_create_object(struct intel_memory_region *mem, > + resource_size_t size, > + unsigned int flags) > +{ > + struct drm_i915_private *i915 = mem->i915; > + struct drm_i915_gem_object *obj; > + unsigned int cache_level; > + > + if (flags & I915_BO_ALLOC_CONTIGUOUS) > + size = roundup_pow_of_two(size); ? I would say that is not your decision to make. The flag says that the allocation should one contiguous block. > + > + if (size > BIT(mem->mm.max_order) * mem->mm.chunk_size) > + return ERR_PTR(-E2BIG); > + > + obj = i915_gem_object_alloc(); > + if (!obj) > + return ERR_PTR(-ENOMEM); > + > + drm_gem_private_object_init(&i915->drm, &obj->base, size); > + i915_gem_object_init(obj, &i915_gem_lmem_obj_ops); > + > + obj->read_domains = I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT; Is it really? Device local memory starts off inside the CPU cache? > + cache_level = HAS_LLC(i915) ? I915_CACHE_LLC : I915_CACHE_NONE; This seems to be a false generalisation. You should be asking the memory region? Besides, the current thinking is not to mark any object as cacheable until the user commands it. -Chris _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel