drv: add drv_preload
It can be used to preload a backend, currently only used to preload amdgpu. BUG=b:269664560 TEST="grep radeonsi /proc/$(pidof zygote)/maps" on grunt Change-Id: I30d9f701f1da3bc243a9c81326a1ba0c5e0562de Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/4262034 Commit-Queue: Chia-I Wu <olv@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Tested-by: Chia-I Wu <olv@google.com>
This commit is contained in:
parent
b9d5d6c10a
commit
bf1f37f516
4 changed files with 47 additions and 21 deletions
13
amdgpu.c
13
amdgpu.c
|
|
@ -345,6 +345,18 @@ static bool is_modifier_scanout_capable(struct amdgpu_priv *priv, uint32_t forma
|
|||
return true;
|
||||
}
|
||||
|
||||
static void amdgpu_preload(bool load)
|
||||
{
|
||||
static void *handle;
|
||||
|
||||
if (load && !handle)
|
||||
handle = dri_dlopen(DRI_PATH);
|
||||
else if (!load && handle) {
|
||||
dri_dlclose(handle);
|
||||
handle = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int amdgpu_init(struct driver *drv)
|
||||
{
|
||||
struct amdgpu_priv *priv;
|
||||
|
|
@ -788,6 +800,7 @@ static int amdgpu_bo_invalidate(struct bo *bo, struct mapping *mapping)
|
|||
|
||||
const struct backend backend_amdgpu = {
|
||||
.name = "amdgpu",
|
||||
.preload = amdgpu_preload,
|
||||
.init = amdgpu_init,
|
||||
.close = amdgpu_close,
|
||||
.bo_create = amdgpu_create_bo,
|
||||
|
|
|
|||
52
drv.c
52
drv.c
|
|
@ -52,6 +52,35 @@ extern const struct backend backend_virtgpu;
|
|||
extern const struct backend backend_udl;
|
||||
extern const struct backend backend_vkms;
|
||||
|
||||
static const struct backend *drv_backend_list[] = {
|
||||
#ifdef DRV_AMDGPU
|
||||
&backend_amdgpu,
|
||||
#endif
|
||||
#ifdef DRV_I915
|
||||
&backend_i915,
|
||||
#endif
|
||||
#ifdef DRV_MSM
|
||||
&backend_msm,
|
||||
#endif
|
||||
#ifdef DRV_VC4
|
||||
&backend_vc4,
|
||||
#endif
|
||||
&backend_evdi, &backend_komeda, &backend_marvell, &backend_mediatek,
|
||||
&backend_meson, &backend_nouveau, &backend_radeon, &backend_rockchip,
|
||||
&backend_sun4i_drm, &backend_synaptics, &backend_udl, &backend_virtgpu,
|
||||
&backend_vkms
|
||||
};
|
||||
|
||||
void drv_preload(bool load)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < ARRAY_SIZE(drv_backend_list); i++) {
|
||||
const struct backend *b = drv_backend_list[i];
|
||||
if (b->preload)
|
||||
b->preload(load);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct backend *drv_get_backend(int fd)
|
||||
{
|
||||
drmVersionPtr drm_version;
|
||||
|
|
@ -62,27 +91,8 @@ static const struct backend *drv_get_backend(int fd)
|
|||
if (!drm_version)
|
||||
return NULL;
|
||||
|
||||
const struct backend *backend_list[] = {
|
||||
#ifdef DRV_AMDGPU
|
||||
&backend_amdgpu,
|
||||
#endif
|
||||
#ifdef DRV_I915
|
||||
&backend_i915,
|
||||
#endif
|
||||
#ifdef DRV_MSM
|
||||
&backend_msm,
|
||||
#endif
|
||||
#ifdef DRV_VC4
|
||||
&backend_vc4,
|
||||
#endif
|
||||
&backend_evdi, &backend_komeda, &backend_marvell, &backend_mediatek,
|
||||
&backend_meson, &backend_nouveau, &backend_radeon, &backend_rockchip,
|
||||
&backend_sun4i_drm, &backend_synaptics, &backend_udl, &backend_virtgpu,
|
||||
&backend_vkms
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(backend_list); i++) {
|
||||
const struct backend *b = backend_list[i];
|
||||
for (i = 0; i < ARRAY_SIZE(drv_backend_list); i++) {
|
||||
const struct backend *b = drv_backend_list[i];
|
||||
if (!strcmp(drm_version->name, b->name)) {
|
||||
drmFreeVersion(drm_version);
|
||||
return b;
|
||||
|
|
|
|||
2
drv.h
2
drv.h
|
|
@ -131,6 +131,8 @@ struct mapping {
|
|||
uint32_t refcount;
|
||||
};
|
||||
|
||||
void drv_preload(bool load);
|
||||
|
||||
struct driver *drv_create(int fd);
|
||||
|
||||
void drv_destroy(struct driver *drv);
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ struct driver {
|
|||
|
||||
struct backend {
|
||||
char *name;
|
||||
void (*preload)(bool load);
|
||||
int (*init)(struct driver *drv);
|
||||
void (*close)(struct driver *drv);
|
||||
int (*bo_create)(struct bo *bo, uint32_t width, uint32_t height, uint32_t format,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue