Re: Generic IOMMU pooled allocator
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2015-03-24 00:49:13
Also in:
sparclinux
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2015-03-24 00:49:13
Also in:
sparclinux
On Mon, 2015-03-23 at 19:19 -0400, Sowmini Varadhan wrote:
What I've tried to do is to have a bool large_pool arg passed to iommu_tbl_pool_init. In my observation (instrumented for scsi, ixgbe), we never allocate more than 4 pages at a time, so I pass in large_pool == false for all the sparc platforms.
But that might not be necessary. If indeed we very rarely use the large pool, then just make it flush always. My feeling is that it will only ever be used at driver init/remove time when allocating things like descriptor rings, where the flush overhead dont' matter.
quoted
Or we can decide that large allocs are rare (typically pci_alloc_consistent, ie, driver init time), and thus always flush on them (or rather on free of a large chunk). David, what's your take there ? I have a feeling that should work fine without a noticeable performance issue... I would also keep a "dirty" flag set on any free and cleared on any flush to avoid more spurrious flushes, but here too the benefit might be in the noise.
Ben.