2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-07-31 18:19:40 +00:00

fix(ipmi): never rate-limit packets to an FPC during reseat

reseat_node opens an IPMI session to the FPC/CMM to reseat a node. The FPC
needs packets sent without maxpending flow-control, but that state is only held
transiently. Add a persistent per-session 'neverwait' flag, set it on the FPC
reseat session, and honor it in sendpayload.

The flag defaults off, so it is a no-op for every other IPMI session; only the
FPC reseat path opts in. (The lenovobuild original also reworked the shared
login/admin_level_set nowait handling; that part is left out to avoid changing
flow-control for all BMCs.)

Not lab-validated (no NeXtScale FPC/CMM available).

Recovered from the unmerged lenovobuild branch (eda85df3, neverwait hunks only).
This commit is contained in:
Vinícius Ferrão
2026-07-23 19:32:58 -03:00
parent cf44f51463
commit 7ff2830bf6
2 changed files with 2 additions and 2 deletions
+1 -1
View File
@@ -1203,7 +1203,7 @@ sub sendpayload {
#push integrity data
}
}
unless ($args{nowait} or $self->{nowait}) { #if nowait indicated, the packet will be sent regardless of maxpending
unless ($args{nowait} or $self->{nowait} or $self->{neverwait}) { #if nowait indicated, the packet will be sent regardless of maxpending
#primary use case would be retries that should represent no delta to pending sessions in aggregate and therefore couldn't exceed maxpending anywy
#if we did do this on timedout, waitforrsp may recurse, which is a complicated issue. Theoretically, if waitforrsp protected itself, it
#would act the same, but best be explicit about nowait if practice does not match theory
+1 -1
View File
@@ -2753,7 +2753,7 @@ sub reseat_node {
data => [ $sessdata->{slotnumber}, 2 ],
callback => \&fpc_node_reseat_complete, callback_args => $sessdata);
} else {
$sessdata->{fpcipmisession} = xCAT::IPMI->new(bmc => $mpent->{mpa}, userid => $nodeuser, password => $nodepass);
$sessdata->{fpcipmisession} = xCAT::IPMI->new(bmc => $mpent->{mpa}, userid => $nodeuser, password => $nodepass, neverwait => 1);
$fpcsessions{$mpent->{mpa}} = $sessdata->{fpcipmisession};
$sessdata->{fpcipmisession}->login(callback => \&fpc_node_reseat, callback_args => $sessdata);
}