OpenWrt – Blame information for rev 4

Subversion Repositories:
Rev:
Rev Author Line No. Line
4 office 1 #!/bin/sh
2 [ "$ACTION" = add ] || exit
3  
4 NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)"
5 [ "$NPROCS" -gt 1 ] || exit
6  
7 PROC_MASK="$(( (1 << $NPROCS) - 1 ))"
8  
9 find_irq_cpu() {
10 local dev="$1"
11 local match="$(grep -m 1 "$dev\$" /proc/interrupts)"
12 local cpu=0
13  
14 [ -n "$match" ] && {
15 set -- $match
16 shift
17 for cur in `seq 1 $NPROCS`; do
18 [ "$1" -gt 0 ] && {
19 cpu=$(($cur - 1))
20 break
21 }
22 shift
23 done
24 }
25  
26 echo "$cpu"
27 }
28  
29 set_hex_val() {
30 local file="$1"
31 local val="$2"
32 val="$(printf %x "$val")"
33 [ -n "$DEBUG" ] && echo "$file = $val"
34 echo "$val" > "$file"
35 }
36  
37 default_ps="$(uci get "network.@globals[0].default_ps")"
38 [ -n "$default_ps" -a "$default_ps" != 1 ] && exit 0
39  
40 exec 512>/var/lock/smp_tune.lock
41 flock 512 || exit 1
42  
43 for dev in /sys/class/net/*; do
44 [ -d "$dev" ] || continue
45  
46 # ignore virtual interfaces
47 [ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue
48 [ -d "${dev}/device" ] || continue
49  
50 device="$(readlink "${dev}/device")"
51 device="$(basename "$device")"
52 irq_cpu="$(find_irq_cpu "$device")"
53 irq_cpu_mask="$((1 << $irq_cpu))"
54  
55 for q in ${dev}/queues/rx-*; do
56 set_hex_val "$q/rps_cpus" "$(($PROC_MASK & ~$irq_cpu_mask))"
57 done
58  
59 ntxq="$(ls -d ${dev}/queues/tx-* | wc -l)"
60  
61 idx=$(($irq_cpu + 1))
62 for q in ${dev}/queues/tx-*; do
63 set_hex_val "$q/xps_cpus" "$((1 << $idx))"
64 let "idx = idx + 1"
65 [ "$idx" -ge "$NPROCS" ] && idx=0
66 done
67 done