linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, "Rodrigo Vivi" <rodrigo.vivi@intel.com>,
	"Jani Nikula" <jani.nikula@intel.com>,
	"José Roberto de Souza" <jose.souza@intel.com>,
	"Sasha Levin" <sashal@kernel.org>
Subject: [PATCH 5.15 119/262] drm/i915/display: Move DRRS code its own file
Date: Mon,  7 Mar 2022 10:17:43 +0100	[thread overview]
Message-ID: <20220307091705.823402348@linuxfoundation.org> (raw)
In-Reply-To: <20220307091702.378509770@linuxfoundation.org>

From: José Roberto de Souza <jose.souza@intel.com>

[ Upstream commit a1b63119ee839c8ff622407aab25c9723943638a ]

intel_dp.c is a 5k lines monster, so moving DRRS out of it to reduce
some lines from it.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210827174253.51122-2-jose.souza@intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 Documentation/gpu/i915.rst                    |  14 +-
 drivers/gpu/drm/i915/Makefile                 |   1 +
 drivers/gpu/drm/i915/display/intel_ddi.c      |   1 +
 .../drm/i915/display/intel_display_debugfs.c  |   1 +
 drivers/gpu/drm/i915/display/intel_dp.c       | 467 +----------------
 drivers/gpu/drm/i915/display/intel_dp.h       |  11 -
 drivers/gpu/drm/i915/display/intel_drrs.c     | 477 ++++++++++++++++++
 drivers/gpu/drm/i915/display/intel_drrs.h     |  32 ++
 .../gpu/drm/i915/display/intel_frontbuffer.c  |   1 +
 9 files changed, 521 insertions(+), 484 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/display/intel_drrs.c
 create mode 100644 drivers/gpu/drm/i915/display/intel_drrs.h

diff --git a/Documentation/gpu/i915.rst b/Documentation/gpu/i915.rst
index 204ebdaadb45a..03021dfa0dd81 100644
--- a/Documentation/gpu/i915.rst
+++ b/Documentation/gpu/i915.rst
@@ -183,25 +183,25 @@ Frame Buffer Compression (FBC)
 Display Refresh Rate Switching (DRRS)
 -------------------------------------
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :doc: Display Refresh Rate Switching (DRRS)
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :functions: intel_dp_set_drrs_state
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :functions: intel_edp_drrs_enable
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :functions: intel_edp_drrs_disable
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :functions: intel_edp_drrs_invalidate
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :functions: intel_edp_drrs_flush
 
-.. kernel-doc:: drivers/gpu/drm/i915/display/intel_dp.c
+.. kernel-doc:: drivers/gpu/drm/i915/display/intel_drrs.c
    :functions: intel_dp_drrs_init
 
 DPIO
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index a4154fe14f8c0..26cf754229451 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -212,6 +212,7 @@ i915-y += \
 	display/intel_dpll.o \
 	display/intel_dpll_mgr.o \
 	display/intel_dpt.o \
+	display/intel_drrs.o \
 	display/intel_dsb.o \
 	display/intel_fb.o \
 	display/intel_fbc.o \
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 82e5064b4ce7b..f61901e26409e 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -40,6 +40,7 @@
 #include "intel_dp_link_training.h"
 #include "intel_dp_mst.h"
 #include "intel_dpio_phy.h"
+#include "intel_drrs.h"
 #include "intel_dsi.h"
 #include "intel_fdi.h"
 #include "intel_fifo_underrun.h"
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 8fdacb252bb19..b136a0fc0963b 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -13,6 +13,7 @@
 #include "intel_display_types.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
+#include "intel_drrs.h"
 #include "intel_fbc.h"
 #include "intel_hdcp.h"
 #include "intel_hdmi.h"
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index d55363f1fa102..dbff4b6aa22bf 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -56,6 +56,7 @@
 #include "intel_dp_mst.h"
 #include "intel_dpio_phy.h"
 #include "intel_dpll.h"
+#include "intel_drrs.h"
 #include "intel_fifo_underrun.h"
 #include "intel_hdcp.h"
 #include "intel_hdmi.h"
@@ -1610,46 +1611,6 @@ intel_dp_compute_hdr_metadata_infoframe_sdp(struct intel_dp *intel_dp,
 		intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GAMUT_METADATA);
 }
 
-static void
-intel_dp_drrs_compute_config(struct intel_dp *intel_dp,
-			     struct intel_crtc_state *pipe_config,
-			     int output_bpp, bool constant_n)
-{
-	struct intel_connector *intel_connector = intel_dp->attached_connector;
-	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-	int pixel_clock;
-
-	if (pipe_config->vrr.enable)
-		return;
-
-	/*
-	 * DRRS and PSR can't be enable together, so giving preference to PSR
-	 * as it allows more power-savings by complete shutting down display,
-	 * so to guarantee this, intel_dp_drrs_compute_config() must be called
-	 * after intel_psr_compute_config().
-	 */
-	if (pipe_config->has_psr)
-		return;
-
-	if (!intel_connector->panel.downclock_mode ||
-	    dev_priv->drrs.type != SEAMLESS_DRRS_SUPPORT)
-		return;
-
-	pipe_config->has_drrs = true;
-
-	pixel_clock = intel_connector->panel.downclock_mode->clock;
-	if (pipe_config->splitter.enable)
-		pixel_clock /= pipe_config->splitter.link_count;
-
-	intel_link_compute_m_n(output_bpp, pipe_config->lane_count, pixel_clock,
-			       pipe_config->port_clock, &pipe_config->dp_m2_n2,
-			       constant_n, pipe_config->fec_enable);
-
-	/* FIXME: abstract this better */
-	if (pipe_config->splitter.enable)
-		pipe_config->dp_m2_n2.gmch_m *= pipe_config->splitter.link_count;
-}
-
 int
 intel_dp_compute_config(struct intel_encoder *encoder,
 			struct intel_crtc_state *pipe_config,
@@ -4737,432 +4698,6 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect
 		drm_connector_attach_vrr_capable_property(connector);
 }
 
