mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Lohita Mudimela <lohita.mudimela@amd.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
	Alex Deucher <alexander.deucher@amd.com>,
	Martin Leung <martin.leung@amd.com>,
	James Lin <pinglei.lin@amd.com>
Subject: drivers/gpu/drm/amd/display/modules/power/power_abm.c:752:2-7: WARNING: NULL check before some freeing functions is not needed.
Date: Tue, 15 Sep 2026 10:47:50 +0200	[thread overview]
Message-ID: <202609151011.dVMrN0xv-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   587858367581b9c55c3690f4e63382ad622719d4
commit: 254a47ce0c8a52ff78a60f92a13b56db69f69096 drm/amd/display: Separate ABM functions into dedicated power_abm.c file
date:   4 months ago
config: x86_64-randconfig-103-20260911 (https://download.01.org/0day-ci/archive/20260915/202609151011.dVMrN0xv-lkp@intel.com/config)
compiler: gcc-13 (Debian 13.3.0-16) 13.3.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 254a47ce0c8a ("drm/amd/display: Separate ABM functions into dedicated power_abm.c file")
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609151011.dVMrN0xv-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/amd/display/modules/power/power_abm.c:752:2-7: WARNING: NULL check before some freeing functions is not needed.
--
>> drivers/gpu/drm/amd/display/modules/power/power_abm.c:738:29-30: WARNING opportunity for min()

vim +752 drivers/gpu/drm/amd/display/modules/power/power_abm.c

   605	
   606	/* hard coded to default backlight curve. */
   607	void initialize_backlight_caps(struct core_power *core_power, unsigned int inst)
   608	{
   609		unsigned int i;
   610		struct dm_acpi_atif_backlight_caps *ext_backlight_caps = NULL;
   611		bool custom_curve_present = false;
   612		unsigned int num_levels = 0;
   613		struct dc *dc = NULL;
   614		enum dm_acpi_display_type acpi_display_type =
   615			(inst == 0) ? AcpiDisplayType_LCD1 : AcpiDisplayType_LCD2;
   616	
   617		if (core_power == NULL)
   618			return;
   619		dc = core_power->dc;
   620	
   621		num_levels = core_power->bl_prop[inst].num_backlight_levels;
   622	
   623		/* Allocate memory for ATIF output
   624		 * (do not want to use 256 bytes on the stack)
   625		 */
   626		ext_backlight_caps = (struct dm_acpi_atif_backlight_caps *)
   627			(kzalloc(sizeof(struct dm_acpi_atif_backlight_caps),
   628					GFP_KERNEL));
   629	
   630		if (ext_backlight_caps == NULL)
   631			return;
   632	
   633		/* Retrieve ACPI extended brightness caps */
   634		if (dm_query_extended_brightness_caps
   635			(dc->ctx, acpi_display_type, ext_backlight_caps)) {
   636			custom_curve_present = validate_ext_backlight_caps(ext_backlight_caps);
   637		}
   638	
   639		if (core_power->bl_prop[inst].use_custom_backlight_caps &&
   640				fill_custom_backlight_caps(
   641						core_power->bl_prop[inst].custom_backlight_caps_config_no,
   642						ext_backlight_caps)) {
   643			custom_curve_present = validate_ext_backlight_caps(ext_backlight_caps);
   644		}
   645	
   646		if (custom_curve_present) {
   647			unsigned int index = 1;
   648			unsigned int num_of_data_points = ext_backlight_caps->num_data_points;
   649	
   650			core_power->bl_prop[inst].ac_backlight_percent =
   651				ext_backlight_caps->ac_level_percentage;
   652			core_power->bl_prop[inst].dc_backlight_percent =
   653				ext_backlight_caps->dc_level_percentage;
   654			core_power->bl_prop[inst].backlight_lut[0] =
   655				backlight_8_to_16(
   656					ext_backlight_caps->min_input_signal);
   657			core_power->bl_prop[inst].backlight_lut[num_levels - 1] =
   658				backlight_8_to_16(
   659					ext_backlight_caps->max_input_signal);
   660	
   661			/* Filling translation table from data points -
   662			 * between every two provided data points we
   663			 * lineary interpolate missing values
   664			 */
   665			for (i = 0; i < num_of_data_points; i++) {
   666				unsigned int luminance =
   667					ext_backlight_caps->data_points[i].luminance;
   668				unsigned int signal_level =
   669					backlight_8_to_16(
   670						ext_backlight_caps->data_points[i].signal_level);
   671	
   672				/* Since luminance is a percentage, scale it by num_levels*/
   673				luminance = (luminance * num_levels) / 101;
   674	
   675				/* Lineary interpolate missing values */
   676				if (index < luminance) {
   677					unsigned int base_value =
   678						core_power->bl_prop[inst].backlight_lut[index-1];
   679					unsigned int delta_signal =
   680						signal_level - base_value;
   681					unsigned int delta_luma =
   682						luminance - index + 1;
   683					unsigned int step  = delta_signal;
   684	
   685					for (; index < luminance; index++) {
   686						core_power->bl_prop[inst].backlight_lut[index] =
   687							base_value + (step / delta_luma);
   688						step += delta_signal;
   689					}
   690				}
   691	
   692				/* Now [index == luminance],
   693				 * so we can add data point to the translation table
   694				 */
   695				core_power->bl_prop[inst].backlight_lut[index++] = signal_level;
   696			}
   697	
   698			/* Complete the final segment of interpolation -
   699			 * between last datapoint and maximum value
   700			 */
   701			if (index < num_levels - 1) {
   702				unsigned int base_value =
   703					core_power->bl_prop[inst].backlight_lut[index-1];
   704				unsigned int delta_signal =
   705					core_power->bl_prop[inst].backlight_lut[num_levels - 1] -
   706									base_value;
   707				unsigned int delta_luma = num_levels - index;
   708				unsigned int step = delta_signal;
   709	
   710				for (; index < num_levels - 1; index++) {
   711					core_power->bl_prop[inst].backlight_lut[index] =
   712							base_value + (step / delta_luma);
   713					step += delta_signal;
   714				}
   715			}
   716		/* Build backlight translation table based on default curve */
   717		} else {
   718			/* Defines default backlight curve F(x) = A(x*x) + Bx + C.
   719			 *
   720			 * Backlight curve should always  satisfy:
   721			 * F(0) = min, F(100) = max,
   722			 * So polynom coefficients are:
   723			 * A is 0.0255 - B/100 - min/10000 - (255-max)/10000 =
   724			 * (max - min)/10000 - B/100
   725			 * B is adjustable factor to modify the curve.
   726			 * Bigger B results in less concave curve.
   727			 * B range is [0..(max-min)/100]
   728			 * C is backlight minimum
   729			 */
   730			unsigned int backlight_curve_coeff_a_factor =
   731					num_levels * num_levels;
   732			unsigned int backlight_curve_coeff_b = num_levels;
   733			unsigned int delta =
   734				core_power->bl_prop[inst].backlight_lut[num_levels - 1] -
   735					core_power->bl_prop[inst].backlight_lut[0];
   736			unsigned int coeffC = core_power->bl_prop[inst].backlight_lut[0];
   737			unsigned int coeffB =
 > 738					(backlight_curve_coeff_b < delta ?
   739						backlight_curve_coeff_b : delta);
   740			unsigned long long coeffA = delta - coeffB; /* coeffB is B*100 */
   741	
   742			for (i = 1; i < num_levels - 1; i++) {
   743				uint64_t lut_val = div_u64(coeffA * i * i, backlight_curve_coeff_a_factor) +
   744					div_u64((uint64_t)coeffB * i, backlight_curve_coeff_b) + coeffC;
   745	
   746				ASSERT(lut_val <= 0xFFFFFFFF);
   747				core_power->bl_prop[inst].backlight_lut[i] = (unsigned int)lut_val;
   748			}
   749		}
   750	
   751		if (ext_backlight_caps != NULL)
 > 752			kfree(ext_backlight_caps);
   753	
   754		/* Successfully initialized */
   755		core_power->bl_prop[inst].backlight_caps_valid = true;
   756	}
   757	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2026-09-15  8:48 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202609151011.dVMrN0xv-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=alexander.deucher@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lohita.mudimela@amd.com \
    --cc=martin.leung@amd.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=pinglei.lin@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®