From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 419A547CA80 for ; Wed, 29 Jul 2026 12:01:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.13 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785326503; cv=none; b=LNQ4u+KAda7UsRDn6AXAXOzF0xY+wN922XucKrc/Ggb0VyK2WLmLU9/RVsPUadWo6NqW1DCJQqGKbZlPLTm1XY6aueNFipSDeojIHzDT1ErYWt8F68XHgZ0tu285itkSKfKgfU7S8Xf6cbhK32VIbYVLR0+qMMe8hlQOZ5j3AhQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785326503; c=relaxed/simple; bh=ceOXpoIpiwJFwP/F5894rbmyD4kwfBu7kgsQ3cIcRNg=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=F3NAes2VCP8mclL6WxAOu6W9iX/tXQscp5tHU5FZ6qUjUlIOdPeyE0GkJRnTy1l+ZAampcvDxrj2/weOznbSejPw1StmC3IXqWwHayDSNX+71jgWrpW2YtgQwvZp4gHVlVRSYmuRIdvn9OD5UeApZDWfFI3J8kkhb8U9HAEAkno= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=ObQoS+MZ; arc=none smtp.client-ip=192.198.163.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="ObQoS+MZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1785326500; x=1816862500; h=from:to:cc:subject:in-reply-to:references:date: message-id:mime-version; bh=ceOXpoIpiwJFwP/F5894rbmyD4kwfBu7kgsQ3cIcRNg=; b=ObQoS+MZge4Tay/HNzmGQVY7KxXBJ3s5pRMjYqgVjVYVnCSIIDycAK73 GQFiMGIOQ8bIMlvHC5kOhUN5ghWe+MzzuQPSbawDRihaxkpzlYt3rOse3 C5P2E87hhsOYhSSnEmtG4oXusKQhBjYmBOwD/WItjCu5r/jL+T6R6gthv 8S/EJyLvPyJDkcffVWjuwx49ox8cdL3UU/pHZlcmhtwmzQtxK9NGoMTz7 wVESus5VJLTY771TiLYxBlvQAmdJ2MfxU8XPkz2mvZccp6njCneTVSlqr Q0wk/ZFbwO1lniWB+8XzuLVwJIcVrdkSAuaO5wUaYnsy9PVvJau86Ia7u A==; X-CSE-ConnectionGUID: nxqGM5BFQaymgA3288Wazw== X-CSE-MsgGUID: WmHWl03YQ/mtal8BW2dXKw== X-IronPort-AV: E=McAfee;i="6800,10657,11859"; a="88468547" X-IronPort-AV: E=Sophos;i="6.25,192,1779174000"; d="scan'208";a="88468547" Received: from fmviesa008.fm.intel.com ([10.60.135.148]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2026 05:01:39 -0700 X-CSE-ConnectionGUID: prVlmAEuRyG0jnZKUCNGvQ== X-CSE-MsgGUID: nGhksWSzSjWhliuLYI7pRw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,192,1779174000"; d="scan'208";a="257321916" Received: from slindbla-desk.ger.corp.intel.com (HELO localhost) ([10.245.244.212]) by fmviesa008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2026 05:01:36 -0700 From: Jani Nikula To: oushixiong1025@163.com, Jocelyn Falempe Cc: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Shixiong Ou Subject: Re: [PATCH v2] drm/log: Fix division by zero when scale module parameter is 0 In-Reply-To: <20260729105840.865696-1-oushixiong1025@163.com> Organization: Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs Bertel Jungin Aukio 5, 02600 Espoo, Finland References: <20260729105840.865696-1-oushixiong1025@163.com> Date: Wed, 29 Jul 2026 15:01:34 +0300 Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain On Wed, 29 Jul 2026, oushixiong1025@163.com wrote: > From: Shixiong Ou > > The scale module parameter can be set to 0 via kernel command line or > sysfs. When scale is 0, scaled_font_h and scaled_font_w become 0, > causing a division by zero in the rows/columns calculation. > > Introduce a drm_log_scale() helper that returns scale ?: 1, and use it > at all read sites. This avoids a race that a setter-based clamp would > have between param_set_uint() and the subsequent check, where another > CPU could observe scale == 0. > > Signed-off-by: Shixiong Ou > --- > v1->v2: > Introduce a drm_log_scale() helper. > > drivers/gpu/drm/clients/drm_log.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/clients/drm_log.c b/drivers/gpu/drm/clients/drm_log.c > index 294b3be1a6b3..9522c1344123 100644 > --- a/drivers/gpu/drm/clients/drm_log.c > +++ b/drivers/gpu/drm/clients/drm_log.c > @@ -29,6 +29,11 @@ static unsigned int scale = 1; > module_param(scale, uint, 0444); > MODULE_PARM_DESC(scale, "Integer scaling factor for drm_log, default is 1"); > > +static inline unsigned int drm_log_scale(void) Please don't use "inline" in .c files. The compiler will know better what to do. BR, Jani. > +{ > + return scale ?: 1; > +} > + > /** > * DOC: overview > * > @@ -76,13 +81,13 @@ static void drm_log_blit(struct iosys_map *dst, unsigned int dst_pitch, > { > switch (px_width) { > case 2: > - drm_draw_blit16(dst, dst_pitch, src, src_pitch, height, width, scale, color); > + drm_draw_blit16(dst, dst_pitch, src, src_pitch, height, width, drm_log_scale(), color); > break; > case 3: > - drm_draw_blit24(dst, dst_pitch, src, src_pitch, height, width, scale, color); > + drm_draw_blit24(dst, dst_pitch, src, src_pitch, height, width, drm_log_scale(), color); > break; > case 4: > - drm_draw_blit32(dst, dst_pitch, src, src_pitch, height, width, scale, color); > + drm_draw_blit32(dst, dst_pitch, src, src_pitch, height, width, drm_log_scale(), color); > break; > default: > WARN_ONCE(1, "Can't blit with pixel width %d\n", px_width); > @@ -216,8 +221,8 @@ static int drm_log_setup_modeset(struct drm_client_dev *client, > return -ENOMEM; > } > mode_set->fb = scanout->buffer->fb; > - scanout->scaled_font_h = scanout->font->height * scale; > - scanout->scaled_font_w = scanout->font->width * scale; > + scanout->scaled_font_h = scanout->font->height * drm_log_scale(); > + scanout->scaled_font_w = scanout->font->width * drm_log_scale(); > scanout->rows = height / scanout->scaled_font_h; > scanout->columns = width / scanout->scaled_font_w; > scanout->front_color = drm_draw_color_from_xrgb8888(0xffffff, format); -- Jani Nikula, Intel