Re: [PATCH v2 5/5] drm/selftests: Add command line parser selftests
Hi Maxime, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v5.1-rc4 next-20190411] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/drm-modes-Rewrite-the-command-line-parser/20190412-122837 config: x86_64-rhel (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/gpu/drm/selftests/test-drm_cmdline_parser.o: In function `test_drm_cmdline_init': >> test-drm_cmdline_parser.c:(.init.text+0x0): multiple definition of >> `init_module' drivers/gpu/drm/selftests/test-drm_modeset_common.o:test-drm_modeset_common.c:(.init.text+0x0): first defined here --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: application/gzip ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v2 5/5] drm/selftests: Add command line parser selftests
Hi Maxime, I love your patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on v5.1-rc4 next-20190411] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/drm-modes-Rewrite-the-command-line-parser/20190412-122837 reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' sparse warnings: (new ones prefixed by >>) >> drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:20:44: sparse: Using >> plain integer as NULL pointer >> drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:21:42: sparse: missing >> braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:45:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:46:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:70:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:71:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:95:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:96:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:120:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:121:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:146:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:147:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:172:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:173:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:199:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:200:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:226:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:227:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:253:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:254:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:280:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:281:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:292:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:293:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:319:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:320:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:346:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:347:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:374:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:375:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:401:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:402:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:426:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:427:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:451:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:452:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:463:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:464:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:475:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:476:42: sparse: missing braces around initializer drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:490:44: sparse: Using plain integer as NULL pointer drivers/gpu/drm/selftests/test-drm_cmdline
[PATCH v2 5/5] drm/selftests: Add command line parser selftests
The command line parser is pretty tough to get right and very error prone, so let's add a selftest to try to catch any regression. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/selftests/Makefile | 2 +- drivers/gpu/drm/selftests/drm_cmdline_selftests.h | 49 +- drivers/gpu/drm/selftests/test-drm_cmdline_parser.c | 843 +- 3 files changed, 893 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/selftests/drm_cmdline_selftests.h create mode 100644 drivers/gpu/drm/selftests/test-drm_cmdline_parser.c diff --git a/drivers/gpu/drm/selftests/Makefile b/drivers/gpu/drm/selftests/Makefile index 1bb73dc4c88c..971cfe17be68 100644 --- a/drivers/gpu/drm/selftests/Makefile +++ b/drivers/gpu/drm/selftests/Makefile @@ -1,5 +1,5 @@ test-drm_modeset-y := test-drm_modeset_common.o test-drm_plane_helper.o \ test-drm_format.o test-drm_framebuffer.o \ - test-drm_damage_helper.o + test-drm_damage_helper.o test-drm_cmdline_parser.o obj-$(CONFIG_DRM_DEBUG_SELFTEST) += test-drm_mm.o test-drm_modeset.o diff --git a/drivers/gpu/drm/selftests/drm_cmdline_selftests.h b/drivers/gpu/drm/selftests/drm_cmdline_selftests.h new file mode 100644 index ..86afe546fd0e --- /dev/null +++ b/drivers/gpu/drm/selftests/drm_cmdline_selftests.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* List each unit test as selftest(function) + * + * The name is used as both an enum and expanded as igt__name to create + * a module parameter. It must be unique and legal for a C identifier. + * + * Tests are executed in order by igt/drm_mm + */ + +#define cmdline_test(test) selftest(test, test) + +cmdline_test(drm_cmdline_test_res) +cmdline_test(drm_cmdline_test_res_vesa) +cmdline_test(drm_cmdline_test_res_vesa_rblank) +cmdline_test(drm_cmdline_test_res_rblank) +cmdline_test(drm_cmdline_test_res_bpp) +cmdline_test(drm_cmdline_test_res_refresh) +cmdline_test(drm_cmdline_test_res_bpp_refresh) +cmdline_test(drm_cmdline_test_res_bpp_refresh_interlaced) +cmdline_test(drm_cmdline_test_res_bpp_refresh_margins) +cmdline_test(drm_cmdline_test_res_bpp_refresh_force_off) +cmdline_test(drm_cmdline_test_res_bpp_refresh_force_on_off) +cmdline_test(drm_cmdline_test_res_bpp_refresh_force_on) +cmdline_test(drm_cmdline_test_res_bpp_refresh_force_on_analog) +cmdline_test(drm_cmdline_test_res_bpp_refresh_force_on_digital) +cmdline_test(drm_cmdline_test_res_bpp_refresh_interlaced_margins_force_on) +cmdline_test(drm_cmdline_test_res_margins_force_on) +cmdline_test(drm_cmdline_test_res_vesa_margins) +cmdline_test(drm_cmdline_test_res_invalid_mode) +cmdline_test(drm_cmdline_test_res_bpp_wrong_place_mode) +cmdline_test(drm_cmdline_test_name) +cmdline_test(drm_cmdline_test_name_bpp) +cmdline_test(drm_cmdline_test_name_refresh) +cmdline_test(drm_cmdline_test_name_bpp_refresh) +cmdline_test(drm_cmdline_test_name_refresh_wrong_mode) +cmdline_test(drm_cmdline_test_name_refresh_invalid_mode) +cmdline_test(drm_cmdline_test_name_option) +cmdline_test(drm_cmdline_test_name_bpp_option) +cmdline_test(drm_cmdline_test_rotate_0) +cmdline_test(drm_cmdline_test_rotate_90) +cmdline_test(drm_cmdline_test_rotate_180) +cmdline_test(drm_cmdline_test_rotate_270) +cmdline_test(drm_cmdline_test_rotate_invalid_val) +cmdline_test(drm_cmdline_test_rotate_truncated) +cmdline_test(drm_cmdline_test_hmirror) +cmdline_test(drm_cmdline_test_vmirror) +cmdline_test(drm_cmdline_test_overscan_options) +cmdline_test(drm_cmdline_test_multiple_options) +cmdline_test(drm_cmdline_test_invalid_option) diff --git a/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c b/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c new file mode 100644 index ..ae94b076acd4 --- /dev/null +++ b/drivers/gpu/drm/selftests/test-drm_cmdline_parser.c @@ -0,0 +1,843 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2019 Bootlin + */ + +#define pr_fmt(fmt) "drm_cmdline: " fmt + +#include +#include + +#include +#include + +#define TESTS "drm_cmdline_selftests.h" +#include "drm_selftest.h" +#include "test-drm_modeset_common.h" + +static int drm_cmdline_test_res(void *ignored) +{ + struct drm_connector connector = { 0 }; + struct drm_cmdline_mode mode = { 0 }; + + FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480", + &connector, + &mode)); + FAIL_ON(!mode.specified); + FAIL_ON(mode.xres != 720); + FAIL_ON(mode.yres != 480); + + FAIL_ON(mode.refresh_specified); + + FAIL_ON(mode.bpp_specified); + + FAIL_ON(mode.rb); + FAIL_ON(mode.cvt); + FAIL_ON(mode.interlace); + FAIL_ON(mode.margins); + FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED); + + return 0; +} + +static int drm_cmdline_test_res_vesa(void *ignored) +{ + struct drm_connector connector = { 0 }; + stru