diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_cs.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/si.c | 15 |
2 files changed, 22 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c index c830863bc98a..a579ed379f20 100644 --- a/drivers/gpu/drm/radeon/radeon_cs.c +++ b/drivers/gpu/drm/radeon/radeon_cs.c | |||
| @@ -715,6 +715,7 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, | |||
| 715 | struct radeon_cs_chunk *ib_chunk = p->chunk_ib; | 715 | struct radeon_cs_chunk *ib_chunk = p->chunk_ib; |
| 716 | struct radeon_device *rdev = p->rdev; | 716 | struct radeon_device *rdev = p->rdev; |
| 717 | uint32_t header; | 717 | uint32_t header; |
| 718 | int ret = 0, i; | ||
| 718 | 719 | ||
| 719 | if (idx >= ib_chunk->length_dw) { | 720 | if (idx >= ib_chunk->length_dw) { |
| 720 | DRM_ERROR("Can not parse packet at %d after CS end %d !\n", | 721 | DRM_ERROR("Can not parse packet at %d after CS end %d !\n", |
| @@ -743,14 +744,25 @@ int radeon_cs_packet_parse(struct radeon_cs_parser *p, | |||
| 743 | break; | 744 | break; |
| 744 | default: | 745 | default: |
| 745 | DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx); | 746 | DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx); |
| 746 | return -EINVAL; | 747 | ret = -EINVAL; |
| 748 | goto dump_ib; | ||
| 747 | } | 749 | } |
| 748 | if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) { | 750 | if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) { |
| 749 | DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n", | 751 | DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n", |
| 750 | pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw); | 752 | pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw); |
| 751 | return -EINVAL; | 753 | ret = -EINVAL; |
| 754 | goto dump_ib; | ||
| 752 | } | 755 | } |
| 753 | return 0; | 756 | return 0; |
| 757 | |||
| 758 | dump_ib: | ||
| 759 | for (i = 0; i < ib_chunk->length_dw; i++) { | ||
| 760 | if (i == idx) | ||
| 761 | printk("\t0x%08x <---\n", radeon_get_ib_value(p, i)); | ||
| 762 | else | ||
| 763 | printk("\t0x%08x\n", radeon_get_ib_value(p, i)); | ||
| 764 | } | ||
| 765 | return ret; | ||
| 754 | } | 766 | } |
| 755 | 767 | ||
| 756 | /** | 768 | /** |
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 73107fe9e46f..ad26973733af 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
| @@ -4699,12 +4699,6 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib) | |||
| 4699 | switch (pkt.type) { | 4699 | switch (pkt.type) { |
| 4700 | case RADEON_PACKET_TYPE0: | 4700 | case RADEON_PACKET_TYPE0: |
| 4701 | dev_err(rdev->dev, "Packet0 not allowed!\n"); | 4701 | dev_err(rdev->dev, "Packet0 not allowed!\n"); |
| 4702 | for (i = 0; i < ib->length_dw; i++) { | ||
| 4703 | if (i == idx) | ||
| 4704 | printk("\t0x%08x <---\n", ib->ptr[i]); | ||
| 4705 | else | ||
| 4706 | printk("\t0x%08x\n", ib->ptr[i]); | ||
| 4707 | } | ||
| 4708 | ret = -EINVAL; | 4702 | ret = -EINVAL; |
| 4709 | break; | 4703 | break; |
| 4710 | case RADEON_PACKET_TYPE2: | 4704 | case RADEON_PACKET_TYPE2: |
| @@ -4736,8 +4730,15 @@ int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib) | |||
| 4736 | ret = -EINVAL; | 4730 | ret = -EINVAL; |
| 4737 | break; | 4731 | break; |
| 4738 | } | 4732 | } |
| 4739 | if (ret) | 4733 | if (ret) { |
| 4734 | for (i = 0; i < ib->length_dw; i++) { | ||
| 4735 | if (i == idx) | ||
| 4736 | printk("\t0x%08x <---\n", ib->ptr[i]); | ||
| 4737 | else | ||
| 4738 | printk("\t0x%08x\n", ib->ptr[i]); | ||
| 4739 | } | ||
| 4740 | break; | 4740 | break; |
| 4741 | } | ||
| 4741 | } while (idx < ib->length_dw); | 4742 | } while (idx < ib->length_dw); |
| 4742 | 4743 | ||
| 4743 | return ret; | 4744 | return ret; |
