Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp7689948rwn; Wed, 14 Sep 2022 02:58:15 -0700 (PDT) X-Google-Smtp-Source: AA6agR7/v7UmKXM1OQi3MtgjuLQFAETdha6sfCQWM2gk0LnH/pPhR2eWowN7yWqND0p8Ax2QpZOZ X-Received: by 2002:a17:906:da86:b0:740:7120:c6e6 with SMTP id xh6-20020a170906da8600b007407120c6e6mr25047669ejb.44.1663149495058; Wed, 14 Sep 2022 02:58:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663149495; cv=none; d=google.com; s=arc-20160816; b=cjBIfE/830zfDS2STVgesHzrRP/MzAfqt+ZzP81wuHg/KpMfQ2XzMEscwZCJPp5RrI lG1vaNKKbTOYmCW8NC0rKnJcYbBLJoPmvGtDHXKzbDnm+2spEtWMjkDjxdKSK9B/eSnA 6BFEcH/MwjqYJG3u4q0fK8AYfaV509qfSGf4TGTlXINAUcpUBrVQJzAiBEyUT1xER9TH PGKnnc9iDRduoNCYkrztvRHKoLHpYv6x8YFTCt1wLan9bEW0dT0sc89JJDI4Yvbrpm8E mMmlGjPOMVMBEiOfohW0hBfy9qX/AyKn4qiGQrB/KiQIc71BxqYlz/AEim9kZ8I0NsZ7 xxvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to :content-language:references:cc:to:subject:from:user-agent :mime-version:date:message-id; bh=/T9c0FBdznuW3qBoAgt+7bs4xK9a1DAwZQciTfzy2WU=; b=Ocj5Q3IdEH+Why9PTKzzddZKzuHYplM+hscMb2ZmTJ1hISJU/XRazufXB6IHTp+hQ6 7rZ3f7EAoOKi+t/sONMxlDKlfYxvrkgTM4bw3TIr4ydVay4g10gZqp7+PjZYtREhvMXX Wi7Ijku6MAfXBydTGxzdVcCl/ljXSVpMzSVT8LEhCsiqVHGENXTPi1HtF6zbw0QX/Wec A5I7QXDRGzr5Qoi3gRClaA8oUPEJIuhlmxy0M8YZx8SyPWuYk+iRdt6qjo81I/5TSdK8 Y/uqWVPwUnXvnuCr/URkvGKnm8Cmu6Kr9KIsDPK3T9HQITThTAViyYftY6GDE48sMgUJ hyCg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f17-20020a0564021e9100b004512c76b599si14382223edf.126.2022.09.14.02.57.49; Wed, 14 Sep 2022 02:58:15 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230377AbiINJ0V (ORCPT + 99 others); Wed, 14 Sep 2022 05:26:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54290 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230335AbiINJ0C (ORCPT ); Wed, 14 Sep 2022 05:26:02 -0400 Received: from out29-197.mail.aliyun.com (out29-197.mail.aliyun.com [115.124.29.197]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D7E5F84ED0; Wed, 14 Sep 2022 02:15:35 -0700 (PDT) X-Alimail-AntiSpam: AC=CONTINUE;BC=0.07530093|-1;BR=01201311R111S72rulernew998_84748_2000303;CH=blue;DM=|CONTINUE|false|;DS=CONTINUE|ham_system_inform|0.0124995-0.0136961-0.973804;FP=0|0|0|0|0|-1|-1|-1;HT=ay29a033018047193;MF=kant@allwinnertech.com;NM=1;PH=DS;RN=6;RT=6;SR=0;TI=SMTPD_---.PFIoChB_1663146904; Received: from 192.168.220.136(mailfrom:kant@allwinnertech.com fp:SMTPD_---.PFIoChB_1663146904) by smtp.aliyun-inc.com; Wed, 14 Sep 2022 17:15:22 +0800 Message-ID: Date: Wed, 14 Sep 2022 17:15:04 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 From: Kant Fan Subject: Re: [RESEND] devfreq: governor: Save void *data in the governor userspace To: myungjoo.ham@samsung.com, kyungmin.park@samsung.com, cw00.choi@samsung.com Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, allwinner-opensource-support@allwinnertech.com References: <20220329091449.105308-1-kant@allwinnertech.com> Content-Language: en-US In-Reply-To: <20220329091449.105308-1-kant@allwinnertech.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.5 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY 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 On 3/29/2022 5:14 PM, Kant Fan wrote: > The member void *data in the structure devfreq can be overwrite > by governor_userspace. For example: > 1. The device driver assigned the devfreq governor to simple_ondemand > by the function devfreq_add_device() and init the devfreq member > void *data to a pointer of a static structure devfreq_simple_ondemand_data > by the function devfreq_add_device(). > 2. The user changed the devfreq governor to userspace by the command > "echo userspace > /sys/class/devfreq/.../governor". > 3. The governor userspace alloced a dynamic memory for the struct > userspace_data and assigend the member void *data of devfreq to > this memory by the function userspace_init(). > 4. The user changed the devfreq governor back to simple_ondemand > by the command "echo simple_ondemand > /sys/class/devfreq/.../governor". > 5. The governor userspace exited and assigned the member void *data > in the structure devfreq to NULL by the function userspace_exit(). > 6. The governor simple_ondemand fetched the static information of > devfreq_simple_ondemand_data in the function > devfreq_simple_ondemand_func() but the member void *data of devfreq was > assigned to NULL by the function userspace_exit(). > 7. The information of upthreshold and downdifferential is lost > and the governor simple_ondemand can't work correctly. > > The member void *data in the structure devfreq is designed for > a static pointer used in a governor and inited by the function > devfreq_add_device(). So if a governor want to use void *data > to do some other things, it must save void *data in the init() > function and restore void *data in the exit() function. > > Signed-off-by: Kant Fan > --- > drivers/devfreq/governor_userspace.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/devfreq/governor_userspace.c b/drivers/devfreq/governor_userspace.c > index ab9db7adb3ad..dbbb448dcbcf 100644 > --- a/drivers/devfreq/governor_userspace.c > +++ b/drivers/devfreq/governor_userspace.c > @@ -17,6 +17,7 @@ > struct userspace_data { > unsigned long user_frequency; > bool valid; > + void *saved_data; > }; > > static int devfreq_userspace_func(struct devfreq *df, unsigned long *freq) > @@ -91,6 +92,7 @@ static int userspace_init(struct devfreq *devfreq) > goto out; > } > data->valid = false; > + data->saved_data = devfreq->data; > devfreq->data = data; > > err = sysfs_create_group(&devfreq->dev.kobj, &dev_attr_group); > @@ -100,6 +102,8 @@ static int userspace_init(struct devfreq *devfreq) > > static void userspace_exit(struct devfreq *devfreq) > { > + struct userspace_data *data = devfreq->data; > + void *saved_data = data->saved_data; > /* > * Remove the sysfs entry, unless this is being called after > * device_del(), which should have done this already via kobject_del(). > @@ -108,7 +112,7 @@ static void userspace_exit(struct devfreq *devfreq) > sysfs_remove_group(&devfreq->dev.kobj, &dev_attr_group); > > kfree(devfreq->data); > - devfreq->data = NULL; > + devfreq->data = saved_data; > } > > static int devfreq_userspace_handler(struct devfreq *devfreq, Dear MyungJoo, Kyungmin & Chanwoo, Gently ping this issue... Does this patch has a chance to be accepted? This seems to be a bug in devfreq userspace governor, which affects the switching between governors -- When switching from userspace to ondemand, the ondemand governor would be invalid. If there's any question, please let me know. Thank you. -- Best Regards, Kant Fan