-/**
- * intel_dp_set_drrs_state - program registers for RR switch to take effect
- * @dev_priv: i915 device
- * @crtc_state: a pointer to the active intel_crtc_state
- * @refresh_rate: RR to be programmed
- *
- * This function gets called when refresh rate (RR) has to be changed from
- * one frequency to another. Switches can be between high and low RR
- * supported by the panel or to any other RR based on media playback (in
- * this case, RR value needs to be passed from user space).
- *
- * The caller of this function needs to take a lock on dev_priv->drrs.
- */
-static void intel_dp_set_drrs_state(struct drm_i915_private *dev_priv,
-				    const struct intel_crtc_state *crtc_state,
-				    int refresh_rate)
-{
-	struct intel_dp *intel_dp = dev_priv->drrs.dp;
-	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
-	enum drrs_refresh_rate_type index = DRRS_HIGH_RR;
-
-	if (refresh_rate <= 0) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "Refresh rate should be positive non-zero.\n");
-		return;
-	}
-
-	if (intel_dp == NULL) {
-		drm_dbg_kms(&dev_priv->drm, "DRRS not supported.\n");
-		return;
-	}
-
-	if (!crtc) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "DRRS: intel_crtc not initialized\n");
-		return;
-	}
-
-	if (dev_priv->drrs.type < SEAMLESS_DRRS_SUPPORT) {
-		drm_dbg_kms(&dev_priv->drm, "Only Seamless DRRS supported.\n");
-		return;
-	}
-
-	if (drm_mode_vrefresh(intel_dp->attached_connector->panel.downclock_mode) ==
-			refresh_rate)
-		index = DRRS_LOW_RR;
-
-	if (index == dev_priv->drrs.refresh_rate_type) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "DRRS requested for previously set RR...ignoring\n");
-		return;
-	}
-
-	if (!crtc_state->hw.active) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "eDP encoder disabled. CRTC not Active\n");
-		return;
-	}
-
-	if (DISPLAY_VER(dev_priv) >= 8 && !IS_CHERRYVIEW(dev_priv)) {
-		switch (index) {
-		case DRRS_HIGH_RR:
-			intel_dp_set_m_n(crtc_state, M1_N1);
-			break;
-		case DRRS_LOW_RR:
-			intel_dp_set_m_n(crtc_state, M2_N2);
-			break;
-		case DRRS_MAX_RR:
-		default:
-			drm_err(&dev_priv->drm,
-				"Unsupported refreshrate type\n");
-		}
-	} else if (DISPLAY_VER(dev_priv) > 6) {
-		i915_reg_t reg = PIPECONF(crtc_state->cpu_transcoder);
-		u32 val;
-
-		val = intel_de_read(dev_priv, reg);
-		if (index > DRRS_HIGH_RR) {
-			if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
-				val |= PIPECONF_EDP_RR_MODE_SWITCH_VLV;
-			else
-				val |= PIPECONF_EDP_RR_MODE_SWITCH;
-		} else {
-			if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
-				val &= ~PIPECONF_EDP_RR_MODE_SWITCH_VLV;
-			else
-				val &= ~PIPECONF_EDP_RR_MODE_SWITCH;
-		}
-		intel_de_write(dev_priv, reg, val);
-	}
-
-	dev_priv->drrs.refresh_rate_type = index;
-
-	drm_dbg_kms(&dev_priv->drm, "eDP Refresh Rate set to : %dHz\n",
-		    refresh_rate);
-}
-
-static void
-intel_edp_drrs_enable_locked(struct intel_dp *intel_dp)
-{
-	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-
-	dev_priv->drrs.busy_frontbuffer_bits = 0;
-	dev_priv->drrs.dp = intel_dp;
-}
-
-/**
- * intel_edp_drrs_enable - init drrs struct if supported
- * @intel_dp: DP struct
- * @crtc_state: A pointer to the active crtc state.
- *
- * Initializes frontbuffer_bits and drrs.dp
- */
-void intel_edp_drrs_enable(struct intel_dp *intel_dp,
-			   const struct intel_crtc_state *crtc_state)
-{
-	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-
-	if (!crtc_state->has_drrs)
-		return;
-
-	drm_dbg_kms(&dev_priv->drm, "Enabling DRRS\n");
-
-	mutex_lock(&dev_priv->drrs.mutex);
-
-	if (dev_priv->drrs.dp) {
-		drm_warn(&dev_priv->drm, "DRRS already enabled\n");
-		goto unlock;
-	}
-
-	intel_edp_drrs_enable_locked(intel_dp);
-
-unlock:
-	mutex_unlock(&dev_priv->drrs.mutex);
-}
-
-static void
-intel_edp_drrs_disable_locked(struct intel_dp *intel_dp,
-			      const struct intel_crtc_state *crtc_state)
-{
-	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-
-	if (dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR) {
-		int refresh;
-
-		refresh = drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode);
-		intel_dp_set_drrs_state(dev_priv, crtc_state, refresh);
-	}
-
-	dev_priv->drrs.dp = NULL;
-}
-
-/**
- * intel_edp_drrs_disable - Disable DRRS
- * @intel_dp: DP struct
- * @old_crtc_state: Pointer to old crtc_state.
- *
- */
-void intel_edp_drrs_disable(struct intel_dp *intel_dp,
-			    const struct intel_crtc_state *old_crtc_state)
-{
-	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-
-	if (!old_crtc_state->has_drrs)
-		return;
-
-	mutex_lock(&dev_priv->drrs.mutex);
-	if (!dev_priv->drrs.dp) {
-		mutex_unlock(&dev_priv->drrs.mutex);
-		return;
-	}
-
-	intel_edp_drrs_disable_locked(intel_dp, old_crtc_state);
-	mutex_unlock(&dev_priv->drrs.mutex);
-
-	cancel_delayed_work_sync(&dev_priv->drrs.work);
-}
-
-/**
- * intel_edp_drrs_update - Update DRRS state
- * @intel_dp: Intel DP
- * @crtc_state: new CRTC state
- *
- * This function will update DRRS states, disabling or enabling DRRS when
- * executing fastsets. For full modeset, intel_edp_drrs_disable() and
- * intel_edp_drrs_enable() should be called instead.
- */
-void
-intel_edp_drrs_update(struct intel_dp *intel_dp,
-		      const struct intel_crtc_state *crtc_state)
-{
-	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-
-	if (dev_priv->drrs.type != SEAMLESS_DRRS_SUPPORT)
-		return;
-
-	mutex_lock(&dev_priv->drrs.mutex);
-
-	/* New state matches current one? */
-	if (crtc_state->has_drrs == !!dev_priv->drrs.dp)
-		goto unlock;
-
-	if (crtc_state->has_drrs)
-		intel_edp_drrs_enable_locked(intel_dp);
-	else
-		intel_edp_drrs_disable_locked(intel_dp, crtc_state);
-
-unlock:
-	mutex_unlock(&dev_priv->drrs.mutex);
-}
-
-static void intel_edp_drrs_downclock_work(struct work_struct *work)
-{
-	struct drm_i915_private *dev_priv =
-		container_of(work, typeof(*dev_priv), drrs.work.work);
-	struct intel_dp *intel_dp;
-
-	mutex_lock(&dev_priv->drrs.mutex);
-
-	intel_dp = dev_priv->drrs.dp;
-
-	if (!intel_dp)
-		goto unlock;
-
-	/*
-	 * The delayed work can race with an invalidate hence we need to
-	 * recheck.
-	 */
-
-	if (dev_priv->drrs.busy_frontbuffer_bits)
-		goto unlock;
-
-	if (dev_priv->drrs.refresh_rate_type != DRRS_LOW_RR) {
-		struct drm_crtc *crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
-
-		intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
-			drm_mode_vrefresh(intel_dp->attached_connector->panel.downclock_mode));
-	}
-
-unlock:
-	mutex_unlock(&dev_priv->drrs.mutex);
-}
-
-/**
- * intel_edp_drrs_invalidate - Disable Idleness DRRS
- * @dev_priv: i915 device
- * @frontbuffer_bits: frontbuffer plane tracking bits
- *
- * This function gets called everytime rendering on the given planes start.
- * Hence DRRS needs to be Upclocked, i.e. (LOW_RR -> HIGH_RR).
- *
- * Dirty frontbuffers relevant to DRRS are tracked in busy_frontbuffer_bits.
- */
-void intel_edp_drrs_invalidate(struct drm_i915_private *dev_priv,
-			       unsigned int frontbuffer_bits)
-{
-	struct intel_dp *intel_dp;
-	struct drm_crtc *crtc;
-	enum pipe pipe;
-
-	if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
-		return;
-
-	cancel_delayed_work(&dev_priv->drrs.work);
-
-	mutex_lock(&dev_priv->drrs.mutex);
-
-	intel_dp = dev_priv->drrs.dp;
-	if (!intel_dp) {
-		mutex_unlock(&dev_priv->drrs.mutex);
-		return;
-	}
-
-	crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
-	pipe = to_intel_crtc(crtc)->pipe;
-
-	frontbuffer_bits &= INTEL_FRONTBUFFER_ALL_MASK(pipe);
-	dev_priv->drrs.busy_frontbuffer_bits |= frontbuffer_bits;
-
-	/* invalidate means busy screen hence upclock */
-	if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
-		intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
-					drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
-
-	mutex_unlock(&dev_priv->drrs.mutex);
-}
-
-/**
- * intel_edp_drrs_flush - Restart Idleness DRRS
- * @dev_priv: i915 device
- * @frontbuffer_bits: frontbuffer plane tracking bits
- *
- * This function gets called every time rendering on the given planes has
- * completed or flip on a crtc is completed. So DRRS should be upclocked
- * (LOW_RR -> HIGH_RR). And also Idleness detection should be started again,
- * if no other planes are dirty.
- *
- * Dirty frontbuffers relevant to DRRS are tracked in busy_frontbuffer_bits.
- */
-void intel_edp_drrs_flush(struct drm_i915_private *dev_priv,
-			  unsigned int frontbuffer_bits)
-{
-	struct intel_dp *intel_dp;
-	struct drm_crtc *crtc;
-	enum pipe pipe;
-
-	if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
-		return;
-
-	cancel_delayed_work(&dev_priv->drrs.work);
-
-	mutex_lock(&dev_priv->drrs.mutex);
-
-	intel_dp = dev_priv->drrs.dp;
-	if (!intel_dp) {
-		mutex_unlock(&dev_priv->drrs.mutex);
-		return;
-	}
-
-	crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
-	pipe = to_intel_crtc(crtc)->pipe;
-
-	frontbuffer_bits &= INTEL_FRONTBUFFER_ALL_MASK(pipe);
-	dev_priv->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits;
-
-	/* flush means busy screen hence upclock */
-	if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
-		intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
-					drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
-
-	/*
-	 * flush also means no more activity hence schedule downclock, if all
-	 * other fbs are quiescent too
-	 */
-	if (!dev_priv->drrs.busy_frontbuffer_bits)
-		schedule_delayed_work(&dev_priv->drrs.work,
-				msecs_to_jiffies(1000));
-	mutex_unlock(&dev_priv->drrs.mutex);
-}
-
-/**
- * DOC: Display Refresh Rate Switching (DRRS)
- *
- * Display Refresh Rate Switching (DRRS) is a power conservation feature
- * which enables swtching between low and high refresh rates,
- * dynamically, based on the usage scenario. This feature is applicable
- * for internal panels.
- *
- * Indication that the panel supports DRRS is given by the panel EDID, which
- * would list multiple refresh rates for one resolution.
- *
- * DRRS is of 2 types - static and seamless.
- * Static DRRS involves changing refresh rate (RR) by doing a full modeset
- * (may appear as a blink on screen) and is used in dock-undock scenario.
- * Seamless DRRS involves changing RR without any visual effect to the user
- * and can be used during normal system usage. This is done by programming
- * certain registers.
- *
- * Support for static/seamless DRRS may be indicated in the VBT based on
- * inputs from the panel spec.
- *
- * DRRS saves power by switching to low RR based on usage scenarios.
- *
- * The implementation is based on frontbuffer tracking implementation.  When
- * there is a disturbance on the screen triggered by user activity or a periodic
- * system activity, DRRS is disabled (RR is changed to high RR).  When there is
- * no movement on screen, after a timeout of 1 second, a switch to low RR is
- * made.
- *
- * For integration with frontbuffer tracking code, intel_edp_drrs_invalidate()
- * and intel_edp_drrs_flush() are called.
- *
- * DRRS can be further extended to support other internal panels and also
- * the scenario of video playback wherein RR is set based on the rate
- * requested by userspace.
- */
-
-/**
- * intel_dp_drrs_init - Init basic DRRS work and mutex.
- * @connector: eDP connector
- * @fixed_mode: preferred mode of panel
- *
- * This function is  called only once at driver load to initialize basic
- * DRRS stuff.
- *
- * Returns:
- * Downclock mode if panel supports it, else return NULL.
- * DRRS support is determined by the presence of downclock mode (apart
- * from VBT setting).
- */
-static struct drm_display_mode *
-intel_dp_drrs_init(struct intel_connector *connector,
-		   struct drm_display_mode *fixed_mode)
-{
-	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
-	struct drm_display_mode *downclock_mode = NULL;
-
-	INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
-	mutex_init(&dev_priv->drrs.mutex);
-
-	if (DISPLAY_VER(dev_priv) <= 6) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "DRRS supported for Gen7 and above\n");
-		return NULL;
-	}
-
-	if (dev_priv->vbt.drrs_type != SEAMLESS_DRRS_SUPPORT) {
-		drm_dbg_kms(&dev_priv->drm, "VBT doesn't support DRRS\n");
-		return NULL;
-	}
-
-	downclock_mode = intel_panel_edid_downclock_mode(connector, fixed_mode);
-	if (!downclock_mode) {
-		drm_dbg_kms(&dev_priv->drm,
-			    "Downclock mode is not found. DRRS not supported\n");
-		return NULL;
-	}
-
-	dev_priv->drrs.type = dev_priv->vbt.drrs_type;
-
-	dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
-	drm_dbg_kms(&dev_priv->drm,
-		    "seamless DRRS supported for eDP panel.\n");
-	return downclock_mode;
-}
-
 static bool intel_edp_init_connector(struct intel_dp *intel_dp,
 				     struct intel_connector *intel_connector)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index 2121aaa9b8db0..3dd6ebc2f6b14 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -70,17 +70,6 @@ int intel_dp_max_link_rate(struct intel_dp *intel_dp);
 int intel_dp_max_lane_count(struct intel_dp *intel_dp);
 int intel_dp_rate_select(struct intel_dp *intel_dp, int rate);
 
