|
108 | 108 | /* We need four bytes per offset */ |
109 | 109 | #defineMULTIXACT_OFFSETS_PER_PAGE (BLCKSZ / sizeof(MultiXactOffset)) |
110 | 110 |
|
111 | | -#defineMultiXactIdToOffsetPage(xid) \ |
112 | | -((xid) / (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) |
113 | | -#defineMultiXactIdToOffsetEntry(xid) \ |
114 | | -((xid) % (MultiXactOffset) MULTIXACT_OFFSETS_PER_PAGE) |
115 | | -#defineMultiXactIdToOffsetSegment(xid) (MultiXactIdToOffsetPage(xid) / SLRU_PAGES_PER_SEGMENT) |
| 111 | +staticinlineint64 |
| 112 | +MultiXactIdToOffsetPage(MultiXactIdmulti) |
| 113 | +{ |
| 114 | +returnmulti /MULTIXACT_OFFSETS_PER_PAGE; |
| 115 | +} |
| 116 | + |
| 117 | +staticinlineint |
| 118 | +MultiXactIdToOffsetEntry(MultiXactIdmulti) |
| 119 | +{ |
| 120 | +returnmulti %MULTIXACT_OFFSETS_PER_PAGE; |
| 121 | +} |
| 122 | + |
| 123 | +staticinlineint |
| 124 | +MultiXactIdToOffsetSegment(MultiXactIdmulti) |
| 125 | +{ |
| 126 | +returnMultiXactIdToOffsetPage(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 | | -#defineMXOffsetToMemberPage(xid) ((xid) / (TransactionId) MULTIXACT_MEMBERS_PER_PAGE) |
160 | | -#defineMXOffsetToMemberSegment(xid) (MXOffsetToMemberPage(xid) / SLRU_PAGES_PER_SEGMENT) |
| 171 | +staticinlineint64 |
| 172 | +MXOffsetToMemberPage(MultiXactOffsetoffset) |
| 173 | +{ |
| 174 | +returnoffset /MULTIXACT_MEMBERS_PER_PAGE; |
| 175 | +} |
| 176 | + |
| 177 | +staticinlineint |
| 178 | +MXOffsetToMemberSegment(MultiXactOffsetoffset) |
| 179 | +{ |
| 180 | +returnMXOffsetToMemberPage(offset) /SLRU_PAGES_PER_SEGMENT; |
| 181 | +} |
161 | 182 |
|
162 | 183 | /* Location (byte offset within page) of flag word for a given member */ |
163 | | -#defineMXOffsetToFlagsOffset(xid) \ |
164 | | -((((xid) / (TransactionId) MULTIXACT_MEMBERS_PER_MEMBERGROUP) % \ |
165 | | - (TransactionId) MULTIXACT_MEMBERGROUPS_PER_PAGE) * \ |
166 | | - (TransactionId) MULTIXACT_MEMBERGROUP_SIZE) |
167 | | -#defineMXOffsetToFlagsBitShift(xid) \ |
168 | | -(((xid) % (TransactionId) MULTIXACT_MEMBERS_PER_MEMBERGROUP) * \ |
169 | | - MXACT_MEMBER_BITS_PER_XACT) |
| 184 | +staticinlineint |
| 185 | +MXOffsetToFlagsOffset(MultiXactOffsetoffset) |
| 186 | +{ |
| 187 | +MultiXactOffsetgroup=offset /MULTIXACT_MEMBERS_PER_MEMBERGROUP; |
| 188 | +intgrouponpg=group %MULTIXACT_MEMBERGROUPS_PER_PAGE; |
| 189 | +intbyteoff=grouponpg*MULTIXACT_MEMBERGROUP_SIZE; |
| 190 | + |
| 191 | +returnbyteoff; |
| 192 | +} |
| 193 | + |
| 194 | +staticinlineint |
| 195 | +MXOffsetToFlagsBitShift(MultiXactOffsetoffset) |
| 196 | +{ |
| 197 | +intmember_in_group=offset %MULTIXACT_MEMBERS_PER_MEMBERGROUP; |
| 198 | +intbshift=member_in_group*MXACT_MEMBER_BITS_PER_XACT; |
| 199 | + |
| 200 | +returnbshift; |
| 201 | +} |
170 | 202 |
|
171 | 203 | /* Location (byte offset within page) of TransactionId of given member */ |
172 | | -#defineMXOffsetToMemberOffset(xid) \ |
173 | | -(MXOffsetToFlagsOffset(xid) + MULTIXACT_FLAGBYTES_PER_GROUP + \ |
174 | | - ((xid) % MULTIXACT_MEMBERS_PER_MEMBERGROUP) * sizeof(TransactionId)) |
| 204 | +staticinlineint |
| 205 | +MXOffsetToMemberOffset(MultiXactOffsetoffset) |
| 206 | +{ |
| 207 | +intmember_in_group=offset %MULTIXACT_MEMBERS_PER_MEMBERGROUP; |
| 208 | + |
| 209 | +returnMXOffsetToFlagsOffset(offset)+ |
| 210 | +MULTIXACT_FLAGBYTES_PER_GROUP+ |
| 211 | +member_in_group*sizeof(TransactionId); |
| 212 | +} |
175 | 213 |
|
176 | 214 | /* Multixact members wraparound thresholds. */ |
177 | 215 | #defineMULTIXACT_MEMBER_SAFE_THRESHOLD(MaxMultiXactOffset / 2) |
178 | 216 | #defineMULTIXACT_MEMBER_DANGER_THRESHOLD\ |
179 | 217 | (MaxMultiXactOffset - MaxMultiXactOffset / 4) |
180 | 218 |
|
181 | | -#definePreviousMultiXactId(xid) \ |
182 | | -((xid) == FirstMultiXactId ? MaxMultiXactId : (xid) - 1) |
| 219 | +staticinlineMultiXactId |
| 220 | +PreviousMultiXactId(MultiXactIdmulti) |
| 221 | +{ |
| 222 | +returnmulti==FirstMultiXactId ?MaxMultiXactId :multi-1; |
| 223 | +} |
183 | 224 |
|
184 | 225 | /* |
185 | 226 | * Links to shared-memory data structures for MultiXact control |
|