50 lines
1.3 KiB
C
50 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2021 - 2023, Shanghai Yunsilicon Technology Co., Ltd.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#ifndef XSC_IB_UMEM_EX_H
|
|
#define XSC_IB_UMEM_EX_H
|
|
|
|
#include <rdma/ib_umem.h>
|
|
|
|
struct ib_umem_ex;
|
|
struct invalidation_ctx;
|
|
|
|
// ib umem ex ib_umem add peer memory support
|
|
struct ib_umem_ex {
|
|
struct ib_umem umem;
|
|
struct ib_peer_memory_client *ib_peer_mem;
|
|
struct invalidation_ctx *invalidation_ctx;
|
|
void *peer_mem_client_context;
|
|
};
|
|
|
|
// expand ib_umem to ib_umem_ex by reallocate
|
|
struct ib_umem_ex *ib_umem_ex(struct ib_umem *umem);
|
|
|
|
typedef void (*umem_invalidate_func_t)(void *invalidation_cookie,
|
|
struct ib_umem_ex *umem_ex, unsigned long addr, size_t size);
|
|
|
|
struct invalidation_ctx {
|
|
struct ib_umem_ex *umem_ex;
|
|
u64 context_ticket;
|
|
umem_invalidate_func_t func;
|
|
void *cookie;
|
|
int peer_callback;
|
|
int inflight_invalidation;
|
|
int peer_invalidated;
|
|
struct completion comp;
|
|
};
|
|
|
|
struct ib_umem_ex *ib_client_umem_get(struct ib_ucontext *context,
|
|
unsigned long addr, size_t size, int access,
|
|
int dmasync, u8 *peer_exists);
|
|
|
|
void ib_umem_ex_release(struct ib_umem_ex *umem_ex);
|
|
|
|
int ib_client_umem_activate_invalidation_notifier(struct ib_umem_ex *umem_ex,
|
|
umem_invalidate_func_t func,
|
|
void *cookie);
|
|
#endif
|