DF-5035 / fix.diff
--- a/sys/dev/drm/amd/display/dc/i2caux/dce110/i2caux_dce110.c 2026-09-26 06:51:12.857551787 +0000 +++ b/sys/dev/drm/amd/display/dc/i2caux/dce110/i2caux_dce110.c 2026-09-26 06:51:39.625202877 +0000 @@ -102,11 +102,14 @@ if (!engine) return NULL; + lockmgr(&i2caux_dce110->hw_buffer_lock, LK_EXCLUSIVE); if (!i2caux_dce110->i2c_hw_buffer_in_use && - engine->base.funcs->acquire(&engine->base, ddc)) { + engine->base.funcs->acquire(&engine->base, ddc)) { i2caux_dce110->i2c_hw_buffer_in_use = true; + lockmgr(&i2caux_dce110->hw_buffer_lock, LK_RELEASE); return engine; } + lockmgr(&i2caux_dce110->hw_buffer_lock, LK_RELEASE); return NULL; } @@ -118,8 +121,11 @@ struct i2caux_dce110 *i2caux_dce110 = FROM_I2C_AUX(i2caux); if (engine->funcs->get_engine_type(engine) == - I2CAUX_ENGINE_TYPE_I2C_DDC_HW) + I2CAUX_ENGINE_TYPE_I2C_DDC_HW) { + lockmgr(&i2caux_dce110->hw_buffer_lock, LK_EXCLUSIVE); i2caux_dce110->i2c_hw_buffer_in_use = false; + lockmgr(&i2caux_dce110->hw_buffer_lock, LK_RELEASE); + } dal_i2caux_release_engine(i2caux, engine); } |