Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp4370617imw; Tue, 19 Jul 2022 05:31:14 -0700 (PDT) X-Google-Smtp-Source: AGRyM1twubJTidycxaoIY5GZg7kS/bxaYm6tHdS9xp9r3VrwvzgME45LjEQ8adeKpv6wfEJoPqTj X-Received: by 2002:a17:907:970b:b0:72b:5919:506c with SMTP id jg11-20020a170907970b00b0072b5919506cmr29527984ejc.241.1658233873852; Tue, 19 Jul 2022 05:31:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658233873; cv=none; d=google.com; s=arc-20160816; b=uzRmYyVggLZLUPBHOvettk0Nzt4703DVIKnWFkQFPu8m2+AuXXlBDZIQCx2Dxk20ln AcA1kYGEoVgbzgZX4qNfNnGIlWr8eSOwYM18h62ttKb5jLiDwF30RXL0pHm9Ye1w/z77 ti5rhURg+LpDtOy2kqHN0Njo4CTDEm3141VybVTRHGjzn2xrfaZ4XoZns0J0exB+fKGD 8rCWNCNcclfGIEYPuXAxDcOVMGeoedQlBoGeHxYHcCN+nE3ItMMGTNLIxIj2kulIcj7d SPwOHwfZOsQtkmjqEy3qc9SvVNI/tQWrdI2AbiXeV3VEUxVpL6YrtjgXPrPkjUzD0nsT pkCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=YWLbp7FGNy2mAMFLSLSriy01aeQlF94DMh/pd/TxxMY=; b=xdKikj7leFFY19TUl4xiwJjz+k57XmPcu5zFfPklrMGQjQdxyxJ6D7ck36si0blsby RI2HnwjcGLC6hot5tfoEV/J9BTX5YcbSFyctlOpy49lcmWWDU+pWE7AV30NKuhsOj3QU pxUefM8BaoUq+J69Oza9bMIfPxs7Q1Y2QawAvgS00XY7P70Mb6wltGuNMtJlL1Z3kzKz psqwhCng0bTrDRnp0Gs0Ugu9XPqpcxyjMZR3gm2keJTKdY9hkXiuhylubb+p1+p+okal XVWjKxcdb3/b6bE4mYF97d0jRSg9e7iQu5SesVnu2o1TB71FyqQ47OAxMnA+un0v29gw jV+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=djp2+Y4l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z10-20020a50eb4a000000b0043b0a9cf8bfsi12154356edp.490.2022.07.19.05.30.46; Tue, 19 Jul 2022 05:31:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=djp2+Y4l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235494AbiGSL4L (ORCPT + 99 others); Tue, 19 Jul 2022 07:56:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237233AbiGSLz4 (ORCPT ); Tue, 19 Jul 2022 07:55:56 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0742041D37; Tue, 19 Jul 2022 04:55:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 8C29AB81B25; Tue, 19 Jul 2022 11:55:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C52AEC341C6; Tue, 19 Jul 2022 11:55:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1658231751; bh=cbhrjjI2ACYwPNg073yABjQun3/N+aYHZNnGJjt2v9c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=djp2+Y4lM0NopfkflkRzNnlVby/ORFk75F1+j+pHLZn9c/IBBaUNxw/atWd8DbZoU db2zwxXeZSvZ1hwa0OiNnCDq+Ams/lBTijH8x64GrfhCR5D4OEcqu/TKlDbcnNzGly o1LlEwtHgIoMdzdO7yocZXR7Aavr60KM2pl/SgoI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Stephan Gerhold , "Michael S. Tsirkin" , Sasha Levin Subject: [PATCH 4.9 14/28] virtio_mmio: Add missing PM calls to freeze/restore Date: Tue, 19 Jul 2022 13:53:52 +0200 Message-Id: <20220719114457.614602734@linuxfoundation.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220719114455.701304968@linuxfoundation.org> References: <20220719114455.701304968@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stephan Gerhold [ Upstream commit ed7ac37fde33ccd84e4bd2b9363c191f925364c7 ] Most virtio drivers provide freeze/restore callbacks to finish up device usage before suspend and to reinitialize the virtio device after resume. However, these callbacks are currently only called when using virtio_pci. virtio_mmio does not have any PM ops defined. This causes problems for example after suspend to disk (hibernation), since the virtio devices might lose their state after the VMM is restarted. Calling virtio_device_freeze()/restore() ensures that the virtio devices are re-initialized correctly. Fix this by implementing the dev_pm_ops for virtio_mmio, similar to virtio_pci_common. Signed-off-by: Stephan Gerhold Message-Id: <20220621110621.3638025-2-stephan.gerhold@kernkonzept.com> Signed-off-by: Michael S. Tsirkin Signed-off-by: Sasha Levin --- drivers/virtio/virtio_mmio.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index f62da3b7c27b..d69f0c5135ff 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c @@ -66,6 +66,7 @@ #include #include #include +#include #include #include #include @@ -489,6 +490,25 @@ static const struct virtio_config_ops virtio_mmio_config_ops = { .bus_name = vm_bus_name, }; +#ifdef CONFIG_PM_SLEEP +static int virtio_mmio_freeze(struct device *dev) +{ + struct virtio_mmio_device *vm_dev = dev_get_drvdata(dev); + + return virtio_device_freeze(&vm_dev->vdev); +} + +static int virtio_mmio_restore(struct device *dev) +{ + struct virtio_mmio_device *vm_dev = dev_get_drvdata(dev); + + return virtio_device_restore(&vm_dev->vdev); +} + +static const struct dev_pm_ops virtio_mmio_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(virtio_mmio_freeze, virtio_mmio_restore) +}; +#endif /* Platform device */ @@ -730,6 +750,9 @@ static struct platform_driver virtio_mmio_driver = { .name = "virtio-mmio", .of_match_table = virtio_mmio_match, .acpi_match_table = ACPI_PTR(virtio_mmio_acpi_match), +#ifdef CONFIG_PM_SLEEP + .pm = &virtio_mmio_pm_ops, +#endif }, }; -- 2.35.1