Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Test cases for the drm_framebuffer functions
0004  */
0005 
0006 #include <linux/kernel.h>
0007 
0008 #include <drm/drm_device.h>
0009 #include <drm/drm_mode.h>
0010 #include <drm/drm_fourcc.h>
0011 #include <drm/drm_print.h>
0012 
0013 #include "../drm_crtc_internal.h"
0014 
0015 #include "test-drm_modeset_common.h"
0016 
0017 #define MIN_WIDTH 4
0018 #define MAX_WIDTH 4096
0019 #define MIN_HEIGHT 4
0020 #define MAX_HEIGHT 4096
0021 
0022 struct drm_framebuffer_test {
0023     int buffer_created;
0024     struct drm_mode_fb_cmd2 cmd;
0025     const char *name;
0026 };
0027 
0028 static struct drm_framebuffer_test createbuffer_tests[] = {
0029 { .buffer_created = 1, .name = "ABGR8888 normal sizes",
0030     .cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_ABGR8888,
0031          .handles = { 1, 0, 0 }, .pitches = { 4 * 600, 0, 0 },
0032     }
0033 },
0034 { .buffer_created = 1, .name = "ABGR8888 max sizes",
0035     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0036          .handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0037     }
0038 },
0039 { .buffer_created = 1, .name = "ABGR8888 pitch greater than min required",
0040     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0041          .handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH + 1, 0, 0 },
0042     }
0043 },
0044 { .buffer_created = 0, .name = "ABGR8888 pitch less than min required",
0045     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0046          .handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH - 1, 0, 0 },
0047     }
0048 },
0049 { .buffer_created = 0, .name = "ABGR8888 Invalid width",
0050     .cmd = { .width = MAX_WIDTH + 1, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0051          .handles = { 1, 0, 0 }, .pitches = { 4 * (MAX_WIDTH + 1), 0, 0 },
0052     }
0053 },
0054 { .buffer_created = 0, .name = "ABGR8888 Invalid buffer handle",
0055     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0056          .handles = { 0, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0057     }
0058 },
0059 { .buffer_created = 0, .name = "No pixel format",
0060     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = 0,
0061          .handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0062     }
0063 },
0064 { .buffer_created = 0, .name = "ABGR8888 Width 0",
0065     .cmd = { .width = 0, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0066          .handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0067     }
0068 },
0069 { .buffer_created = 0, .name = "ABGR8888 Height 0",
0070     .cmd = { .width = MAX_WIDTH, .height = 0, .pixel_format = DRM_FORMAT_ABGR8888,
0071          .handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0072     }
0073 },
0074 { .buffer_created = 0, .name = "ABGR8888 Out of bound height * pitch combination",
0075     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0076          .handles = { 1, 0, 0 }, .offsets = { UINT_MAX - 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0077     }
0078 },
0079 { .buffer_created = 1, .name = "ABGR8888 Large buffer offset",
0080     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0081          .handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0082     }
0083 },
0084 { .buffer_created = 1, .name = "ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers",
0085     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0086          .handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 },
0087          .pitches = { 4 * MAX_WIDTH, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0088     }
0089 },
0090 { .buffer_created = 1, .name = "ABGR8888 Valid buffer modifier",
0091     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0092          .handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 },
0093          .flags = DRM_MODE_FB_MODIFIERS, .modifier = { AFBC_FORMAT_MOD_YTR, 0, 0 },
0094     }
0095 },
0096 { .buffer_created = 0, .name = "ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)",
0097     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0098          .handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 },
0099          .pitches = { 4 * MAX_WIDTH, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0100          .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0, 0 },
0101     }
0102 },
0103 { .buffer_created = 1, .name = "ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS",
0104     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0105          .handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 },
0106          .pitches = { 4 * MAX_WIDTH, 4 * MAX_WIDTH, 0 },
0107     }
0108 },
0109 { .buffer_created = 0, .name = "ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS",
0110     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888,
0111          .handles = { 1, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0112          .pitches = { 4 * MAX_WIDTH, 4 * MAX_WIDTH, 0 },
0113     }
0114 },
0115 { .buffer_created = 1, .name = "NV12 Normal sizes",
0116     .cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_NV12,
0117          .handles = { 1, 1, 0 }, .pitches = { 600, 600, 0 },
0118     }
0119 },
0120 { .buffer_created = 1, .name = "NV12 Max sizes",
0121     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0122          .handles = { 1, 1, 0 }, .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0123     }
0124 },
0125 { .buffer_created = 0, .name = "NV12 Invalid pitch",
0126     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0127          .handles = { 1, 1, 0 }, .pitches = { MAX_WIDTH, MAX_WIDTH - 1, 0 },
0128     }
0129 },
0130 { .buffer_created = 0, .name = "NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag",
0131     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0132          .handles = { 1, 1, 0 }, .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0, 0 },
0133          .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0134     }
0135 },
0136 { .buffer_created = 0, .name = "NV12 different  modifier per-plane",
0137     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0138          .handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0139          .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0, 0 },
0140          .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0141     }
0142 },
0143 { .buffer_created = 1, .name = "NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE",
0144     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0145          .handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0146          .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0 },
0147          .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0148     }
0149 },
0150 { .buffer_created = 0, .name = "NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS",
0151     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0152          .handles = { 1, 1, 0 }, .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE,
0153                                DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0 },
0154          .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0155     }
0156 },
0157 { .buffer_created = 0, .name = "NV12 Modifier for inexistent plane",
0158     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0159          .handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0160          .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, DRM_FORMAT_MOD_SAMSUNG_64_32_TILE,
0161                    DRM_FORMAT_MOD_SAMSUNG_64_32_TILE },
0162          .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0163     }
0164 },
0165 { .buffer_created = 0, .name = "NV12 Handle for inexistent plane",
0166     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12,
0167          .handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, .pitches = { MAX_WIDTH, MAX_WIDTH, 0 },
0168     }
0169 },
0170 { .buffer_created = 1, .name = "NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS",
0171     .cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_NV12,
0172          .handles = { 1, 1, 1 }, .pitches = { 600, 600, 600 },
0173     }
0174 },
0175 { .buffer_created = 1, .name = "YVU420 Normal sizes",
0176     .cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_YVU420,
0177          .handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS,
0178          .pitches = { 600, 300, 300 },
0179     }
0180 },
0181 { .buffer_created = 1, .name = "YVU420 DRM_MODE_FB_MODIFIERS set without modifier",
0182     .cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_YVU420,
0183          .handles = { 1, 1, 1 }, .pitches = { 600, 300, 300 },
0184     }
0185 },
0186 { .buffer_created = 1, .name = "YVU420 Max sizes",
0187     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0188          .handles = { 1, 1, 1 }, .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2),
0189                               DIV_ROUND_UP(MAX_WIDTH, 2) },
0190     }
0191 },
0192 { .buffer_created = 0, .name = "YVU420 Invalid pitch",
0193     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0194          .handles = { 1, 1, 1 }, .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2) - 1,
0195                               DIV_ROUND_UP(MAX_WIDTH, 2) },
0196     }
0197 },
0198 { .buffer_created = 1, .name = "YVU420 Different pitches",
0199     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0200          .handles = { 1, 1, 1 }, .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2) + 1,
0201                               DIV_ROUND_UP(MAX_WIDTH, 2) + 7 },
0202     }
0203 },
0204 { .buffer_created = 1, .name = "YVU420 Different buffer offsets/pitches",
0205     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0206          .handles = { 1, 1, 1 }, .offsets = { MAX_WIDTH, MAX_WIDTH  + MAX_WIDTH * MAX_HEIGHT,
0207                               MAX_WIDTH  + 2 * MAX_WIDTH * MAX_HEIGHT },
0208          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2) + 1, DIV_ROUND_UP(MAX_WIDTH, 2) + 7 },
0209     }
0210 },
0211 { .buffer_created = 0, .name = "YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS",
0212     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0213          .handles = { 1, 1, 1 }, .modifier = { AFBC_FORMAT_MOD_SPARSE, 0, 0 },
0214          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) },
0215     }
0216 },
0217 { .buffer_created = 0, .name = "YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS",
0218     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0219          .handles = { 1, 1, 1 }, .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, 0 },
0220          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) },
0221     }
0222 },
0223 { .buffer_created = 0, .name = "YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS",
0224     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0225          .handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS,
0226          .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, 0 },
0227          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) },
0228     }
0229 },
0230 { .buffer_created = 1, .name = "YVU420 Valid modifier",
0231     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0232          .handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS,
0233          .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE },
0234          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) },
0235     }
0236 },
0237 { .buffer_created = 0, .name = "YVU420 Different modifiers per plane",
0238     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0239          .handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS,
0240          .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE | AFBC_FORMAT_MOD_YTR,
0241                    AFBC_FORMAT_MOD_SPARSE },
0242          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) },
0243     }
0244 },
0245 { .buffer_created = 0, .name = "YVU420 Modifier for inexistent plane",
0246     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420,
0247          .handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS,
0248          .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE,
0249                    AFBC_FORMAT_MOD_SPARSE },
0250          .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) },
0251     }
0252 },
0253 { .buffer_created = 1, .name = "X0L2 Normal sizes",
0254     .cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_X0L2,
0255          .handles = { 1, 0, 0 }, .pitches = { 1200, 0, 0 }
0256     }
0257 },
0258 { .buffer_created = 1, .name = "X0L2 Max sizes",
0259     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0260          .handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH, 0, 0 }
0261     }
0262 },
0263 { .buffer_created = 0, .name = "X0L2 Invalid pitch",
0264     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0265          .handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH - 1, 0, 0 }
0266     }
0267 },
0268 { .buffer_created = 1, .name = "X0L2 Pitch greater than minimum required",
0269     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0270          .handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH + 1, 0, 0 }
0271     }
0272 },
0273 { .buffer_created = 0, .name = "X0L2 Handle for inexistent plane",
0274     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0275          .handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0276          .pitches = { 2 * MAX_WIDTH + 1, 0, 0 }
0277     }
0278 },
0279 { .buffer_created = 1, .name = "X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set",
0280     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0281          .handles = { 1, 0, 0 }, .offsets = { 0, 0, 3 },
0282          .pitches = { 2 * MAX_WIDTH + 1, 0, 0 }
0283     }
0284 },
0285 { .buffer_created = 0, .name = "X0L2 Modifier without DRM_MODE_FB_MODIFIERS set",
0286     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0287          .handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH + 1, 0, 0 },
0288          .modifier = { AFBC_FORMAT_MOD_SPARSE, 0, 0 },
0289     }
0290 },
0291 { .buffer_created = 1, .name = "X0L2 Valid modifier",
0292     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2,
0293          .handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH + 1, 0, 0 },
0294          .modifier = { AFBC_FORMAT_MOD_SPARSE, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS,
0295     }
0296 },
0297 { .buffer_created = 0, .name = "X0L2 Modifier for inexistent plane",
0298     .cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT,
0299          .pixel_format = DRM_FORMAT_X0L2, .handles = { 1, 0, 0 },
0300          .pitches = { 2 * MAX_WIDTH + 1, 0, 0 },
0301          .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, 0 },
0302          .flags = DRM_MODE_FB_MODIFIERS,
0303     }
0304 },
0305 };
0306 
0307 static struct drm_framebuffer *fb_create_mock(struct drm_device *dev,
0308                           struct drm_file *file_priv,
0309                           const struct drm_mode_fb_cmd2 *mode_cmd)
0310 {
0311     int *buffer_created = dev->dev_private;
0312     *buffer_created = 1;
0313     return ERR_PTR(-EINVAL);
0314 }
0315 
0316 static struct drm_mode_config_funcs mock_config_funcs = {
0317     .fb_create = fb_create_mock,
0318 };
0319 
0320 static struct drm_device mock_drm_device = {
0321     .mode_config = {
0322         .min_width = MIN_WIDTH,
0323         .max_width = MAX_WIDTH,
0324         .min_height = MIN_HEIGHT,
0325         .max_height = MAX_HEIGHT,
0326         .funcs = &mock_config_funcs,
0327     },
0328 };
0329 
0330 static int execute_drm_mode_fb_cmd2(struct drm_mode_fb_cmd2 *r)
0331 {
0332     int buffer_created = 0;
0333 
0334     mock_drm_device.dev_private = &buffer_created;
0335     drm_internal_framebuffer_create(&mock_drm_device, r, NULL);
0336     return buffer_created;
0337 }
0338 
0339 int igt_check_drm_framebuffer_create(void *ignored)
0340 {
0341     int i = 0;
0342 
0343     for (i = 0; i < ARRAY_SIZE(createbuffer_tests); i++) {
0344         FAIL(createbuffer_tests[i].buffer_created !=
0345                 execute_drm_mode_fb_cmd2(&createbuffer_tests[i].cmd),
0346              "Test %d: \"%s\" failed\n", i, createbuffer_tests[i].name);
0347     }
0348 
0349     return 0;
0350 }