[PATCH V5 2/6] powerpc/powernv: simplify the calculation of iov resource alignment

Gavin Shan gwshan at linux.vnet.ibm.com
Wed Oct 14 12:22:21 AEDT 2015

On Tue, Oct 13, 2015 at 11:56:43AM +0800, Wei Yang wrote:
>On Tue, Oct 13, 2015 at 02:27:52PM +1100, Gavin Shan wrote:
>>On Tue, Oct 13, 2015 at 10:45:45AM +0800, Wei Yang wrote:
>>>On Tue, Oct 13, 2015 at 11:13:50AM +1100, Gavin Shan wrote:
>>>>On Fri, Oct 09, 2015 at 10:46:52AM +0800, Wei Yang wrote:
>>>>>The alignment of IOV BAR on PowerNV platform is the total size of the IOV
>>>>>BAR. No matter whether the IOV BAR is extended with number of
>>>>>roundup_pow_of_two(total_vfs) or number of max PE number (256), the total
>>>>>size could be calculated by (vfs_expanded * VF_BAR_size).
>>>>>This patch simplifies the pnv_pci_iov_resource_alignment() by removing the
>>>>>first case.
>>>>>Signed-off-by: Wei Yang <weiyang at linux.vnet.ibm.com>
>>>>>Reviewed-by: Gavin Shan <gwshan at linux.vnet.ibm.com>
>>>>>Acked-by: Alexey Kardashevskiy <aik at ozlabs.ru>
>>>>> arch/powerpc/platforms/powernv/pci-ioda.c | 20 ++++++++++++--------
>>>>> 1 file changed, 12 insertions(+), 8 deletions(-)
>>>>>diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
>>>>>index 8c031b5..7da476b 100644
>>>>>--- a/arch/powerpc/platforms/powernv/pci-ioda.c
>>>>>+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
>>>>>@@ -2988,17 +2988,21 @@ static resource_size_t pnv_pci_iov_resource_alignment(struct pci_dev *pdev,
>>>>> 						      int resno)
>>>>> {
>>>>> 	struct pci_dn *pdn = pci_get_pdn(pdev);
>>>>>-	resource_size_t align, iov_align;
>>>>>-	iov_align = resource_size(&pdev->resource[resno]);
>>>>>-	if (iov_align)
>>>>>-		return iov_align;
>>>>>+	resource_size_t align;
>>>>>+	/*
>>>>>+	 * On PowerNV platform, IOV BAR is mapped by M64 BAR to enable the
>>>>>+	 * SR-IOV. While from hardware perspective, the range mapped by M64
>>>>>+	 * BAR should be size aligned.
>>>>>+	 *
>>>>>+	 * This function returns the total IOV BAR size if M64 BAR is in
>>>>>+	 * Shared PE mode or just the individual size if not.
>>>>>+	 */
>>>>s/the invidial size/VF BAR size
>>>>> 	align = pci_iov_resource_size(pdev, resno);
>>>>>-	if (pdn->vfs_expanded)
>>>>>-		return pdn->vfs_expanded * align;
>>>>>+	if (!pdn->vfs_expanded)
>>>>>+		return align;
>>>>>-	return align;
>>>>>+	return pdn->vfs_expanded * align;
>>>>There is no difference before/after the changes. why this change is needed?
>>>After change the logic is more clear.
>>>Alignment equals to the total size when IOV BAR is expanded or equals to the
>>>VF BAR size. We don't need to check whether IOV BAR is truncated.
>>I didn't get what you're talking about with "IOV BAR is truncated". I also
>>didn't get what has been really changed from last 3 lines changes.
>>	if (pdn->vfs_expanded)				if (!pdn->vfs_expanded)
>>		return pdn->vfs_expanded * align;		return align;
>>	return align;					return pdn->vfs_expanded * align;
>Truncated IOV BAR resource happens during sizing state, since IOV BAR is
>optional. While we still need to get the correct alignment during this

I don't see how your claim here is related. And, the IOV BAR can be
expanded as well depending on how much VFs the PF is going to support
virtually based on IOV BAR size.

>The code before and after change has the same meaning, while the later one is
>prepared for the single mode M64 BAR. You could look at the final version
>after single mode M64 is introduced.

I still don't see any strong reason to have this - nothing changed, but
it's not a big deal, I guess...

>>>>> }
>>>>> #endif /* CONFIG_PCI_IOV */
>>>Richard Yang
>>>Help you, Help me
>Richard Yang
>Help you, Help me

More information about the Linuxppc-dev mailing list