#include <linux/pagevec.h>
#include <linux/shmem_fs.h>
#include <linux/swap.h>
#include <drm/drm_cache.h>
#include "gem/i915_gem_region.h"
#include "i915_drv.h"
#include "i915_gem_object.h"
#include "i915_gem_tiling.h"
#include "i915_gemfs.h"
#include "i915_scatterlist.h"
#include "i915_trace.h"
static void check_release_folio_batch(struct folio_batch *fbatch)
{ … }
void shmem_sg_free_table(struct sg_table *st, struct address_space *mapping,
bool dirty, bool backup)
{ … }
int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
size_t size, struct intel_memory_region *mr,
struct address_space *mapping,
unsigned int max_segment)
{ … }
static int shmem_get_pages(struct drm_i915_gem_object *obj)
{ … }
static int
shmem_truncate(struct drm_i915_gem_object *obj)
{ … }
void __shmem_writeback(size_t size, struct address_space *mapping)
{ … }
static void
shmem_writeback(struct drm_i915_gem_object *obj)
{ … }
static int shmem_shrink(struct drm_i915_gem_object *obj, unsigned int flags)
{ … }
void
__i915_gem_object_release_shmem(struct drm_i915_gem_object *obj,
struct sg_table *pages,
bool needs_clflush)
{ … }
void i915_gem_object_put_pages_shmem(struct drm_i915_gem_object *obj, struct sg_table *pages)
{ … }
static void
shmem_put_pages(struct drm_i915_gem_object *obj, struct sg_table *pages)
{ … }
static int
shmem_pwrite(struct drm_i915_gem_object *obj,
const struct drm_i915_gem_pwrite *arg)
{ … }
static int
shmem_pread(struct drm_i915_gem_object *obj,
const struct drm_i915_gem_pread *arg)
{ … }
static void shmem_release(struct drm_i915_gem_object *obj)
{ … }
const struct drm_i915_gem_object_ops i915_gem_shmem_ops = …;
static int __create_shmem(struct drm_i915_private *i915,
struct drm_gem_object *obj,
resource_size_t size)
{ … }
static int shmem_object_init(struct intel_memory_region *mem,
struct drm_i915_gem_object *obj,
resource_size_t offset,
resource_size_t size,
resource_size_t page_size,
unsigned int flags)
{ … }
struct drm_i915_gem_object *
i915_gem_object_create_shmem(struct drm_i915_private *i915,
resource_size_t size)
{ … }
struct drm_i915_gem_object *
i915_gem_object_create_shmem_from_data(struct drm_i915_private *i915,
const void *data, resource_size_t size)
{ … }
static int init_shmem(struct intel_memory_region *mem)
{ … }
static int release_shmem(struct intel_memory_region *mem)
{ … }
static const struct intel_memory_region_ops shmem_region_ops = …;
struct intel_memory_region *i915_gem_shmem_setup(struct drm_i915_private *i915,
u16 type, u16 instance)
{ … }
bool i915_gem_object_is_shmem(const struct drm_i915_gem_object *obj)
{ … }