Message ID | 20210312140116.9453-1-alobakin@pm.me (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Lorenzo Pieralisi |
Headers | show |
Series | [RESEND] PCI: dwc: put struct dw_pcie::{ep,pp} into a union to reduce its size | expand |
Hi Alexander, Thank you for sending the patch over! > A single dw_pcie entity can't be a root complex and an endpoint at > the same time. Nice catch! A small nitpick: this would be Root Complex and Endpoint, as it's customary to capitalise these. Also, if you could capitalise the subject line - it could also perhaps be simplified to something like, for example: Optimize struct dw_pcie to reduce its size Feel free to ignore both suggestions, as these are just nitpicks. > We can use this to reduce the size of dw_pcie by 80, from 280 to 200 > bytes (on x32, guess more on x64), by putting the related embedded > structures (struct pcie_port and struct dw_pcie_ep) into a union. [...] > - struct pcie_port pp; > - struct dw_pcie_ep ep; > + union { > + struct pcie_port pp; > + struct dw_pcie_ep ep; > + }; [...] How did you measure the difference? Often, people include pahole output for the "before" and "after", so to speak, to showcase the difference and/or improvement. Do you have something like that handy? Krzysztof
From: Krzysztof Wilczyński <kw@linux.com> Date: Wed, 24 Mar 2021 02:31:42 +0100 > Hi Alexander, Hi! > Thank you for sending the patch over! > > > A single dw_pcie entity can't be a root complex and an endpoint at > > the same time. > > Nice catch! > > A small nitpick: this would be Root Complex and Endpoint, as it's > customary to capitalise these. > > Also, if you could capitalise the subject line - it could also perhaps > be simplified to something like, for example: > > Optimize struct dw_pcie to reduce its size > > Feel free to ignore both suggestions, as these are just nitpicks. They are both correct, so I can send a v2 if this one wont't be picked to the tree, let's say, this week. > > We can use this to reduce the size of dw_pcie by 80, from 280 to 200 > > bytes (on x32, guess more on x64), by putting the related embedded > > structures (struct pcie_port and struct dw_pcie_ep) into a union. > > [...] > > - struct pcie_port pp; > > - struct dw_pcie_ep ep; > > + union { > > + struct pcie_port pp; > > + struct dw_pcie_ep ep; > > + }; > [...] > > How did you measure the difference? Often, people include pahole output > for the "before" and "after", so to speak, to showcase the difference > and/or improvement. Do you have something like that handy? I didn't use pahole to measure the difference, just printed sizeofs for the structures "before" and "after". But I can get pahole's output and include it in v2 to make commit message more useful. > Krzysztof Thanks! Al
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index 7247c8b01f04..ca8aeba548ab 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -266,8 +266,10 @@ struct dw_pcie { size_t atu_size; u32 num_ib_windows; u32 num_ob_windows; - struct pcie_port pp; - struct dw_pcie_ep ep; + union { + struct pcie_port pp; + struct dw_pcie_ep ep; + }; const struct dw_pcie_ops *ops; unsigned int version; int num_lanes;
A single dw_pcie entity can't be a root complex and an endpoint at the same time. We can use this to reduce the size of dw_pcie by 80, from 280 to 200 bytes (on x32, guess more on x64), by putting the related embedded structures (struct pcie_port and struct dw_pcie_ep) into a union. Signed-off-by: Alexander Lobakin <alobakin@pm.me> --- drivers/pci/controller/dwc/pcie-designware.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -- 2.30.2