Hi,
On 2023/4/4 22:10, Emil Velikov wrote:
+static enum drm_mode_status +lsdc_mode_config_mode_valid(struct drm_device *ddev,
const struct drm_display_mode *mode)
+{
struct lsdc_device *ldev = to_lsdc(ddev);
const struct drm_format_info *info = drm_format_info(DRM_FORMAT_XRGB8888);
Short-term hard coding a format is fine, but there should be a comment describing why.
Because our driver only support DRM_FORMAT_XRGB8888 frame buffer currently.
After carry out the IGT test, I found this function may not sufficient anymore.
u64 min_pitch = drm_format_info_min_pitch(info, 0, mode->hdisplay);
u64 fb_size = min_pitch * mode->vdisplay;
if (fb_size * 3 > ldev->vram_size) {
Why are we using 3 here? Please add an inline comment.
Originally lsdc_mode_config_mode_valid() is copy from drm_gem_vram_helper.c
with the observation that there no need for the compute of the number of pages in
the terms of PAGE_SIZE.
The '3' here is a experience number, it intend to restrict single allocation overlarge.
In my opinion, it stand for one frame buffer plus another two dumb buffer allocation
when running the running pageflip test(from the libdrm modetest).
Therefore, the kernel space drm driver should guarantee at least 3 times frame buffer
allocation to the user-space. Otherwise, the pageflip test can not even being able to run.
While when testing this driver with IGT, I found the dumb_buffer test of IGT will try to
create a very large dumb buffer, as large as 256MB in my case.
Currently our driver could not satisfy such a large allocation,
I test it with drm/radeon driver on LoongArch and X86-64, redeon can not even passing it.
The restriction put in here is not effective anymore, because it is too late.
I'm think we should put the restriction in the lsdc_dumb_create() function.
We will revise our driver at next version.
Great thanks for your valuable reviews.