0001
0002
0003
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 }