1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# 4# Test that PCI reset works correctly by verifying that only the expected reset 5# methods are supported and that after issuing the reset the ifindex of the 6# port changes. 7 8lib_dir=$(dirname $0)/../../../net/forwarding 9 10ALL_TESTS=" 11 pci_reset_test 12" 13NUM_NETIFS=1 14source $lib_dir/lib.sh 15source $lib_dir/devlink_lib.sh 16 17pci_reset_test() 18{ 19 RET=0 20 21 local bus=$(echo $DEVLINK_DEV | cut -d '/' -f 1) 22 local bdf=$(echo $DEVLINK_DEV | cut -d '/' -f 2) 23 24 if [ $bus != "pci" ]; then 25 check_err 1 "devlink device is not a PCI device" 26 log_test "pci reset" 27 return 28 fi 29 30 if [ ! -f /sys/bus/pci/devices/$bdf/reset_method ]; then 31 check_err 1 "reset is not supported" 32 log_test "pci reset" 33 return 34 fi 35 36 [[ $(cat /sys/bus/pci/devices/$bdf/reset_method) == "bus" ]] 37 check_err $? "only \"bus\" reset method should be supported" 38 39 local ifindex_pre=$(ip -j link show dev $swp1 | jq '.[]["ifindex"]') 40 41 echo 1 > /sys/bus/pci/devices/$bdf/reset 42 check_err $? "reset failed" 43 44 # Wait for udev to rename newly created netdev. 45 udevadm settle 46 47 local ifindex_post=$(ip -j link show dev $swp1 | jq '.[]["ifindex"]') 48 49 [[ $ifindex_pre != $ifindex_post ]] 50 check_err $? "reset not performed" 51 52 log_test "pci reset" 53} 54 55swp1=${NETIFS[p1]} 56tests_run 57 58exit $EXIT_STATUS 59