mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 09:09:47 +02:00
Define a uuid_t GID attribute to identify a dibs device. SMC uses 64 Bit and 128 Bit Global Identifiers (GIDs) per device, that need to be sent via the SMC protocol. Because the smc code uses integers, network endianness and host endianness need to be considered. Avoid this in the dibs layer by using uuid_t byte arrays. Future patches could change SMC to use uuid_t. For now conversion helper functions are introduced. ISM devices provide 64 Bit GIDs. Map them to dibs uuid_t GIDs like this: _________________________________________ | 64 Bit ISM-vPCI GID | 00000000_00000000 | ----------------------------------------- If interpreted as UUID [1], this would be interpreted as the UIID variant, that is reserved for NCS backward compatibility. So it will not collide with UUIDs that were generated according to the standard. smc_loopback already uses version 4 UUIDs as 128 Bit GIDs, move that to dibs loopback. A temporary change to smc_lo_query_rgid() is required, that will be moved to dibs_loopback with a follow-on patch. Provide gid of a dibs device as sysfs read-only attribute. Link: https://datatracker.ietf.org/doc/html/rfc4122 [1] Signed-off-by: Alexandra Winter <wintera@linux.ibm.com> Reviewed-by: Julian Ruess <julianr@linux.ibm.com> Reviewed-by: Mahanta Jambigi <mjambigi@linux.ibm.com> Link: https://patch.msgid.link/20250918110500.1731261-11-wintera@linux.ibm.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
47 lines
1,001 B
C
47 lines
1,001 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Shared Memory Communications Direct over loopback-ism device.
|
|
*
|
|
* SMC-D loopback-ism device structure definitions.
|
|
*
|
|
* Copyright (c) 2024, Alibaba Inc.
|
|
*
|
|
* Author: Wen Gu <guwen@linux.alibaba.com>
|
|
* Tony Lu <tonylu@linux.alibaba.com>
|
|
*
|
|
*/
|
|
|
|
#ifndef _SMC_LOOPBACK_H
|
|
#define _SMC_LOOPBACK_H
|
|
|
|
#include <linux/device.h>
|
|
#include <net/smc.h>
|
|
|
|
#define SMC_LO_MAX_DMBS 5000
|
|
#define SMC_LO_DMBS_HASH_BITS 12
|
|
|
|
struct smc_lo_dmb_node {
|
|
struct hlist_node list;
|
|
u64 token;
|
|
u32 len;
|
|
u32 sba_idx;
|
|
void *cpu_addr;
|
|
dma_addr_t dma_addr;
|
|
refcount_t refcnt;
|
|
};
|
|
|
|
struct smc_lo_dev {
|
|
struct smcd_dev *smcd;
|
|
atomic_t dmb_cnt;
|
|
rwlock_t dmb_ht_lock;
|
|
DECLARE_BITMAP(sba_idx_mask, SMC_LO_MAX_DMBS);
|
|
DECLARE_HASHTABLE(dmb_ht, SMC_LO_DMBS_HASH_BITS);
|
|
wait_queue_head_t ldev_release;
|
|
};
|
|
|
|
const struct smcd_ops *smc_lo_get_smcd_ops(void);
|
|
|
|
int smc_loopback_init(struct smc_lo_dev **smc_lb);
|
|
void smc_loopback_exit(void);
|
|
|
|
#endif /* _SMC_LOOPBACK_H */
|