Skip to content

Commit c60181c

Browse files
committed
prepare.sh should wait for the VFs to appear for bluefield case
Signed-off-by: Guvenc Gulce <guevenc.guelce@sap.com>
1 parent 70f7977 commit c60181c

File tree

1 file changed

+39
-8
lines changed

1 file changed

+39
-8
lines changed

hack/prepare.sh

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,17 +241,44 @@ function create_vf() {
241241
}
242242

243243

244-
function get_pattern() {
244+
get_raw_vf_pattern() {
245245
local dev=$1
246-
pattern=$(devlink -js port | \
246+
devlink -js port | \
247247
jq -r --arg dev "$dev" '.port | to_entries[] | select(.key | startswith("pci/" + $dev)) | select(.value.flavour=="pcivf") | .value.netdev' | \
248-
sed -rn 's/(.*[a-z_])[0-9]{1,3}$/\1/p' | uniq)
249-
if [ -z "$pattern" ]; then
250-
err "can't determine the vf pattern for $dev"
251-
elif [ $(wc -l <<< "$pattern") -ne 1 ]; then
252-
err "multiple vf patterns found for $dev"
248+
sed -rn 's/(.*[a-z_])[0-9]{1,3}$/\1/p' | \
249+
uniq
250+
}
251+
252+
function get_pattern() {
253+
local dev=$1
254+
local pattern
255+
256+
if [[ "$IS_ARM_WITH_BLUEFIELD" == "true" ]]; then
257+
local timeout_seconds=120
258+
local interval_seconds=2
259+
local end_time=$(( $(date +%s) + timeout_seconds ))
260+
261+
while [ $(date +%s) -lt $end_time ]; do
262+
pattern=$(get_raw_vf_pattern "$dev")
263+
if [ -n "$pattern" ]; then
264+
if [ $(wc -l <<< "$pattern") -eq 1 ]; then
265+
sleep $interval_seconds
266+
echo "$pattern"
267+
return
268+
fi
269+
fi
270+
sleep $interval_seconds
271+
done
272+
err "timed out after ${timeout_seconds}s waiting for the vf pattern for $dev"
273+
else
274+
pattern=$(get_raw_vf_pattern "$dev")
275+
if [ -z "$pattern" ]; then
276+
err "can't determine the vf pattern for $dev"
277+
elif [ $(wc -l <<< "$pattern") -ne 1 ]; then
278+
err "multiple vf patterns found for $dev"
279+
fi
280+
echo "$pattern"
253281
fi
254-
echo "$pattern"
255282
}
256283

257284
function get_ifname() {
@@ -354,5 +381,9 @@ validate
354381
get_pfs
355382
detect_card_and_arch_type
356383
validate_pf
384+
# Bluefield relies on host side creating VFs, so wait here for systemd to settle and dont rush with the next steps
385+
if [[ "$IS_ARM_WITH_BLUEFIELD" == "true" ]]; then
386+
udevadm settle
387+
fi
357388
create_vf
358389
make_config

0 commit comments

Comments
 (0)