On 9/4/25 4:40 AM, Damien Le Moal wrote:
Hello Damien,
@@ -1050,7 +1051,13 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf)
if (bar == test_reg_bar)
continue;
- base = pci_epf_alloc_space(epf, bar_size[bar], bar,
+ test_bar_size = bar_size[bar];
+
+ bar_fixed_size = epc_features->bar[bar].fixed_size;
+ if (epc_features->bar[bar].type == BAR_FIXED && bar_fixed_size)
+ test_bar_size = min(bar_size[bar], bar_fixed_size);
I think this can be simplified to:
if (epc_features->bar[bar].type == BAR_FIXED)
test_bar_size = epc_features->bar[bar].fixed_size;
else
test_bar_size = bar_size[bar];
because if the bar type is BAR_FIXED, then the size of the bar can only be its
fixed size.
That is correct, however, please consider the following case:
- The BAR under test is BAR4 , therefore the size requested by this
driver is bar_size[4] = 131072 Bytes
- The BAR4 on a hypothetical hardware is a fixed size BAR , 262144 Bytes
large
With your proposed change, the "test_bar_size" would end up being 262144
Bytes , instead of 131072 Bytes without your proposed change , which I
think is not the desired behavior.
What do you think ?