-void intel_edp_drrs_enable(struct intel_dp *intel_dp,
-			   const struct intel_crtc_state *crtc_state);
-void intel_edp_drrs_disable(struct intel_dp *intel_dp,
-			    const struct intel_crtc_state *crtc_state);
-void intel_edp_drrs_update(struct intel_dp *intel_dp,
-			   const struct intel_crtc_state *crtc_state);
-void intel_edp_drrs_invalidate(struct drm_i915_private *dev_priv,
-			       unsigned int frontbuffer_bits);
-void intel_edp_drrs_flush(struct drm_i915_private *dev_priv,
-			  unsigned int frontbuffer_bits);
-
 void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
 			   u8 *link_bw, u8 *rate_select);
 bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp);
diff --git a/drivers/gpu/drm/i915/display/intel_drrs.c b/drivers/gpu/drm/i915/display/intel_drrs.c
new file mode 100644
index 0000000000000..be9b6d4482f04
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_drrs.c
@@ -0,0 +1,477 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2021 Intel Corporation
+ */
+
+#include "i915_drv.h"
+#include "intel_atomic.h"
+#include "intel_de.h"
+#include "intel_display_types.h"
+#include "intel_drrs.h"
+#include "intel_panel.h"
+
+/**
+ * DOC: Display Refresh Rate Switching (DRRS)
+ *
+ * Display Refresh Rate Switching (DRRS) is a power conservation feature
+ * which enables swtching between low and high refresh rates,
+ * dynamically, based on the usage scenario. This feature is applicable
+ * for internal panels.
+ *
+ * Indication that the panel supports DRRS is given by the panel EDID, which
+ * would list multiple refresh rates for one resolution.
+ *
+ * DRRS is of 2 types - static and seamless.
+ * Static DRRS involves changing refresh rate (RR) by doing a full modeset
+ * (may appear as a blink on screen) and is used in dock-undock scenario.
+ * Seamless DRRS involves changing RR without any visual effect to the user
+ * and can be used during normal system usage. This is done by programming
+ * certain registers.
+ *
+ * Support for static/seamless DRRS may be indicated in the VBT based on
+ * inputs from the panel spec.
+ *
+ * DRRS saves power by switching to low RR based on usage scenarios.
+ *
+ * The implementation is based on frontbuffer tracking implementation.  When
+ * there is a disturbance on the screen triggered by user activity or a periodic
+ * system activity, DRRS is disabled (RR is changed to high RR).  When there is
+ * no movement on screen, after a timeout of 1 second, a switch to low RR is
+ * made.
+ *
+ * For integration with frontbuffer tracking code, intel_edp_drrs_invalidate()
+ * and intel_edp_drrs_flush() are called.
+ *
+ * DRRS can be further extended to support other internal panels and also
+ * the scenario of video playback wherein RR is set based on the rate
+ * requested by userspace.
+ */
+
+void
+intel_dp_drrs_compute_config(struct intel_dp *intel_dp,
+			     struct intel_crtc_state *pipe_config,
+			     int output_bpp, bool constant_n)
+{
+	struct intel_connector *intel_connector = intel_dp->attached_connector;
+	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+	int pixel_clock;
+
+	if (pipe_config->vrr.enable)
+		return;
+
+	/*
+	 * DRRS and PSR can't be enable together, so giving preference to PSR
+	 * as it allows more power-savings by complete shutting down display,
+	 * so to guarantee this, intel_dp_drrs_compute_config() must be called
+	 * after intel_psr_compute_config().
+	 */
+	if (pipe_config->has_psr)
+		return;
+
+	if (!intel_connector->panel.downclock_mode ||
+	    dev_priv->drrs.type != SEAMLESS_DRRS_SUPPORT)
+		return;
+
+	pipe_config->has_drrs = true;
+
+	pixel_clock = intel_connector->panel.downclock_mode->clock;
+	if (pipe_config->splitter.enable)
+		pixel_clock /= pipe_config->splitter.link_count;
+
+	intel_link_compute_m_n(output_bpp, pipe_config->lane_count, pixel_clock,
+			       pipe_config->port_clock, &pipe_config->dp_m2_n2,
+			       constant_n, pipe_config->fec_enable);
+
+	/* FIXME: abstract this better */
+	if (pipe_config->splitter.enable)
+		pipe_config->dp_m2_n2.gmch_m *= pipe_config->splitter.link_count;
+}
+
+/**
+ * intel_dp_set_drrs_state - program registers for RR switch to take effect
+ * @dev_priv: i915 device
+ * @crtc_state: a pointer to the active intel_crtc_state
+ * @refresh_rate: RR to be programmed
+ *
+ * This function gets called when refresh rate (RR) has to be changed from
+ * one frequency to another. Switches can be between high and low RR
+ * supported by the panel or to any other RR based on media playback (in
+ * this case, RR value needs to be passed from user space).
+ *
+ * The caller of this function needs to take a lock on dev_priv->drrs.
+ */
+static void intel_dp_set_drrs_state(struct drm_i915_private *dev_priv,
+				    const struct intel_crtc_state *crtc_state,
+				    int refresh_rate)
+{
+	struct intel_dp *intel_dp = dev_priv->drrs.dp;
+	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+	enum drrs_refresh_rate_type index = DRRS_HIGH_RR;
+
+	if (refresh_rate <= 0) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "Refresh rate should be positive non-zero.\n");
+		return;
+	}
+
+	if (intel_dp == NULL) {
+		drm_dbg_kms(&dev_priv->drm, "DRRS not supported.\n");
+		return;
+	}
+
+	if (!crtc) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "DRRS: intel_crtc not initialized\n");
+		return;
+	}
+
+	if (dev_priv->drrs.type < SEAMLESS_DRRS_SUPPORT) {
+		drm_dbg_kms(&dev_priv->drm, "Only Seamless DRRS supported.\n");
+		return;
+	}
+
+	if (drm_mode_vrefresh(intel_dp->attached_connector->panel.downclock_mode) ==
+			refresh_rate)
+		index = DRRS_LOW_RR;
+
+	if (index == dev_priv->drrs.refresh_rate_type) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "DRRS requested for previously set RR...ignoring\n");
+		return;
+	}
+
+	if (!crtc_state->hw.active) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "eDP encoder disabled. CRTC not Active\n");
+		return;
+	}
+
+	if (DISPLAY_VER(dev_priv) >= 8 && !IS_CHERRYVIEW(dev_priv)) {
+		switch (index) {
+		case DRRS_HIGH_RR:
+			intel_dp_set_m_n(crtc_state, M1_N1);
+			break;
+		case DRRS_LOW_RR:
+			intel_dp_set_m_n(crtc_state, M2_N2);
+			break;
+		case DRRS_MAX_RR:
+		default:
+			drm_err(&dev_priv->drm,
+				"Unsupported refreshrate type\n");
+		}
+	} else if (DISPLAY_VER(dev_priv) > 6) {
+		i915_reg_t reg = PIPECONF(crtc_state->cpu_transcoder);
+		u32 val;
+
+		val = intel_de_read(dev_priv, reg);
+		if (index > DRRS_HIGH_RR) {
+			if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
+				val |= PIPECONF_EDP_RR_MODE_SWITCH_VLV;
+			else
+				val |= PIPECONF_EDP_RR_MODE_SWITCH;
+		} else {
+			if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
+				val &= ~PIPECONF_EDP_RR_MODE_SWITCH_VLV;
+			else
+				val &= ~PIPECONF_EDP_RR_MODE_SWITCH;
+		}
+		intel_de_write(dev_priv, reg, val);
+	}
+
+	dev_priv->drrs.refresh_rate_type = index;
+
+	drm_dbg_kms(&dev_priv->drm, "eDP Refresh Rate set to : %dHz\n",
+		    refresh_rate);
+}
+
+static void
+intel_edp_drrs_enable_locked(struct intel_dp *intel_dp)
+{
+	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+
+	dev_priv->drrs.busy_frontbuffer_bits = 0;
+	dev_priv->drrs.dp = intel_dp;
+}
+
+/**
+ * intel_edp_drrs_enable - init drrs struct if supported
+ * @intel_dp: DP struct
+ * @crtc_state: A pointer to the active crtc state.
+ *
+ * Initializes frontbuffer_bits and drrs.dp
+ */
+void intel_edp_drrs_enable(struct intel_dp *intel_dp,
+			   const struct intel_crtc_state *crtc_state)
+{
+	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+
+	if (!crtc_state->has_drrs)
+		return;
+
+	drm_dbg_kms(&dev_priv->drm, "Enabling DRRS\n");
+
+	mutex_lock(&dev_priv->drrs.mutex);
+
+	if (dev_priv->drrs.dp) {
+		drm_warn(&dev_priv->drm, "DRRS already enabled\n");
+		goto unlock;
+	}
+
+	intel_edp_drrs_enable_locked(intel_dp);
+
+unlock:
+	mutex_unlock(&dev_priv->drrs.mutex);
+}
+
+static void
+intel_edp_drrs_disable_locked(struct intel_dp *intel_dp,
+			      const struct intel_crtc_state *crtc_state)
+{
+	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+
+	if (dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR) {
+		int refresh;
+
+		refresh = drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode);
+		intel_dp_set_drrs_state(dev_priv, crtc_state, refresh);
+	}
+
+	dev_priv->drrs.dp = NULL;
+}
+
+/**
+ * intel_edp_drrs_disable - Disable DRRS
+ * @intel_dp: DP struct
+ * @old_crtc_state: Pointer to old crtc_state.
+ *
+ */
+void intel_edp_drrs_disable(struct intel_dp *intel_dp,
+			    const struct intel_crtc_state *old_crtc_state)
+{
+	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+
+	if (!old_crtc_state->has_drrs)
+		return;
+
+	mutex_lock(&dev_priv->drrs.mutex);
+	if (!dev_priv->drrs.dp) {
+		mutex_unlock(&dev_priv->drrs.mutex);
+		return;
+	}
+
+	intel_edp_drrs_disable_locked(intel_dp, old_crtc_state);
+	mutex_unlock(&dev_priv->drrs.mutex);
+
+	cancel_delayed_work_sync(&dev_priv->drrs.work);
+}
+
+/**
+ * intel_edp_drrs_update - Update DRRS state
+ * @intel_dp: Intel DP
+ * @crtc_state: new CRTC state
+ *
+ * This function will update DRRS states, disabling or enabling DRRS when
+ * executing fastsets. For full modeset, intel_edp_drrs_disable() and
+ * intel_edp_drrs_enable() should be called instead.
+ */
+void
+intel_edp_drrs_update(struct intel_dp *intel_dp,
+		      const struct intel_crtc_state *crtc_state)
+{
+	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+
+	if (dev_priv->drrs.type != SEAMLESS_DRRS_SUPPORT)
+		return;
+
+	mutex_lock(&dev_priv->drrs.mutex);
+
+	/* New state matches current one? */
+	if (crtc_state->has_drrs == !!dev_priv->drrs.dp)
+		goto unlock;
+
+	if (crtc_state->has_drrs)
+		intel_edp_drrs_enable_locked(intel_dp);
+	else
+		intel_edp_drrs_disable_locked(intel_dp, crtc_state);
+
+unlock:
+	mutex_unlock(&dev_priv->drrs.mutex);
+}
+
+static void intel_edp_drrs_downclock_work(struct work_struct *work)
+{
+	struct drm_i915_private *dev_priv =
+		container_of(work, typeof(*dev_priv), drrs.work.work);
+	struct intel_dp *intel_dp;
+
+	mutex_lock(&dev_priv->drrs.mutex);
+
+	intel_dp = dev_priv->drrs.dp;
+
+	if (!intel_dp)
+		goto unlock;
+
+	/*
+	 * The delayed work can race with an invalidate hence we need to
+	 * recheck.
+	 */
+
+	if (dev_priv->drrs.busy_frontbuffer_bits)
+		goto unlock;
+
+	if (dev_priv->drrs.refresh_rate_type != DRRS_LOW_RR) {
+		struct drm_crtc *crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
+
+		intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
+					drm_mode_vrefresh(intel_dp->attached_connector->panel.downclock_mode));
+	}
+
+unlock:
+	mutex_unlock(&dev_priv->drrs.mutex);
+}
+
+/**
+ * intel_edp_drrs_invalidate - Disable Idleness DRRS
+ * @dev_priv: i915 device
+ * @frontbuffer_bits: frontbuffer plane tracking bits
+ *
+ * This function gets called everytime rendering on the given planes start.
+ * Hence DRRS needs to be Upclocked, i.e. (LOW_RR -> HIGH_RR).
+ *
+ * Dirty frontbuffers relevant to DRRS are tracked in busy_frontbuffer_bits.
+ */
+void intel_edp_drrs_invalidate(struct drm_i915_private *dev_priv,
+			       unsigned int frontbuffer_bits)
+{
+	struct intel_dp *intel_dp;
+	struct drm_crtc *crtc;
+	enum pipe pipe;
+
+	if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
+		return;
+
+	cancel_delayed_work(&dev_priv->drrs.work);
+
+	mutex_lock(&dev_priv->drrs.mutex);
+
+	intel_dp = dev_priv->drrs.dp;
+	if (!intel_dp) {
+		mutex_unlock(&dev_priv->drrs.mutex);
+		return;
+	}
+
+	crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
+	pipe = to_intel_crtc(crtc)->pipe;
+
+	frontbuffer_bits &= INTEL_FRONTBUFFER_ALL_MASK(pipe);
+	dev_priv->drrs.busy_frontbuffer_bits |= frontbuffer_bits;
+
+	/* invalidate means busy screen hence upclock */
+	if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
+		intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
+					drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
+
+	mutex_unlock(&dev_priv->drrs.mutex);
+}
+
+/**
+ * intel_edp_drrs_flush - Restart Idleness DRRS
+ * @dev_priv: i915 device
+ * @frontbuffer_bits: frontbuffer plane tracking bits
+ *
+ * This function gets called every time rendering on the given planes has
+ * completed or flip on a crtc is completed. So DRRS should be upclocked
+ * (LOW_RR -> HIGH_RR). And also Idleness detection should be started again,
+ * if no other planes are dirty.
+ *
+ * Dirty frontbuffers relevant to DRRS are tracked in busy_frontbuffer_bits.
+ */
+void intel_edp_drrs_flush(struct drm_i915_private *dev_priv,
+			  unsigned int frontbuffer_bits)
+{
+	struct intel_dp *intel_dp;
+	struct drm_crtc *crtc;
+	enum pipe pipe;
+
+	if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
+		return;
+
+	cancel_delayed_work(&dev_priv->drrs.work);
+
+	mutex_lock(&dev_priv->drrs.mutex);
+
+	intel_dp = dev_priv->drrs.dp;
+	if (!intel_dp) {
+		mutex_unlock(&dev_priv->drrs.mutex);
+		return;
+	}
+
+	crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
+	pipe = to_intel_crtc(crtc)->pipe;
+
+	frontbuffer_bits &= INTEL_FRONTBUFFER_ALL_MASK(pipe);
+	dev_priv->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits;
+
+	/* flush means busy screen hence upclock */
+	if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
+		intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
+					drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
+
+	/*
+	 * flush also means no more activity hence schedule downclock, if all
+	 * other fbs are quiescent too
+	 */
+	if (!dev_priv->drrs.busy_frontbuffer_bits)
+		schedule_delayed_work(&dev_priv->drrs.work,
+				      msecs_to_jiffies(1000));
+	mutex_unlock(&dev_priv->drrs.mutex);
+}
+
+/**
+ * intel_dp_drrs_init - Init basic DRRS work and mutex.
+ * @connector: eDP connector
+ * @fixed_mode: preferred mode of panel
+ *
+ * This function is  called only once at driver load to initialize basic
+ * DRRS stuff.
+ *
+ * Returns:
+ * Downclock mode if panel supports it, else return NULL.
+ * DRRS support is determined by the presence of downclock mode (apart
+ * from VBT setting).
+ */
+struct drm_display_mode *
+intel_dp_drrs_init(struct intel_connector *connector,
+		   struct drm_display_mode *fixed_mode)
+{
+	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
+	struct drm_display_mode *downclock_mode = NULL;
+
+	INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
+	mutex_init(&dev_priv->drrs.mutex);
+
+	if (DISPLAY_VER(dev_priv) <= 6) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "DRRS supported for Gen7 and above\n");
+		return NULL;
+	}
+
+	if (dev_priv->vbt.drrs_type != SEAMLESS_DRRS_SUPPORT) {
+		drm_dbg_kms(&dev_priv->drm, "VBT doesn't support DRRS\n");
+		return NULL;
+	}
+
+	downclock_mode = intel_panel_edid_downclock_mode(connector, fixed_mode);
+	if (!downclock_mode) {
+		drm_dbg_kms(&dev_priv->drm,
+			    "Downclock mode is not found. DRRS not supported\n");
+		return NULL;
+	}
+
+	dev_priv->drrs.type = dev_priv->vbt.drrs_type;
+
+	dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
+	drm_dbg_kms(&dev_priv->drm,
+		    "seamless DRRS supported for eDP panel.\n");
+	return downclock_mode;
+}
diff --git a/drivers/gpu/drm/i915/display/intel_drrs.h b/drivers/gpu/drm/i915/display/intel_drrs.h
new file mode 100644
index 0000000000000..ffa175b4cf4f4
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_drrs.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2021 Intel Corporation
+ */
+
+#ifndef __INTEL_DRRS_H__
+#define __INTEL_DRRS_H__
+
+#include <linux/types.h>
+
+struct drm_i915_private;
+struct intel_crtc_state;
+struct intel_connector;
+struct intel_dp;
+
+void intel_edp_drrs_enable(struct intel_dp *intel_dp,
+			   const struct intel_crtc_state *crtc_state);
+void intel_edp_drrs_disable(struct intel_dp *intel_dp,
+			    const struct intel_crtc_state *crtc_state);
+void intel_edp_drrs_update(struct intel_dp *intel_dp,
+			   const struct intel_crtc_state *crtc_state);
+void intel_edp_drrs_invalidate(struct drm_i915_private *dev_priv,
+			       unsigned int frontbuffer_bits);
+void intel_edp_drrs_flush(struct drm_i915_private *dev_priv,
+			  unsigned int frontbuffer_bits);
+void intel_dp_drrs_compute_config(struct intel_dp *intel_dp,
+				  struct intel_crtc_state *pipe_config,
+				  int output_bpp, bool constant_n);
+struct drm_display_mode *intel_dp_drrs_init(struct intel_connector *connector,
+					    struct drm_display_mode *fixed_mode);
+
+#endif /* __INTEL_DRRS_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index 8e75debcce1a9..e4834d84ce5e3 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -62,6 +62,7 @@
 #include "intel_display_types.h"
 #include "intel_fbc.h"
 #include "intel_frontbuffer.h"
+#include "intel_drrs.h"
 #include "intel_psr.h"
 
 /**
-- 
2.34.1




  parent reply	other threads:[~2022-03-07 10:03 UTC|newest]

Thread overview: 280+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-07  9:15 [PATCH 5.15 000/262] 5.15.27-rc1 review Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 001/262] mac80211_hwsim: report NOACK frames in tx_status Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 002/262] mac80211_hwsim: initialize ieee80211_tx_info at hw_scan_work Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 003/262] i2c: bcm2835: Avoid clock stretching timeouts Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 004/262] ASoC: rt5668: do not block workqueue if card is unbound Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 005/262] ASoC: rt5682: " Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 006/262] regulator: core: fix false positive in regulator_late_cleanup() Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 007/262] Input: clear BTN_RIGHT/MIDDLE on buttonpads Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 008/262] btrfs: get rid of warning on transaction commit when using flushoncommit Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 009/262] KVM: arm64: vgic: Read HW interrupt pending state from the HW Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 010/262] block: loop:use kstatfs.f_bsize of backing file to set discard granularity Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 011/262] tipc: fix a bit overflow in tipc_crypto_key_rcv() Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 012/262] cifs: do not use uninitialized data in the owner/group sid Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 013/262] cifs: fix double free race when mount fails in cifs_get_root() Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 014/262] HID: amd_sfh: Handle amd_sfh work buffer in PM ops Greg Kroah-Hartman
2022-03-07  9:15 ` [PATCH 5.15 015/262] HID: amd_sfh: Add functionality to clear interrupts Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 016/262] HID: amd_sfh: Add interrupt handler to process interrupts Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 017/262] cifs: modefromsids must add an ACE for authenticated users Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 018/262] selftests/seccomp: Fix seccomp failure by adding missing headers Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 019/262] drm/amd/pm: correct UMD pstate clocks for Dimgrey Cavefish and Beige Goby Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 020/262] selftests/ftrace: Do not trace do_softirq because of PREEMPT_RT Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 021/262] dmaengine: shdma: Fix runtime PM imbalance on error Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 022/262] i2c: cadence: allow COMPILE_TEST Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 023/262] i2c: imx: " Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 024/262] i2c: qup: " Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 025/262] net: usb: cdc_mbim: avoid altsetting toggling for Telit FN990 Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 026/262] block-map: add __GFP_ZERO flag for alloc_page in function bio_copy_kern Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 027/262] usb: gadget: dont release an existing dev->buf Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 028/262] usb: gadget: clear related members when goto fail Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 029/262] exfat: reuse exfat_inode_info variable instead of calling EXFAT_I() Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 030/262] exfat: fix i_blocks for files truncated over 4 GiB Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 031/262] tracing: Add test for user space strings when filtering on string pointers Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 032/262] arm64: Mark start_backtrace() notrace and NOKPROBE_SYMBOL Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 033/262] serial: stm32: prevent TDR register overwrite when sending x_char Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 034/262] ext4: drop ineligible txn start stop APIs Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 035/262] ext4: simplify updating of fast commit stats Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 036/262] ext4: fast commit may not fallback for ineligible commit Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 037/262] ext4: fast commit may miss file actions Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 038/262] sched/fair: Fix fault in reweight_entity Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 039/262] ata: pata_hpt37x: fix PCI clock detection Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 040/262] drm/amdgpu: check vm ready by amdgpu_vm->evicting flag Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 041/262] tracing: Add ustring operation to filtering string pointers Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 042/262] ipv6: fix skb drops in igmp6_event_query() and igmp6_event_report() Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 043/262] NFSD: Have legacy NFSD WRITE decoders use xdr_stream_subsegment() Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 044/262] NFSD: Fix zero-length NFSv3 WRITEs Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 045/262] io_uring: fix no lock protection for ctx->cq_extra Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 046/262] tools/resolve_btf_ids: Close ELF file on error Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 047/262] mtd: spi-nor: Fix mtd size for s3an flashes Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 048/262] bpf, arm64: Use emit_addr_mov_i64() for BPF_PSEUDO_FUNC Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 049/262] MIPS: fix local_{add,sub}_return on MIPS64 Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 050/262] signal: In get_signal test for signal_group_exit every time through the loop Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 051/262] PCI: mediatek-gen3: Disable DVFSRC voltage request Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 052/262] PCI: rcar: Check if device is runtime suspended instead of __clk_is_enabled() Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 053/262] PCI: dwc: Do not remap invalid res Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 054/262] PCI: aardvark: Fix checking for MEM resource type Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 055/262] KVM: VMX: Dont unblock vCPU w/ Posted IRQ if IRQs are disabled in guest Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 056/262] KVM: s390: Ensure kvm_arch_no_poll() is read once when blocking vCPU Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 057/262] KVM: VMX: Read Posted Interrupt "control" exactly once per loop iteration Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 058/262] KVM: X86: Ensure that dirty PDPTRs are loaded Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 059/262] KVM: x86: Handle 32-bit wrap of EIP for EMULTYPE_SKIP with flat code seg Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 060/262] KVM: x86: Exit to userspace if emulation prepared a completion callback Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 061/262] i3c: fix incorrect address slot lookup on 64-bit Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 062/262] i3c/master/mipi-i3c-hci: Fix a potentially infinite loop in hci_dat_v1_get_index() Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 063/262] tracing: Do not let synth_events block other dyn_event systems during create Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 064/262] Input: ti_am335x_tsc - set ADCREFM for X configuration Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 065/262] Input: ti_am335x_tsc - fix STEPCONFIG setup for Z2 Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 066/262] PCI: mvebu: Check for errors from pci_bridge_emul_init() call Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 067/262] PCI: mvebu: Do not modify PCI IO type bits in conf_write Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 068/262] PCI: mvebu: Fix support for bus mastering and PCI_COMMAND on emulated bridge Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 069/262] PCI: mvebu: Fix configuring secondary bus of PCIe Root Port via " Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 070/262] PCI: mvebu: Setup PCIe controller to Root Complex mode Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 071/262] PCI: mvebu: Fix support for PCI_BRIDGE_CTL_BUS_RESET on emulated bridge Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 072/262] PCI: mvebu: Fix support for PCI_EXP_DEVCTL " Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 073/262] PCI: mvebu: Fix support for PCI_EXP_RTSTA " Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 074/262] PCI: mvebu: Fix support for DEVCAP2, DEVCTL2 and LNKCTL2 registers " Greg Kroah-Hartman
2022-03-07  9:16 ` [PATCH 5.15 075/262] NFSD: Fix verifier returned in stable WRITEs Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 076/262] Revert "nfsd: skip some unnecessary stats in the v4 case" Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 077/262] nfsd: fix crash on COPY_NOTIFY with special stateid Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 078/262] x86/hyperv: Properly deal with empty cpumasks in hyperv_flush_tlb_multi() Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 079/262] drm/i915: dont call free_mmap_offset when purging Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 080/262] SUNRPC: Fix sockaddr handling in the svc_xprt_create_error trace point Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 081/262] SUNRPC: Fix sockaddr handling in svcsock_accept_class trace points Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 082/262] drm/sun4i: dw-hdmi: Fix missing put_device() call in sun8i_hdmi_phy_get Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 083/262] drm/atomic: Check new_crtc_state->active to determine if CRTC needs disable in self refresh mode Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 084/262] ntb_hw_switchtec: Fix pff ioread to read into mmio_part_cfg_all Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 085/262] ntb_hw_switchtec: Fix bug with more than 32 partitions Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 086/262] drm/amdkfd: Check for null pointer after calling kmemdup Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 087/262] drm/amdgpu: use spin_lock_irqsave to avoid deadlock by local interrupt Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 088/262] i3c: master: dw: check return of dw_i3c_master_get_free_pos() Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 089/262] dma-buf: cma_heap: Fix mutex locking section Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 090/262] tracing/uprobes: Check the return value of kstrdup() for tu->filename Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 091/262] tracing/probes: check the return value of kstrndup() for pbuf Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 092/262] mm: defer kmemleak object creation of module_alloc() Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 093/262] kasan: fix quarantine conflicting with init_on_free Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 094/262] selftests/vm: make charge_reserved_hugetlb.sh work with existing cgroup setting Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 095/262] hugetlbfs: fix off-by-one error in hugetlb_vmdelete_list() Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 096/262] drm/amdgpu/display: Only set vblank_disable_immediate when PSR is not enabled Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 097/262] drm/amdgpu: filter out radeon PCI device IDs Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 098/262] drm/amdgpu: filter out radeon secondary ids as well Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 099/262] drm/amd/display: Use adjusted DCN301 watermarks Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 100/262] drm/amd/display: move FPU associated DSC code to DML folder Greg Kroah-Hartman
2022-03-07 17:19   ` Deucher, Alexander
2022-03-07 17:21     ` Deucher, Alexander
2022-03-07 17:22     ` Greg Kroah-Hartman
2022-03-07 19:35       ` Deucher, Alexander
2022-03-07  9:17 ` [PATCH 5.15 101/262] drm/amd/display: move FPU associated DCN301 " Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 102/262] drm/amd/display: Wrap dcn301_calculate_wm_and_dlg for FPU Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 103/262] ethtool: Fix link extended state for big endian Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 104/262] octeontx2-af: Optimize KPU1 processing for variable-length headers Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 105/262] octeontx2-af: Reset PTP config in FLR handler Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 106/262] octeontx2-af: cn10k: RPM hardware timestamp configuration Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 107/262] octeontx2-af: cn10k: Use appropriate register for LMAC enable Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 108/262] octeontx2-af: Adjust LA pointer for cpt parse header Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 109/262] octeontx2-af: Add KPU changes to parse NGIO as separate layer Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 110/262] net/mlx5e: IPsec: Refactor checksum code in tx data path Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 111/262] net/mlx5e: IPsec: Fix crypto offload for non TCP/UDP encapsulated traffic Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 112/262] bpf: Use u64_stats_t in struct bpf_prog_stats Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 113/262] bpf: Fix possible race in inc_misses_counter Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 114/262] drm/amd/display: Update watermark values for DCN301 Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 115/262] drm: mxsfb: Set fallback bus format when the bridge doesnt provide one Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 116/262] drm: mxsfb: Fix NULL pointer dereference Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 117/262] riscv/mm: Add XIP_FIXUP for phys_ram_base Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 118/262] drm/i915/display: split out dpt out of intel_display.c Greg Kroah-Hartman
2022-03-07  9:17 ` Greg Kroah-Hartman [this message]
2022-03-07  9:17 ` [PATCH 5.15 120/262] drm/i915: Disable DRRS on IVB/HSW port != A Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 121/262] gve: Recording rx queue before sending to napi Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 122/262] net: dsa: ocelot: seville: utilize of_mdiobus_register Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 123/262] net: dsa: seville: register the mdiobus under devres Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 124/262] ibmvnic: dont release napi in __ibmvnic_open() Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 125/262] of: net: move of_net under net/ Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 126/262] net: ethernet: litex: Add the dependency on HAS_IOMEM Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 127/262] drm/mediatek: mtk_dsi: Reset the dsi0 hardware Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 128/262] drm/mediatek: mtk_dsi: Avoid EPROBE_DEFER loop with external bridge Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 129/262] cifs: protect session channel fields with chan_lock Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 130/262] cifs: fix confusing unneeded warning message on smb2.1 and earlier Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 131/262] drm/amd/display: Fix stream->link_enc unassigned during stream removal Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 132/262] bnxt_en: Fix occasional ethtool -t loopback test failures Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 133/262] drm/amd/display: For vblank_disable_immediate, check PSR is really used Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 134/262] PCI: mvebu: Fix device enumeration regression Greg Kroah-Hartman
2022-03-07  9:17 ` [PATCH 5.15 135/262] net: of: fix stub of_net helpers for CONFIG_NET=n Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 136/262] ALSA: intel_hdmi: Fix reference to PCM buffer address Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 137/262] ucounts: Fix systemd LimitNPROC with private users regression Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 138/262] riscv/efi_stub: Fix get_boot_hartid_from_fdt() return value Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 139/262] riscv: Fix config KASAN && SPARSEMEM && !SPARSE_VMEMMAP Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 140/262] riscv: Fix config KASAN && DEBUG_VIRTUAL Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 141/262] iwlwifi: mvm: check debugfs_dir ptr before use Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 142/262] ASoC: ops: Shift tested values in snd_soc_put_volsw() by +min Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 143/262] iommu/vt-d: Fix double list_add when enabling VMD in scalable mode Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 144/262] iommu/amd: Recover from event log overflow Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 145/262] drm/i915: s/JSP2/ICP2/ PCH Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 146/262] drm/amd/display: Reduce dmesg error to a debug print Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 147/262] xen/netfront: destroy queues before real_num_tx_queues is zeroed Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 148/262] thermal: core: Fix TZ_GET_TRIP NULL pointer dereference Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 149/262] mac80211: fix EAPoL rekey fail in 802.3 rx path Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 150/262] blktrace: fix use after free for struct blk_trace Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 151/262] ntb: intel: fix port config status offset for SPR Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 152/262] mm: Consider __GFP_NOWARN flag for oversized kvmalloc() calls Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 153/262] xfrm: fix MTU regression Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 154/262] netfilter: fix use-after-free in __nf_register_net_hook() Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 155/262] bpf, sockmap: Do not ignore orig_len parameter Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 156/262] xfrm: fix the if_id check in changelink Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 157/262] xfrm: enforce validity of offload input flags Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 158/262] e1000e: Correct NVM checksum verification flow Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 159/262] net: fix up skbs delta_truesize in UDP GRO frag_list Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 160/262] netfilter: nf_queue: dont assume sk is full socket Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 161/262] netfilter: nf_queue: fix possible use-after-free Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 162/262] netfilter: nf_queue: handle socket prefetch Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 163/262] batman-adv: Request iflink once in batadv-on-batadv check Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 164/262] batman-adv: Request iflink once in batadv_get_real_netdevice Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 165/262] batman-adv: Dont expect inter-netns unique iflink indices Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 166/262] net: ipv6: ensure we call ipv6_mc_down() at most once Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 167/262] net: dcb: flush lingering app table entries for unregistered devices Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 168/262] net: ipa: add an interconnect dependency Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 169/262] net/smc: fix connection leak Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 170/262] net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error generated by client Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 171/262] net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error cause by server Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 172/262] btrfs: fix ENOSPC failure when attempting direct IO write into NOCOW range Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 173/262] mac80211: fix forwarded mesh frames AC & queue selection Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 174/262] net: stmmac: fix return value of __setup handler Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 175/262] mac80211: treat some SAE auth steps as final Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 176/262] iavf: Fix missing check for running netdev Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 177/262] net: sxgbe: fix return value of __setup handler Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 178/262] ibmvnic: register netdev after init of adapter Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 179/262] net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe() Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 180/262] ixgbe: xsk: change !netif_carrier_ok() handling in ixgbe_xmit_zc() Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 181/262] iavf: Fix deadlock in iavf_reset_task Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 182/262] efivars: Respect "block" flag in efivar_entry_set_safe() Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 183/262] auxdisplay: lcd2s: Fix lcd2s_redefine_char() feature Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 184/262] firmware: arm_scmi: Remove space in MODULE_ALIAS name Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 185/262] ASoC: cs4265: Fix the duplicated control name Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 186/262] auxdisplay: lcd2s: Fix memory leak in ->remove() Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 187/262] auxdisplay: lcd2s: Use proper API to free the instance of charlcd object Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 188/262] can: gs_usb: change active_channelss type from atomic_t to u8 Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 189/262] iommu/tegra-smmu: Fix missing put_device() call in tegra_smmu_find Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 190/262] arm64: dts: rockchip: Switch RK3399-Gru DP to SPDIF output Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 191/262] igc: igc_read_phy_reg_gpy: drop premature return Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 192/262] ARM: Fix kgdb breakpoint for Thumb2 Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 193/262] mips: setup: fix setnocoherentio() boolean setting Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 194/262] ARM: 9182/1: mmu: fix returns from early_param() and __setup() functions Greg Kroah-Hartman
2022-03-07  9:18 ` [PATCH 5.15 195/262] mptcp: Correctly set DATA_FIN timeout when number of retransmits is large Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 196/262] selftests: mlxsw: tc_police_scale: Make test more robust Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 197/262] pinctrl: sunxi: Use unique lockdep classes for IRQs Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 198/262] igc: igc_write_phy_reg_gpy: drop premature return Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 199/262] ibmvnic: free reset-work-item when flushing Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 200/262] memfd: fix F_SEAL_WRITE after shmem huge page allocated Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 201/262] s390/extable: fix exception table sorting Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 202/262] sched: Fix yet more sched_fork() races Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 203/262] arm64: dts: juno: Remove GICv2m dma-range Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 204/262] iommu/amd: Simplify pagetable freeing Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 205/262] iommu/amd: Use put_pages_list Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 206/262] iommu/amd: Fix I/O page table memory leak Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 207/262] MIPS: ralink: mt7621: do memory detection on KSEG1 Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 208/262] ARM: dts: switch timer config to common devkit8000 devicetree Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 209/262] ARM: dts: Use 32KiHz oscillator on devkit8000 Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 210/262] soc: fsl: guts: Revert commit 3c0d64e867ed Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 211/262] soc: fsl: guts: Add a missing memory allocation failure check Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 212/262] soc: fsl: qe: Check of ioremap return value Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 213/262] netfilter: nf_tables: prefer kfree_rcu(ptr, rcu) variant Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 214/262] ARM: tegra: Move panels to AUX bus Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 215/262] can: etas_es58x: change opened_channel_cnts type from atomic_t to u8 Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 216/262] net: stmmac: enhance XDP ZC driver level switching performance Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 217/262] net: stmmac: only enable DMA interrupts when ready Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 218/262] ibmvnic: initialize rc before completing wait Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 219/262] ibmvnic: define flush_reset_queue helper Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 220/262] ibmvnic: complete init_done on transport events Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 221/262] net: chelsio: cxgb3: check the return value of pci_find_capability() Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 222/262] net: sparx5: Fix add vlan when invalid operation Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 223/262] iavf: Refactor iavf state machine tracking Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 224/262] iavf: Add __IAVF_INIT_FAILED state Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 225/262] iavf: Combine init and watchdog state machines Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 226/262] iavf: Add trace while removing device Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 227/262] iavf: Rework mutexes for better synchronisation Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 228/262] iavf: Add helper function to go from pci_dev to adapter Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 229/262] iavf: Fix kernel BUG in free_msi_irqs Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 230/262] iavf: Add waiting so the port is initialized in remove Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 231/262] iavf: Fix init state closure on remove Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 232/262] iavf: Fix locking for VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 233/262] iavf: Fix race in init state Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 234/262] iavf: Fix __IAVF_RESETTING state usage Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 235/262] drm/i915/guc/slpc: Correct the param count for unset param Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 236/262] drm/bridge: ti-sn65dsi86: Properly undo autosuspend Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 237/262] e1000e: Fix possible HW unit hang after an s0ix exit Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 238/262] MIPS: ralink: mt7621: use bitwise NOT instead of logical Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 239/262] nl80211: Handle nla_memdup failures in handle_nan_filter Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 240/262] drm/amdgpu: fix suspend/resume hang regression Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 241/262] net: dcb: disable softirqs in dcbnl_flush_dev() Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 242/262] selftests: mlxsw: resource_scale: Fix return value Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 243/262] net: stmmac: perserve TX and RX coalesce value during XDP setup Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 244/262] iavf: do not override the adapter state in the watchdog task (again) Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 245/262] iavf: missing unlocks in iavf_watchdog_task() Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 246/262] MAINTAINERS: adjust file entry for of_net.c after movement Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 247/262] Input: elan_i2c - move regulator_[en|dis]able() out of elan_[en|dis]able_power() Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 248/262] Input: elan_i2c - fix regulator enable count imbalance after suspend/resume Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 249/262] Input: samsung-keypad - properly state IOMEM dependency Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 250/262] HID: add mapping for KEY_DICTATE Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 251/262] HID: add mapping for KEY_ALL_APPLICATIONS Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 252/262] tracing/histogram: Fix sorting on old "cpu" value Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 253/262] tracing: Fix return value of __setup handlers Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 254/262] btrfs: fix lost prealloc extents beyond eof after full fsync Greg Kroah-Hartman
2022-03-07  9:19 ` [PATCH 5.15 255/262] btrfs: fix relocation crash due to premature return from btrfs_commit_transaction() Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 256/262] btrfs: do not WARN_ON() if we have PageError set Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 257/262] btrfs: qgroup: fix deadlock between rescan worker and remove qgroup Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 258/262] btrfs: add missing run of delayed items after unlink during log replay Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 259/262] btrfs: do not start relocation until in progress drops are done Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 260/262] Revert "xfrm: xfrm_state_mtu should return at least 1280 for ipv6" Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 261/262] proc: fix documentation and description of pagemap Greg Kroah-Hartman
2022-03-07  9:20 ` [PATCH 5.15 262/262] KVM: x86/mmu: Passing up the error state of mmu_alloc_shadow_roots() Greg Kroah-Hartman
2022-03-07 10:44 ` [PATCH 5.15 000/262] 5.15.27-rc1 review Holger Hoffstätte
2022-03-07 13:41   ` Holger Hoffstätte
2022-03-07 15:23     ` Greg Kroah-Hartman
2022-03-07 15:23   ` Greg Kroah-Hartman
2022-03-07 13:00 ` Naresh Kamboju
2022-03-07 15:25   ` Greg Kroah-Hartman
2022-03-07 16:17   ` Greg Kroah-Hartman
2022-03-07 14:26 ` Jon Hunter
2022-03-07 15:25   ` Greg Kroah-Hartman
2022-03-07 14:36 ` Guenter Roeck
2022-03-07 16:20   ` Greg Kroah-Hartman
2022-03-07 16:34     ` Guenter Roeck
2022-03-07 16:41       ` Greg Kroah-Hartman

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=20220307091705.823402348@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=jani.nikula@intel.com \
    --cc=jose.souza@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).