Received: by 2002:ac0:950c:0:0:0:0:0 with SMTP id f12csp3936858imc; Thu, 14 Mar 2019 08:32:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqxD/8xPgkYfr5ksb47S+9Zyv+mrFAQYzjouQ3CxIdjO+Dw8Ek6JAti0qgggDz423wvDGmaN X-Received: by 2002:a63:2907:: with SMTP id p7mr45537974pgp.161.1552577552804; Thu, 14 Mar 2019 08:32:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552577552; cv=none; d=google.com; s=arc-20160816; b=ZfjqI6exBP21qLVVQhvoGIw/0S16vAZJdk4/a8o1yaJsLNWVacuWB/nWgJ57dlHS4K cgxzZRjn2BzVMeiKC0Slj3sRs4c2VoPshPVeAgoZk5Hx6QGfphHOXurfzE0utjbdJwzM LVcyOTUka20Rm8z51F3uexlwKcKoZ2xA0I8ut4e4auu3S+U3SIVOdy5nTAO3alouZGvA hFYisJExwdnbSmHagMZQawEeOsHbD5CaH8ChcmyqTRDQnez2l4t94lBnJJPjgZoesEVu gc3hoOv9/7mKMi6XQJktTRjNYe52unz48fQa0bWSu2YRy08YY/U2VkGDwnqG7qyS4wY1 GjSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=oNdZMEyMVMDrYxVy+5dejh5acifYkenkpzG6nUXFL1Q=; b=w1/FuY/CnsJVJhmNV9fTrvsmi0/VyoQEGdhgMVjrIsOAdcAsjBhIviWWu8LcsxTL0j 6qSi3l0vEIygaPW6dYZTfl8/vXXKfp7qOPMd3Y3v2Ns0mLHA6atCVR1/b4ejvf/RTprW jZ+lk0XbHJT952s9NTD0RwUo+ty/m6CBiOIgNJApsqv7VP7hwxNVLuV6uJQ7Qb/+OOCs fqGCHkmRuCtDfcK5OjghP+/aw4MAU1SWe/yMO3gZhH3xMqvEweBf4Fhf8YaFf1M4w99O HcObEkM4Gyh8uCDzbEV9g4l/J+O8De73QhEBY04tL8MF9AUlDxq9n7KSkmVDO/rZsK85 4Ykw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bc12si13607227plb.13.2019.03.14.08.32.17; Thu, 14 Mar 2019 08:32:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726808AbfCNPbf (ORCPT + 99 others); Thu, 14 Mar 2019 11:31:35 -0400 Received: from mga18.intel.com ([134.134.136.126]:20352 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726564AbfCNPbe (ORCPT ); Thu, 14 Mar 2019 11:31:34 -0400 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Mar 2019 08:31:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,478,1544515200"; d="scan'208";a="155037962" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by fmsmga001.fm.intel.com with SMTP; 14 Mar 2019 08:31:29 -0700 Received: by stinkbox (sSMTP sendmail emulation); Thu, 14 Mar 2019 17:31:29 +0200 Date: Thu, 14 Mar 2019 17:31:29 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Benoit Parrot Cc: Daniel Vetter , Rob Clark , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jyri Sarha , Peter Ujfalusi , Boris Brezillon , Tomi Valkeinen , Laurent Pinchart Subject: Re: [Patch 1/1] drm/atomic: integrate private objects with suspend/resume helpers Message-ID: <20190314153129.GS3888@intel.com> References: <20190314134445.19260-1-bparrot@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190314134445.19260-1-bparrot@ti.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Mar 14, 2019 at 08:44:45AM -0500, Benoit Parrot wrote: > During a suspend cycle the atomic state is saved to be used during the > restore cycle. > > However the current state duplication logic does not duplicate private > objects. This leads to state inconsistencies at resume time. > > With private objects modeset lock now integrated, we can make sure that > private object state are properly saved and restored. > > Signed-off-by: Benoit Parrot > --- > drivers/gpu/drm/drm_atomic_helper.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 540a77a2ade9..b108021cc092 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -3189,6 +3189,7 @@ drm_atomic_helper_duplicate_state(struct drm_device *dev, > struct drm_connector_list_iter conn_iter; > struct drm_plane *plane; > struct drm_crtc *crtc; > + struct drm_private_obj *privobj; > int err = 0; > > state = drm_atomic_state_alloc(dev); > @@ -3218,6 +3219,16 @@ drm_atomic_helper_duplicate_state(struct drm_device *dev, > } > } > > + drm_for_each_privobj(privobj, dev) { > + struct drm_private_state *priv_state; > + > + priv_state = drm_atomic_get_private_obj_state(state, privobj); > + if (IS_ERR(priv_state)) { > + err = PTR_ERR(priv_state); > + goto free; > + } > + } > + > drm_connector_list_iter_begin(dev, &conn_iter); > drm_for_each_connector_iter(conn, &conn_iter) { > struct drm_connector_state *conn_state; > @@ -3325,12 +3336,17 @@ int drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state, > struct drm_connector_state *new_conn_state; > struct drm_crtc *crtc; > struct drm_crtc_state *new_crtc_state; > + struct drm_private_obj *privobj; > + struct drm_private_state *new_priv_state; > > state->acquire_ctx = ctx; > > for_each_new_plane_in_state(state, plane, new_plane_state, i) > state->planes[i].old_state = plane->state; > > + for_each_new_private_obj_in_state(state, privobj, new_priv_state, i) > + state->private_objs[i].old_state = privobj->state; > + > for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) > state->crtcs[i].old_state = crtc->state; Random order between crtc vs. plane vs. connector vs. priv is tickling my ocd nerve a bit. Otherwise looks sensible to me. Reviewed-by: Ville Syrj?l? > > -- > 2.17.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Ville Syrj?l? Intel