Commit 6b9e315
committed
pci: rollback BAR address on failed move_bar
When a guest (e.g. Windows) programs a BAR to an address outside
the allocatable MMIO range, move_bar fails but the config
register has already been updated by detect_bar_reprogramming.
This inconsistency between config space and MMIO mapping causes
virtio device activation to fail (too few queues enabled),
crashing the VMM.
Restore the BAR address in both config registers and internal
bar_regions when move_bar fails, so the device remains
functional at its original address.
Signed-off-by: CMGS <ilskdw@gmail.com>1 parent 7461143 commit 6b9e315
4 files changed
Lines changed: 40 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
280 | 280 | | |
281 | 281 | | |
282 | 282 | | |
283 | | - | |
284 | | - | |
| 283 | + | |
| 284 | + | |
285 | 285 | | |
286 | 286 | | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
287 | 292 | | |
288 | 293 | | |
289 | 294 | | |
| |||
405 | 410 | | |
406 | 411 | | |
407 | 412 | | |
408 | | - | |
409 | | - | |
| 413 | + | |
| 414 | + | |
410 | 415 | | |
411 | 416 | | |
| 417 | + | |
412 | 418 | | |
413 | 419 | | |
414 | 420 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1093 | 1093 | | |
1094 | 1094 | | |
1095 | 1095 | | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
1096 | 1110 | | |
1097 | 1111 | | |
1098 | 1112 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
93 | 93 | | |
94 | 94 | | |
95 | 95 | | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
96 | 100 | | |
97 | 101 | | |
98 | 102 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1133 | 1133 | | |
1134 | 1134 | | |
1135 | 1135 | | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
1136 | 1147 | | |
1137 | 1148 | | |
1138 | 1149 | | |
| |||
0 commit comments