Re: [PATCH] drm/ttm: Use ttm_bo_default_io_mem_pfn if io_mem_pfn is NULL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 29.11.2017 um 16:44 schrieb Sean Paul:
On Wed, Nov 29, 2017 at 04:40:18PM +0100, Christian König wrote:
Am 29.11.2017 um 16:36 schrieb Sean Paul:
On Wed, Nov 29, 2017 at 04:24:21PM +0100, Christian König wrote:
Am 29.11.2017 um 16:20 schrieb Michal Srb:
The io_mem_pfn field was added in commit ea642c3216cb2a60d1c0e760ae47ee85c9c16447
and is called unconditionally. However, not all drivers were updated to set it.

Use the ttm_bo_default_io_mem_pfn function if a driver did not set its own.

Signed-off-by: Michal Srb <msrb@xxxxxxxx>
NAK, when we have drivers missing this we should set this in the driver and
not add the workaround here.
Why? What's the benefit in adding the same hook in 10 drivers (I was hoping
Michal would also remove the token .io_mem_pfn = ttm_bo_default_io_mem_pfn from
those as well)?
Not have this extra check in common TTM code? That is seriously bad coding
style.

[citation neeeded]

I'd argue it's bad form to require everyone add a copypasta hook to their driver
everytime an unrelated driver needs more control than the default gives :-)

Well that is another design problem of TTM that it works like a middle layer instead of a tool. But I'm seriously not going to fix this anytime soon.

I think your point would hold if we were talking about a couple of drivers, but
once you scale to 10+, it's no longer a trivial amount of code. If the null check
is too distracting, you could always pull it out into an inline.
Yeah, that is one possibility that would work for me as well.

TTM has patterns like the following:

First occasion:
if (a_is_available)
    do_a();
else
    do_b();

Same code a bit lower:
if (a_is_available)
    do_a()
/* Else is missing here */

I'm seriously favoring updating a dozen drivers just to avoid more of this.

If you want to fix that with adding wrapper functions to call the driver callback and give a consistent operation when the callback isn't available then I'm perfectly fine with that as well. Patches are always welcome.

Christian.


Sean


We have tons of fallbacks like this and I unfortunately even created new one
without realizing that this is a problem.

But this really clutters the TTM code and makes it harder to understand.

Christian.

Sean

Which driver is missing this? I thought I fixed all of them.

Regards,
Christian.

---
    drivers/gpu/drm/ttm/ttm_bo_vm.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index c8ebb757e36b..e25a99bc519d 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -234,7 +234,10 @@ static int ttm_bo_vm_fault(struct vm_fault *vmf)
    		if (bo->mem.bus.is_iomem) {
    			/* Iomem should not be marked encrypted */
    			cvma.vm_page_prot = pgprot_decrypted(cvma.vm_page_prot);
-			pfn = bdev->driver->io_mem_pfn(bo, page_offset);
+			if (bdev->driver->io_mem_pfn)
+				pfn = bdev->driver->io_mem_pfn(bo, page_offset);
+			else
+				pfn = ttm_bo_default_io_mem_pfn(bo, page_offset);
    		} else {
    			page = ttm->pages[page_offset];
    			if (unlikely(!page && i == 0)) {
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux