Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.5-rc3 118 lines 3.6 kB view raw
1/* 2 * ramster.h 3 * 4 * Peer-to-peer transcendent memory 5 * 6 * Copyright (c) 2009-2012, Dan Magenheimer, Oracle Corp. 7 */ 8 9#ifndef _RAMSTER_H_ 10#define _RAMSTER_H_ 11 12/* 13 * format of remote pampd: 14 * bit 0 == intransit 15 * bit 1 == is_remote... if this bit is set, then 16 * bit 2-9 == remotenode 17 * bit 10-22 == size 18 * bit 23-30 == cksum 19 */ 20#define FAKE_PAMPD_INTRANSIT_BITS 1 21#define FAKE_PAMPD_ISREMOTE_BITS 1 22#define FAKE_PAMPD_REMOTENODE_BITS 8 23#define FAKE_PAMPD_REMOTESIZE_BITS 13 24#define FAKE_PAMPD_CHECKSUM_BITS 8 25 26#define FAKE_PAMPD_INTRANSIT_SHIFT 0 27#define FAKE_PAMPD_ISREMOTE_SHIFT (FAKE_PAMPD_INTRANSIT_SHIFT + \ 28 FAKE_PAMPD_INTRANSIT_BITS) 29#define FAKE_PAMPD_REMOTENODE_SHIFT (FAKE_PAMPD_ISREMOTE_SHIFT + \ 30 FAKE_PAMPD_ISREMOTE_BITS) 31#define FAKE_PAMPD_REMOTESIZE_SHIFT (FAKE_PAMPD_REMOTENODE_SHIFT + \ 32 FAKE_PAMPD_REMOTENODE_BITS) 33#define FAKE_PAMPD_CHECKSUM_SHIFT (FAKE_PAMPD_REMOTESIZE_SHIFT + \ 34 FAKE_PAMPD_REMOTESIZE_BITS) 35 36#define FAKE_PAMPD_MASK(x) ((1UL << (x)) - 1) 37 38static inline void *pampd_make_remote(int remotenode, size_t size, 39 unsigned char cksum) 40{ 41 unsigned long fake_pampd = 0; 42 fake_pampd |= 1UL << FAKE_PAMPD_ISREMOTE_SHIFT; 43 fake_pampd |= ((unsigned long)remotenode & 44 FAKE_PAMPD_MASK(FAKE_PAMPD_REMOTENODE_BITS)) << 45 FAKE_PAMPD_REMOTENODE_SHIFT; 46 fake_pampd |= ((unsigned long)size & 47 FAKE_PAMPD_MASK(FAKE_PAMPD_REMOTESIZE_BITS)) << 48 FAKE_PAMPD_REMOTESIZE_SHIFT; 49 fake_pampd |= ((unsigned long)cksum & 50 FAKE_PAMPD_MASK(FAKE_PAMPD_CHECKSUM_BITS)) << 51 FAKE_PAMPD_CHECKSUM_SHIFT; 52 return (void *)fake_pampd; 53} 54 55static inline unsigned int pampd_remote_node(void *pampd) 56{ 57 unsigned long fake_pampd = (unsigned long)pampd; 58 return (fake_pampd >> FAKE_PAMPD_REMOTENODE_SHIFT) & 59 FAKE_PAMPD_MASK(FAKE_PAMPD_REMOTENODE_BITS); 60} 61 62static inline unsigned int pampd_remote_size(void *pampd) 63{ 64 unsigned long fake_pampd = (unsigned long)pampd; 65 return (fake_pampd >> FAKE_PAMPD_REMOTESIZE_SHIFT) & 66 FAKE_PAMPD_MASK(FAKE_PAMPD_REMOTESIZE_BITS); 67} 68 69static inline unsigned char pampd_remote_cksum(void *pampd) 70{ 71 unsigned long fake_pampd = (unsigned long)pampd; 72 return (fake_pampd >> FAKE_PAMPD_CHECKSUM_SHIFT) & 73 FAKE_PAMPD_MASK(FAKE_PAMPD_CHECKSUM_BITS); 74} 75 76static inline bool pampd_is_remote(void *pampd) 77{ 78 unsigned long fake_pampd = (unsigned long)pampd; 79 return (fake_pampd >> FAKE_PAMPD_ISREMOTE_SHIFT) & 80 FAKE_PAMPD_MASK(FAKE_PAMPD_ISREMOTE_BITS); 81} 82 83static inline bool pampd_is_intransit(void *pampd) 84{ 85 unsigned long fake_pampd = (unsigned long)pampd; 86 return (fake_pampd >> FAKE_PAMPD_INTRANSIT_SHIFT) & 87 FAKE_PAMPD_MASK(FAKE_PAMPD_INTRANSIT_BITS); 88} 89 90/* note that it is a BUG for intransit to be set without isremote also set */ 91static inline void *pampd_mark_intransit(void *pampd) 92{ 93 unsigned long fake_pampd = (unsigned long)pampd; 94 95 fake_pampd |= 1UL << FAKE_PAMPD_ISREMOTE_SHIFT; 96 fake_pampd |= 1UL << FAKE_PAMPD_INTRANSIT_SHIFT; 97 return (void *)fake_pampd; 98} 99 100static inline void *pampd_mask_intransit_and_remote(void *marked_pampd) 101{ 102 unsigned long pampd = (unsigned long)marked_pampd; 103 104 pampd &= ~(1UL << FAKE_PAMPD_INTRANSIT_SHIFT); 105 pampd &= ~(1UL << FAKE_PAMPD_ISREMOTE_SHIFT); 106 return (void *)pampd; 107} 108 109extern int ramster_remote_async_get(struct tmem_xhandle *, 110 bool, int, size_t, uint8_t, void *extra); 111extern int ramster_remote_put(struct tmem_xhandle *, char *, size_t, 112 bool, int *); 113extern int ramster_remote_flush(struct tmem_xhandle *, int); 114extern int ramster_remote_flush_object(struct tmem_xhandle *, int); 115extern int r2net_register_handlers(void); 116extern int r2net_remote_target_node_set(int); 117 118#endif /* _TMEM_H */