The virtgpu driver prints the last_seq variable using the %ld or %lu format string, which does not work correctly on all architectures and causes this compiler warning on ARM: drivers/gpu/drm/virtio/virtgpu_fence.c: In function 'virtio_timeline_value_str': drivers/gpu/drm/virtio/virtgpu_fence.c:64:22: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'long long int' [-Wformat=] snprintf(str, size, "%lu", atomic64_read(&fence->drv->last_seq)); ^ drivers/gpu/drm/virtio/virtgpu_debugfs.c: In function 'virtio_gpu_debugfs_irq_info': drivers/gpu/drm/virtio/virtgpu_debugfs.c:37:16: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'long long int' [-Wformat=] seq_printf(m, "fence %ld %lld\n", ^ In order to avoid the warnings, this changes the format strings to %llu and adds a cast to u64, which makes it work the same way everywhere.
Unified · Split
| @@ -34,8 +34,8 @@ virtio_gpu_debugfs_irq_info(struct seq_file *m, void *data) · 33 unmodified lines | ||
| 34 | 34 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
| 35 | 35 | struct virtio_gpu_device *vgdev = node->minor->dev->dev_private; |
| 36 | 36 | |
| 37 | − seq_printf(m, "fence %ld %lld\n", | |
| 38 | − atomic64_read(&vgdev->fence_drv.last_seq), | |
| 37 | + seq_printf(m, "fence %llu %lld\n", | |
| 38 | + (u64)atomic64_read(&vgdev->fence_drv.last_seq), | |
| 39 | 39 | vgdev->fence_drv.sync_seq); |
| 40 | 40 | return 0; |
| 41 | 41 | } |
| @@ -61,7 +61,7 @@ static void virtio_timeline_value_str(struct fence *f, char *str, int size) · 60 unmodified lines | ||
| 61 | 61 | { |
| 62 | 62 | struct virtio_gpu_fence *fence = to_virtio_fence(f); |
| 63 | 63 | |
| 64 | − snprintf(str, size, "%lu", atomic64_read(&fence->drv->last_seq)); | |
| 64 | + snprintf(str, size, "%llu", (u64)atomic64_read(&fence->drv->last_seq)); | |
| 65 | 65 | } |
| 66 | 66 | |
| 67 | 67 | static const struct fence_ops virtio_fence_ops = { |