drm/radeon: fix AGP userptr handling
Dan Carpenter
dan.carpenter at oracle.com
Wed Sep 24 08:27:04 PDT 2014
Hello Christian König,
This is a semi-automatic email about new static checker warnings.
The patch 3840a656f61f: "drm/radeon: fix AGP userptr handling" from
Sep 17, 2014, leads to the following Smatch complaint:
drivers/gpu/drm/radeon/radeon_ttm.c:708 radeon_ttm_tt_populate()
error: we previously assumed 'gtt' could be null (see line 696)
drivers/gpu/drm/radeon/radeon_ttm.c
695
696 if (gtt && gtt->userptr) {
^^^
New check.
697 ttm->sg = kcalloc(1, sizeof(struct sg_table), GFP_KERNEL);
698 if (!ttm->sg)
699 return -ENOMEM;
700
701 ttm->page_flags |= TTM_PAGE_FLAG_SG;
702 ttm->state = tt_unbound;
703 return 0;
704 }
705
706 if (slave && ttm->sg) {
707 drm_prime_sg_to_page_addr_arrays(ttm->sg, ttm->pages,
708 gtt->ttm.dma_address, ttm->num_pages);
^^^^^^^^
Old unchecked dereference.
709 ttm->state = tt_unbound;
710 return 0;
drivers/gpu/drm/radeon/radeon_ttm.c
754
755 if (gtt && gtt->userptr) {
^^^
756 kfree(ttm->sg);
757 ttm->page_flags &= ~TTM_PAGE_FLAG_SG;
758 return;
759 }
760
761 if (slave)
762 return;
763
764 rdev = radeon_get_rdev(ttm->bdev);
765 #if __OS_HAS_AGP
766 if (rdev->flags & RADEON_IS_AGP) {
767 ttm_agp_tt_unpopulate(ttm);
768 return;
769 }
770 #endif
771
772 #ifdef CONFIG_SWIOTLB
773 if (swiotlb_nr_tbl()) {
774 ttm_dma_unpopulate(>t->ttm, rdev->dev);
775 return;
776 }
777 #endif
778
779 for (i = 0; i < ttm->num_pages; i++) {
780 if (gtt->ttm.dma_address[i]) {
^^^^^^^^
781 pci_unmap_page(rdev->pdev, gtt->ttm.dma_address[i],
782 PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
regards,
dan carpenter
More information about the dri-devel
mailing list