|
108 | 108 | /* We need four bytes per offset */
|
109 | 109 | #define MULTIXACT_OFFSETS_PER_PAGE (BLCKSZ / sizeof(MultiXactOffset))
|
110 | 110 |
|
111 |
| -#define MultiXactIdToOffsetPage(xid) \ |
112 |
| - ((xid) / (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) |
113 |
| -#define MultiXactIdToOffsetEntry(xid) \ |
114 |
| - ((xid) % (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) |
115 |
| -#define MultiXactIdToOffsetSegment(xid) (MultiXactIdToOffsetPage(xid) / SLRU_PAGES_PER_SEGMENT) |
| 111 | +static inline int64 |
| 112 | +MultiXactIdToOffsetPage(MultiXactId multi) |
| 113 | +{ |
| 114 | + return multi / MULTIXACT_OFFSETS_PER_PAGE; |
| 115 | +} |
| 116 | + |
| 117 | +static inline int |
| 118 | +MultiXactIdToOffsetEntry(MultiXactId multi) |
| 119 | +{ |
| 120 | + return multi % MULTIXACT_OFFSETS_PER_PAGE; |
| 121 | +} |
| 122 | + |
| 123 | +static inline int |
| 124 | +MultiXactIdToOffsetSegment(MultiXactId multi) |
| 125 | +{ |
| 126 | + return MultiXactIdToOffsetPage(multi) / SLRU_PAGES_PER_SEGMENT; |
| 127 | +} |
116 | 128 |
|
117 | 129 | /*
|
118 | 130 | * The situation for members is a bit more complex: we store one byte of
|
|
156 | 168 | ((uint32) ((0xFFFFFFFF % MULTIXACT_MEMBERS_PER_PAGE) + 1))
|
157 | 169 |
|
158 | 170 | /* page in which a member is to be found */
|
159 |
| -#define MXOffsetToMemberPage(xid) ((xid) / (TransactionId) MULTIXACT_MEMBERS_PER_PAGE) |
160 |
| -#define MXOffsetToMemberSegment(xid) (MXOffsetToMemberPage(xid) / SLRU_PAGES_PER_SEGMENT) |
| 171 | +static inline int64 |
| 172 | +MXOffsetToMemberPage(MultiXactOffset offset) |
| 173 | +{ |
| 174 | + return offset / MULTIXACT_MEMBERS_PER_PAGE; |
| 175 | +} |
| 176 | + |
| 177 | +static inline int |
| 178 | +MXOffsetToMemberSegment(MultiXactOffset offset) |
| 179 | +{ |
| 180 | + return MXOffsetToMemberPage(offset) / SLRU_PAGES_PER_SEGMENT; |
| 181 | +} |
161 | 182 |
|
162 | 183 | /* Location (byte offset within page) of flag word for a given member */
|
163 |
| -#define MXOffsetToFlagsOffset(xid) \ |
164 |
| - ((((xid) / (TransactionId) MULTIXACT_MEMBERS_PER_MEMBERGROUP) % \ |
165 |
| - (TransactionId) MULTIXACT_MEMBERGROUPS_PER_PAGE) * \ |
166 |
| - (TransactionId) MULTIXACT_MEMBERGROUP_SIZE) |
167 |
| -#define MXOffsetToFlagsBitShift(xid) \ |
168 |
| - (((xid) % (TransactionId) MULTIXACT_MEMBERS_PER_MEMBERGROUP) * \ |
169 |
| - MXACT_MEMBER_BITS_PER_XACT) |
| 184 | +static inline int |
| 185 | +MXOffsetToFlagsOffset(MultiXactOffset offset) |
| 186 | +{ |
| 187 | + MultiXactOffset group = offset / MULTIXACT_MEMBERS_PER_MEMBERGROUP; |
| 188 | + int grouponpg = group % MULTIXACT_MEMBERGROUPS_PER_PAGE; |
| 189 | + int byteoff = grouponpg * MULTIXACT_MEMBERGROUP_SIZE; |
| 190 | + |
| 191 | + return byteoff; |
| 192 | +} |
| 193 | + |
| 194 | +static inline int |
| 195 | +MXOffsetToFlagsBitShift(MultiXactOffset offset) |
| 196 | +{ |
| 197 | + int member_in_group = offset % MULTIXACT_MEMBERS_PER_MEMBERGROUP; |
| 198 | + int bshift = member_in_group * MXACT_MEMBER_BITS_PER_XACT; |
| 199 | + |
| 200 | + return bshift; |
| 201 | +} |
170 | 202 |
|
171 | 203 | /* Location (byte offset within page) of TransactionId of given member */
|
172 |
| -#define MXOffsetToMemberOffset(xid) \ |
173 |
| - (MXOffsetToFlagsOffset(xid) + MULTIXACT_FLAGBYTES_PER_GROUP + \ |
174 |
| - ((xid) % MULTIXACT_MEMBERS_PER_MEMBERGROUP) * sizeof(TransactionId)) |
| 204 | +static inline int |
| 205 | +MXOffsetToMemberOffset(MultiXactOffset offset) |
| 206 | +{ |
| 207 | + int member_in_group = offset % MULTIXACT_MEMBERS_PER_MEMBERGROUP; |
| 208 | + |
| 209 | + return MXOffsetToFlagsOffset(offset) + |
| 210 | + MULTIXACT_FLAGBYTES_PER_GROUP + |
| 211 | + member_in_group * sizeof(TransactionId); |
| 212 | +} |
175 | 213 |
|
176 | 214 | /* Multixact members wraparound thresholds. */
|
177 | 215 | #define MULTIXACT_MEMBER_SAFE_THRESHOLD (MaxMultiXactOffset / 2)
|
178 | 216 | #define MULTIXACT_MEMBER_DANGER_THRESHOLD \
|
179 | 217 | (MaxMultiXactOffset - MaxMultiXactOffset / 4)
|
180 | 218 |
|
181 |
| -#define PreviousMultiXactId(xid) \ |
182 |
| - ((xid) == FirstMultiXactId ? MaxMultiXactId : (xid) - 1) |
| 219 | +static inline MultiXactId |
| 220 | +PreviousMultiXactId(MultiXactId multi) |
| 221 | +{ |
| 222 | + return multi == FirstMultiXactId ? MaxMultiXactId : multi - 1; |
| 223 | +} |
183 | 224 |
|
184 | 225 | /*
|
185 | 226 | * Links to shared-memory data structures for MultiXact control
|
|
0 commit comments