Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp4626191imm; Mon, 14 May 2018 10:09:47 -0700 (PDT) X-Google-Smtp-Source: AB8JxZogJzUj1j1Z/rypi2ZQ89RwVlhZJDeY8rmMlwGNQN2zVVIy8KDkhUDvdzAA/RsQH3e1Bdbc X-Received: by 2002:a17:902:6b0c:: with SMTP id o12-v6mr10651130plk.159.1526317787602; Mon, 14 May 2018 10:09:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526317787; cv=none; d=google.com; s=arc-20160816; b=EW/n5CIXlhZP8HOt/J7Tnhv/uOpTRfyhopFrrv0D3VExj93E5kU63aVvq7i60X55Wq V4ukxPJz1ho9ntcdPPH5Pe0CYf1DjzXlNB6A9HxFn3iQ2zAl32uuFEQ4Qzcvlw3OZkMj 3mGawZmbCeUGJOzNyxoRsk4aynIqFQrYTt09byX6zrRUAeHL1ZJ7VRP/ZnH9gu4JltBZ F1THa3SJrRzMG8LvZT2TKuuf7VigzcwKMH7MGxcVKxG6bCN1aqjhJZVbFl75+xFkkU1e fdT7q/fb15QLf8J9DqX/DtSu1u4N81JGrM1H7OOw4xv7RtxtEhGMetyETflWBBvku9CB GCMQ== 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-disposition:mime-version:references:message-id:subject:cc :to:from:date:dmarc-filter:dkim-signature:dkim-signature :arc-authentication-results; bh=mYMvTlQkOW/QiEPaEzodEH0/qOs1eVEvKSBB2qdl0Xo=; b=MjZBMwZ7kiRe8l6Qg1jb03469rU3MLyGgW2GiAkr0lrXlo9ScahH2d2+kRjHV+HhZC eVwk/Wj77vpL/yXL/GpWIdWZ1NuDBcAiuzE/4aRlkRjY2Ulw5wyfF9E8HD70tf13giPq aiz5qwuFY/Wk60kVWxlx7sIGbROJyOIZU4c71IZ7eAQNEZDl4o4dOGT2smUZXMPobjdK 0rnFIDUQkn87PAc5BE8HoURQVxrUk1KOCr7pkEJSJWt92UTx0NtoIiZ+fNk16hid+6i7 vE8XwnJhqz56Pe0WzT+s44k8zcuYhagyHrkOHwyE6HR7jDSg+393MS84PRmLgS44svv6 L5sg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=Z6EV5WZ/; dkim=pass header.i=@codeaurora.org header.s=default header.b=O3BLXEnx; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h185-v6si9767621pfe.332.2018.05.14.10.09.33; Mon, 14 May 2018 10:09:47 -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; dkim=pass header.i=@codeaurora.org header.s=default header.b=Z6EV5WZ/; dkim=pass header.i=@codeaurora.org header.s=default header.b=O3BLXEnx; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754286AbeENPAO (ORCPT + 99 others); Mon, 14 May 2018 11:00:14 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:53364 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752898AbeENPAK (ORCPT ); Mon, 14 May 2018 11:00:10 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 16B7560790; Mon, 14 May 2018 15:00:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526310010; bh=nRYODSXmFKeuvGqYkaFaTlymz2JplYsrakXXiLWndbs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Z6EV5WZ/xbgTU2qzzT19HlImbZXoXyf3nz7D/TXL2ivbyh+vnr1Hcf79j2RhzMUeg lkpC0x7/XlbeD4HE685FfScwCC7pkxpz8s+YHQ69nelYHvrjoLbzOcZdwI3dY57Irn q7Ly4YUlE5qv6F3c8H15y9i8cOyFbUtwYVomGnFI= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from localhost (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: ilina@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id BB67360131; Mon, 14 May 2018 15:00:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526310009; bh=nRYODSXmFKeuvGqYkaFaTlymz2JplYsrakXXiLWndbs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=O3BLXEnxLk/gZpLnsAZ1bCxScLtdF3BdU6XVSQu9stNx/0npeu2xFJBkbAdRny8Yh 3rMLYAlHI5LxRAs4DmO0nGvrTdz4wkG+jSj3vhZ/hDzGMbCdf/+JjPaByGmjq3mkvC 9EDXTppVby31YkmCdNirQ4vFGe46YGNa4hKikmyw= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org BB67360131 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=ilina@codeaurora.org Date: Mon, 14 May 2018 09:00:08 -0600 From: Lina Iyer To: Doug Anderson Cc: Andy Gross , David Brown , linux-arm-msm@vger.kernel.org, "open list:ARM/QUALCOMM SUPPORT" , Rajendra Nayak , Bjorn Andersson , LKML , Stephen Boyd , Evan Green Subject: Re: [PATCH v7 04/10] drivers: qcom: rpmh: add RPMH helper functions Message-ID: <20180514150008.GA25503@codeaurora.org> References: <20180502193749.31004-1-ilina@codeaurora.org> <20180502193749.31004-5-ilina@codeaurora.org> <20180511150611.GA30504@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.5 (2018-04-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 11 2018 at 14:14 -0600, Doug Anderson wrote: >Hi, > >On Fri, May 11, 2018 at 8:06 AM, Lina Iyer wrote: >>> As I've said I haven't reviewed RPMh in any amount of detail and so >>> perhaps I don't understand something. >>> >>> OK, I dug a little more and coded up something for you. Basically >>> you're doing a whole bunch of iteration / extra work here to try to >>> come up with a way to associate an extra bit of data with each "struct >>> rsc_drv". Rather than that, just add an extra field into "struct >>> rsc_drv". Problem solved. >>> >>> See http://crosreview.com/1054646 for what I mean. >>> >> I tried to avoid such pointer references and keep it object oriented >> with this approach. I agree that we run through a list of 2 (at the max) >> RSC to get the drv* from the rpmh_ctrlr. It is not going to be >> expensive. > >Even if you wanted to keep things "object oriented" then IMHO your >code still should change. Sure, it's not computationally expensive to >iterate through this list, but it adds an extra level of complexity >that doesn't seem justified. > >If you _really_ needed an abstraction barrier then at least add a >"void *client_data" to "struct rsc_drv.c". At least you'd get rid of >the ugly global list and store your pointer directly in the correct >structure rather than creating an external entity. Now it becomes >100% obvious that there is exactly 1 "struct rpmh_ctrlr" for each >controller. ...but IMO there's enough intertwining between "rpmh.c" >and "rpmh-rsc.c" that it would just be a waste because now you'd need >to do extra memory allocation and freeing. ...and if you just >allocated the pointer in get_rpmh_ctrlr() it would also seem non-ideal >because this one-time allocation (that affects _all_ RPMh clients) >happens whenever one client happens to do the first access. This is >one-time init so it makes sense to do it at init time. > >I say that there's intertwining between "rpmh.c" and "rpmh-rsc.c" >because both C files call directly into one another and have intimate >knowledge of how the other works. They aren't really separate things. >Specifically I see that "rpmh-rsc" directly calls into "rpmh.c" when >it calls rpmh_tx_done(), and of coruse "rpmh-rsc.c" directly calls >into "rpmh.c". > > >OK, so I've been browsing through the source code more so I can be a >little more informed here. As far as I can tell "rpmh.c"'s goal is: > >1. Put a simpler API atop "rpmh-rsc.c". ...but why not just put that >API directly into "rpmh-rsc.c" anyway? If there was someone that >needed the more complex API then having a "simpler" wrapper makes >sense, but that's not the case, is it? > >2. Add caching atop "rpmh-rsc" > > >I'll respond to some of your other patches too, but I think that the >amount of code for caching is not very much. I don't see the benefit >of trying to split the code into two files. Put them into one and >then delete all the extra code you needed just the try to maintain >some abstraction. > > >> Another things this helps with is that, if the driver is not a child of >> the RSC nodes in DT, then the drvdata of the parent would not a RSC node >> and accessing that would result in a crash. This offers a cleaner exit >> path for the error case. > >Why would the driver not be a child of the RSC nodes? That's kinda >like saying "if you try to instantiate an i2c device as a platform >device then its probe will crash". Yeah, it will. Doctor, it hurts >if I poke myself in my eye with this sharp stick, do you have any >medicine that can help fix that? > > >>>>> I'll try to dig into this more so I could just be confused, but in >>>>> general it seems really odd to have a spinlock and something called a >>>>> "cache" at this level. If we need some sort of mutual exclusion or >>>>> caching it seems like it should be stored in memory directly >>>>> associated with the RPMh device, not some external global. >>>>> >>>> The idea behind the locking is not to avoid the race between rpmh.c and >>>> rpmh-rsc.c. From the DT, the devices that are dependent on the RSCs are >>>> probed following the probe of the controller. And init is not that we are >>>> worried about. >>>> The condition here is to prevent the rpmh_rsc[] from being modified >>>> concurrently by drivers. >>> >>> >>> OK, I see the point of the locking now, but not the list still. >>> Sounds like Matthias agrees with me that the list isn't useful. Seems >>> like you should squash my patch at http://crosreview.com/1042883 into >>> yours. >>> >> I saw your approach. I am okay with it for your tree, > >I'm not okay with it for the Chrome OS tree. We need to match >upstream, not fork for style reasons. I'd rather take a driver that I >think it overly complex but matches upstream than a private driver. > > >> my approach comes >> out of experiences in qcom platforms and how things tend to shape up in >> the future. I would want you to consider my reasoning as well, before we >> go forward. > >I suppose we can get advice from others who have worked in qcom >platforms and see what they think. My opinions come out of years of >experience working with Linux drivers, so I guess we both have some >experience under our belts that we're trying to leverage. > Doug, I am sorry it came out the wrong way. I meant to say, knowing qualcomm platforms, as it has been in the past, we need this flexibility. Things change with hardware variants just a wee bit that it doesn't warrant a new interface, just a new driver or part of it to be re-written. Keeping code separate out like this helps us maintain the driver better. Thanks for your reviews. I will try to address your comments before my vacation, but I doubt I will get to all of it. Thanks, Lina