/
githubmirror
/
rdma-core
Обзор
Документация
Войти
/
githubmirror
/
rdma-core
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
providers/ionic/ionic_memory.c
61 строка
1 KB
Abhijit Gangurde
ionic: Add ionic provider
23 окт 2025, 07:55
23 окт 2025, 07:55
6d82ac7
Код
Авторство
О чём код?
// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB /* * Copyright (c) 2018-2025 Advanced Micro Devices, Inc. All rights reserved. */ #include <infiniband/driver.h> #include <sys/mman.h> #include "ionic_memory.h" #define IONIC_ANON_MFLAGS (MAP_PRIVATE | MAP_ANONYMOUS) #define IONIC_ANON_MPROT (PROT_READ | PROT_WRITE) #define IONIC_DEV_MFLAGS MAP_SHARED #define IONIC_DEV_MPROT PROT_WRITE void *ionic_map_anon(size_t size) { void *ptr; int rc; ptr = mmap(NULL, size, IONIC_ANON_MPROT, IONIC_ANON_MFLAGS, -1, 0); if (ptr == MAP_FAILED) return NULL; rc = ibv_dontfork_range(ptr, size); if (rc) { munmap(ptr, size); errno = rc; return NULL; } return ptr; } void *ionic_map_device(size_t size, int fd, size_t offset) { void *ptr; int rc; ptr = mmap(NULL, size, IONIC_DEV_MPROT, IONIC_DEV_MFLAGS, fd, offset); if (ptr == MAP_FAILED) return NULL; rc = ibv_dontfork_range(ptr, size); if (rc) { munmap(ptr, size); errno = rc; return NULL; } return ptr; } void ionic_unmap(void *ptr, size_t size) { if (ptr) { ibv_dofork_range(ptr, size); munmap(ptr, size); } }