Hello Bjorn, On Sat, Jan 18, 2025 at 02:34:21PM -0600, Bjorn Helgaas wrote: > On Tue, Dec 03, 2024 at 07:38:53AM +0100, Niklas Cassel wrote: > > The test BAR is on the EP side is allocated using pci_epf_alloc_space(), > > which allocates the backing memory using dma_alloc_coherent(), which will > > return zeroed memory regardless of __GFP_ZERO was set or not. > > > +static void pci_epf_test_set_capabilities(struct pci_epf *epf) > > +{ > > + struct pci_epf_test *epf_test = epf_get_drvdata(epf); > > + enum pci_barno test_reg_bar = epf_test->test_reg_bar; > > + struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar]; > > + struct pci_epc *epc = epf->epc; > > + u32 caps = 0; > > + > > + if (epc->ops->align_addr) > > + caps |= CAP_UNALIGNED_ACCESS; > > + > > + reg->caps = cpu_to_le32(caps); > > "make C=2 drivers/pci/" complains about this: > > drivers/pci/endpoint/functions/pci-epf-test.c:756:19: warning: incorrect type in assignment (different base types) > drivers/pci/endpoint/functions/pci-epf-test.c:756:19: expected unsigned int [usertype] caps > drivers/pci/endpoint/functions/pci-epf-test.c:756:19: got restricted __le32 [usertype] Yes, pci-epf-test is broken when it comes to endianness, as reported here: https://lore.kernel.org/linux-pci/ZxYHoi4mv-4eg0TK@xxxxxxxxx/ Nice to see that sparse is complaining about it! :) Mani said that he was going to work on it, but I guess that it fell through the cracks. I sent patch for it here: https://lore.kernel.org/linux-pci/20250120115009.2748899-2-cassel@xxxxxxxxxx/T/#u FWIW, I tested it on rk3588 which is little-endian, and that still worked. However, if you feel that it is a bit too late to queue it now, you could also take only the following change from the patch above: diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c index ffb534a8e50a..cb7e57377214 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -76,7 +76,7 @@ struct pci_epf_test_reg { u32 irq_type; u32 irq_number; u32 flags; - u32 caps; + __le32 caps; } __packed; static struct pci_epf_header test_header = { Kind regards, Niklas