mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	drm/tests: Stop using deprecated dev_private member on drm_framebuffer tests
The dev_private member of drm_device is deprecated and its use should be avoided. Stop using it by embedding the drm_device onto a mock struct. The new mock struct allows to share variables and even further mocks over the tests in a cleaner way than using dev_private void pointer. Also start using drm_kunit_helper_alloc_drm_device() for allocating the drm_device mock. Signed-off-by: Carlos Eduardo Gallo Filho <gcarlos@disroot.org> Acked-by: Maxime Ripard <mripard@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20240911001559.28284-2-gcarlos@disroot.org Signed-off-by: Maxime Ripard <mripard@kernel.org>
This commit is contained in:
		
							parent
							
								
									970b867d5b
								
							
						
					
					
						commit
						96d068ea0d
					
				
					 1 changed files with 38 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -8,8 +8,10 @@
 | 
			
		|||
#include <kunit/test.h>
 | 
			
		||||
 | 
			
		||||
#include <drm/drm_device.h>
 | 
			
		||||
#include <drm/drm_drv.h>
 | 
			
		||||
#include <drm/drm_mode.h>
 | 
			
		||||
#include <drm/drm_fourcc.h>
 | 
			
		||||
#include <drm/drm_kunit_helpers.h>
 | 
			
		||||
#include <drm/drm_print.h>
 | 
			
		||||
 | 
			
		||||
#include "../drm_crtc_internal.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -317,12 +319,25 @@ static const struct drm_framebuffer_test drm_framebuffer_create_cases[] = {
 | 
			
		|||
},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This struct is intended to provide a way to mocked functions communicate
 | 
			
		||||
 * with the outer test when it can't be achieved by using its return value. In
 | 
			
		||||
 * this way, the functions that receive the mocked drm_device, for example, can
 | 
			
		||||
 * grab a reference to this and actually return something to be used on some
 | 
			
		||||
 * expectation.
 | 
			
		||||
 */
 | 
			
		||||
struct drm_framebuffer_test_priv {
 | 
			
		||||
	struct drm_device dev;
 | 
			
		||||
	bool buffer_created;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct drm_framebuffer *fb_create_mock(struct drm_device *dev,
 | 
			
		||||
					      struct drm_file *file_priv,
 | 
			
		||||
					      const struct drm_mode_fb_cmd2 *mode_cmd)
 | 
			
		||||
{
 | 
			
		||||
	int *buffer_created = dev->dev_private;
 | 
			
		||||
	*buffer_created = 1;
 | 
			
		||||
	struct drm_framebuffer_test_priv *priv = container_of(dev, typeof(*priv), dev);
 | 
			
		||||
 | 
			
		||||
	priv->buffer_created = true;
 | 
			
		||||
	return ERR_PTR(-EINVAL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -332,30 +347,37 @@ static struct drm_mode_config_funcs mock_config_funcs = {
 | 
			
		|||
 | 
			
		||||
static int drm_framebuffer_test_init(struct kunit *test)
 | 
			
		||||
{
 | 
			
		||||
	struct drm_device *mock;
 | 
			
		||||
	struct device *parent;
 | 
			
		||||
	struct drm_framebuffer_test_priv *priv;
 | 
			
		||||
	struct drm_device *dev;
 | 
			
		||||
 | 
			
		||||
	mock = kunit_kzalloc(test, sizeof(*mock), GFP_KERNEL);
 | 
			
		||||
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, mock);
 | 
			
		||||
	parent = drm_kunit_helper_alloc_device(test);
 | 
			
		||||
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
 | 
			
		||||
 | 
			
		||||
	mock->mode_config.min_width = MIN_WIDTH;
 | 
			
		||||
	mock->mode_config.max_width = MAX_WIDTH;
 | 
			
		||||
	mock->mode_config.min_height = MIN_HEIGHT;
 | 
			
		||||
	mock->mode_config.max_height = MAX_HEIGHT;
 | 
			
		||||
	mock->mode_config.funcs = &mock_config_funcs;
 | 
			
		||||
	priv = drm_kunit_helper_alloc_drm_device(test, parent, typeof(*priv),
 | 
			
		||||
						 dev, 0);
 | 
			
		||||
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv);
 | 
			
		||||
	dev = &priv->dev;
 | 
			
		||||
 | 
			
		||||
	test->priv = mock;
 | 
			
		||||
	dev->mode_config.min_width = MIN_WIDTH;
 | 
			
		||||
	dev->mode_config.max_width = MAX_WIDTH;
 | 
			
		||||
	dev->mode_config.min_height = MIN_HEIGHT;
 | 
			
		||||
	dev->mode_config.max_height = MAX_HEIGHT;
 | 
			
		||||
	dev->mode_config.funcs = &mock_config_funcs;
 | 
			
		||||
 | 
			
		||||
	test->priv = priv;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void drm_test_framebuffer_create(struct kunit *test)
 | 
			
		||||
{
 | 
			
		||||
	const struct drm_framebuffer_test *params = test->param_value;
 | 
			
		||||
	struct drm_device *mock = test->priv;
 | 
			
		||||
	int buffer_created = 0;
 | 
			
		||||
	struct drm_framebuffer_test_priv *priv = test->priv;
 | 
			
		||||
	struct drm_device *dev = &priv->dev;
 | 
			
		||||
 | 
			
		||||
	mock->dev_private = &buffer_created;
 | 
			
		||||
	drm_internal_framebuffer_create(mock, ¶ms->cmd, NULL);
 | 
			
		||||
	KUNIT_EXPECT_EQ(test, params->buffer_created, buffer_created);
 | 
			
		||||
	priv->buffer_created = false;
 | 
			
		||||
	drm_internal_framebuffer_create(dev, ¶ms->cmd, NULL);
 | 
			
		||||
	KUNIT_EXPECT_EQ(test, params->buffer_created, priv->buffer_created);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void drm_framebuffer_test_to_desc(const struct drm_framebuffer_test *t, char *desc)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue