@@ -448,16 +448,12 @@ parse_nvidia_vgpu_profiles() {
448448 # normalize_pci_address output used at lookup time. Short
449449 # addresses ("AF:00.0") are widened by prepending domain 0.
450450 if [[ $gpu_address =~ ^([0-9A-Fa-f]+):([0-9A-Fa-f]+):([0-9A-Fa-f]+)\. ([0-9A-Fa-f]+)$ ]]; then
451- gpu_address=$( printf " %04x:%s:%s.%s" \
452- " 0x${BASH_REMATCH[1]} " \
453- " ${BASH_REMATCH[2],,} " \
454- " ${BASH_REMATCH[3],,} " \
455- " ${BASH_REMATCH[4],,} " )
451+ gpu_address=$( printf " %04x:%02x:%02x.%x" \
452+ " 0x${BASH_REMATCH[1]} " " 0x${BASH_REMATCH[2]} " \
453+ " 0x${BASH_REMATCH[3]} " " 0x${BASH_REMATCH[4]} " )
456454 elif [[ $gpu_address =~ ^([0-9A-Fa-f]+):([0-9A-Fa-f]+)\. ([0-9A-Fa-f]+)$ ]]; then
457- gpu_address=$( printf " 0000:%s:%s.%s" \
458- " ${BASH_REMATCH[1],,} " \
459- " ${BASH_REMATCH[2],,} " \
460- " ${BASH_REMATCH[3],,} " )
455+ gpu_address=$( printf " 0000:%02x:%02x.%x" \
456+ " 0x${BASH_REMATCH[1]} " " 0x${BASH_REMATCH[2]} " " 0x${BASH_REMATCH[3]} " )
461457 else
462458 gpu_address=" ${gpu_address,,} "
463459 fi
@@ -557,15 +553,15 @@ get_nvidia_profile_info() {
557553parse_pci_address () {
558554 local addr=" $1 "
559555 if [[ $addr =~ ^([0-9A-Fa-f]+):([0-9A-Fa-f]+):([0-9A-Fa-f]+)\. ([0-9A-Fa-f]+)$ ]]; then
560- DOMAIN=" 0x${BASH_REMATCH[1]} "
561- BUS=" 0x${BASH_REMATCH[2]} "
562- SLOT=" 0x${BASH_REMATCH[3]} "
563- FUNC=" 0x${BASH_REMATCH[4]} "
556+ DOMAIN=$( printf " 0x%04x " " 0x ${BASH_REMATCH[1]} " )
557+ BUS=$( printf " 0x%02x " " 0x ${BASH_REMATCH[2]} " )
558+ SLOT=$( printf " 0x%02x " " 0x ${BASH_REMATCH[3]} " )
559+ FUNC=$( printf " 0x%x " " 0x ${BASH_REMATCH[4]} " )
564560 elif [[ $addr =~ ^([0-9A-Fa-f]+):([0-9A-Fa-f]+)\. ([0-9A-Fa-f]+)$ ]]; then
565561 DOMAIN=" 0x0000"
566- BUS=" 0x${BASH_REMATCH[1]} "
567- SLOT=" 0x${BASH_REMATCH[2]} "
568- FUNC=" 0x${BASH_REMATCH[3]} "
562+ BUS=$( printf " 0x%02x " " 0x ${BASH_REMATCH[1]} " )
563+ SLOT=$( printf " 0x%02x " " 0x ${BASH_REMATCH[2]} " )
564+ FUNC=$( printf " 0x%x " " 0x ${BASH_REMATCH[3]} " )
569565 else
570566 DOMAIN=" 0x0000"
571567 BUS=" 0x00"
@@ -574,14 +570,20 @@ parse_pci_address() {
574570 fi
575571}
576572
577- # Normalize a PCI address to its full domain-qualified form ("dddd:bb:ss.f").
578- # Short addresses are widened by prepending domain "0000".
573+ # Normalize a PCI address to its canonical full domain-qualified form
574+ # ("dddd:bb:ss.f", lowercase, zero-padded). Both "dddd:bb:ss.f" (full) and
575+ # "bb:ss.f" (short, domain 0) inputs are accepted.
579576normalize_pci_address () {
580577 local addr=" $1 "
581- if [[ $addr =~ ^[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+\. [0-9A-Fa-f]+$ ]]; then
582- echo " $addr "
578+ if [[ $addr =~ ^([0-9A-Fa-f]+):([0-9A-Fa-f]+):([0-9A-Fa-f]+)\. ([0-9A-Fa-f]+)$ ]]; then
579+ printf " %04x:%02x:%02x.%x\n" \
580+ " 0x${BASH_REMATCH[1]} " " 0x${BASH_REMATCH[2]} " \
581+ " 0x${BASH_REMATCH[3]} " " 0x${BASH_REMATCH[4]} "
582+ elif [[ $addr =~ ^([0-9A-Fa-f]+):([0-9A-Fa-f]+)\. ([0-9A-Fa-f]+)$ ]]; then
583+ printf " 0000:%02x:%02x.%x\n" \
584+ " 0x${BASH_REMATCH[1]} " " 0x${BASH_REMATCH[2]} " " 0x${BASH_REMATCH[3]} "
583585 else
584- echo " 0000: $addr "
586+ echo " $addr "
585587 fi
586588}
587589
0 commit comments