Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp2558150imm; Wed, 16 May 2018 15:05:50 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqJ96VD2SsIsstJjxhA9grKFd5uzn3NbB4gznS4KbpMP9ixdAF3XKa7SXa1zWYuLZEVOm3r X-Received: by 2002:a17:902:8f94:: with SMTP id z20-v6mr2642946plo.391.1526508349981; Wed, 16 May 2018 15:05:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526508349; cv=none; d=google.com; s=arc-20160816; b=qe0YTi7HTiFBk6s7WSk4/sXV7PyeCVCnqzwf2pJrHlxg1VaPMHuwZKivb2Y1nM0mKU 3BOSqxen/fwD06SGKo7Ge4E4cU+pOpuo7rS2fwDsjWcxhbyguUurKKdtJGg0HbafW4iF ctQ6+sm0EN0IBinnKLWh4mVzvQqU7yGlz4VGR15T2+xiHA+SrAo5JBaB65B6STqDXjLk Qmx3kWBX+3Wxaqf1RsfzRkmF8/Vvr8Qs1P6xdXfRJzJB9Gl5fE1wf5B467O9h1B1EXzj ENQMAMuTzMNvE1SCsI6TE62bDXoA+i5ABlsSAq/4hIeugFzZzh61Dqz5yfJCPruBGd0Y WCbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:from:references:cc:to:subject:reply-to :arc-authentication-results; bh=0gp129rBfSyceNJCPFAlZWqpAp0AL7+64b7pzKdx3a4=; b=csPU+x0SJyipH4lpOI7tYIyAPDGN2dYm4oOf/iT2NI+bhrmkCdY8QLrJ/P6jsObTLa Yg+1egawl9i4VB/DhbsXTM90A1CIGdLGnGVDyOOCozy5WuvzF90RhIraPdhArxMIZWt4 cFZPJc3/yVcl+d9nZdDg5/Pi13seJ3dXt2VaJw5LcBmh7Y6iIilSfPVZr32ZK+IUWsCv td4BsIoGw88drMaEa80sP0YVW2zbZMev62xO0bHT/M9NJuOnlJUSpnBaUjmwV2Css+0d MkhmSvgJ7W6yeUsmHFOqkK7P7DscApZYOhYqGaiA1NBnAIqhxRVZZtG2EBcnAZGmjBmA FlTQ== 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=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 89-v6si3361914plc.59.2018.05.16.15.05.35; Wed, 16 May 2018 15:05:49 -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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751468AbeEPWDn (ORCPT + 99 others); Wed, 16 May 2018 18:03:43 -0400 Received: from mail-it0-f68.google.com ([209.85.214.68]:56268 "EHLO mail-it0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750953AbeEPWDl (ORCPT ); Wed, 16 May 2018 18:03:41 -0400 Received: by mail-it0-f68.google.com with SMTP id 144-v6so5902848iti.5 for ; Wed, 16 May 2018 15:03:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:subject:to:cc:references:from :organization:message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=0gp129rBfSyceNJCPFAlZWqpAp0AL7+64b7pzKdx3a4=; b=QGHvHLqllsIBCXeY2pj6M0VmrFx+jYD8erhNSZy4GDYKDfSV9NUr0p6wcF+TIlbLG+ seSFzZw954NPuT7Cy6aAb+odfcUeYrgiHJOftbpxGWD6kmzS5IsCpZMyZhv7RMrkfOEx fZ0AbQ5qwC7wvOLdLZZbJzHlg7Nfy5EI0pb2WfwPnRwBZe4e7VW9SGiKT7TF/gc+ESVG WCD7FC+ti6xPeej/w447PDLdrrbj7zGJ0A1gQYt0AZtXBHhmqVec72aog7F2gvZqwm34 O6OOdtr43ipj3d8s6p/Ulvs21g7GSpG5ZDs83dz2qka2F+/Toq2WUwPUmDPdmzktZ85w YyXg== X-Gm-Message-State: ALKqPwdpuJ5NkESMDJQ3/44e7gptnLmDEWGJeUR7Ehett9a8mS+smzVZ WWvZUtfJVVFzPcsi2Xx0pbQt3g== X-Received: by 2002:a6b:6815:: with SMTP id d21-v6mr3037610ioc.293.1526508220924; Wed, 16 May 2018 15:03:40 -0700 (PDT) Received: from fidelio.ahs3 (c-67-165-232-89.hsd1.co.comcast.net. [67.165.232.89]) by smtp.gmail.com with ESMTPSA id n7-v6sm1803963ioc.75.2018.05.16.15.03.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 May 2018 15:03:39 -0700 (PDT) Reply-To: ahs3@redhat.com Subject: Re: [PATCH v3 3/3] mailbox: ACPI: erroneous error message when parsing the ACPI PCCT To: "Rafael J. Wysocki" Cc: "Prakash, Prashanth" , ACPI Devel Maling List , Linux Kernel Mailing List , Jassi Brar , "Rafael J . Wysocki" , Len Brown References: <20180501003907.4322-1-ahs3@redhat.com> <20180501003907.4322-4-ahs3@redhat.com> <17197481-bd76-f2ec-9d6e-4cd0d94b9265@codeaurora.org> From: Al Stone Organization: Red Hat, Inc. Message-ID: <8eb33906-070b-4fb0-1f1e-00c40507c457@redhat.com> Date: Wed, 16 May 2018 16:03:38 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/15/2018 02:00 AM, Rafael J. Wysocki wrote: > On Tue, May 15, 2018 at 12:49 AM, Al Stone wrote: >> On 05/14/2018 03:04 PM, Prakash, Prashanth wrote: >>> >>> >>> On 4/30/2018 6:39 PM, Al Stone wrote: >>>> There have been multiple reports of the following error message: >>>> >>>> [ 0.068293] Error parsing PCC subspaces from PCCT >>>> >>>> This error message is not correct. In multiple cases examined, the PCCT >>>> (Platform Communications Channel Table) concerned is actually properly >>>> constructed; the problem is that acpi_pcc_probe() which reads the PCCT >>>> is making the assumption that the only valid PCCT is one that contains >>>> subtables of one of two types: ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE or >>>> ACPI_PCCT_TYPE_HW_REDUCED_TYPE2. The number of subtables of these >>>> types are counted and as long as there is at least one of the desired >>>> types, the acpi_pcc_probe() succeeds. When no subtables of these types >>>> are found, regardless of whether or not any other subtable types are >>>> present, the error mentioned above is reported. >>>> >>>> In the cases reported to me personally, the PCCT contains exactly one >>>> subtable of type ACPI_PCCT_TYPE_GENERIC_SUBSPACE. The function >>>> acpi_pcc_probe() does not count it as a valid subtable, so believes >>>> there to be no valid subtables, and hence outputs the error message. >>>> >>>> An example of the PCCT being reported as erroneous yet perfectly fine >>>> is the following: >>>> >>>> Signature : "PCCT" >>>> Table Length : 0000006E >>>> Revision : 05 >>>> Checksum : A9 >>>> Oem ID : "XXXXXX" >>>> Oem Table ID : "XXXXX " >>>> Oem Revision : 00002280 >>>> Asl Compiler ID : "XXXX" >>>> Asl Compiler Revision : 00000002 >>>> >>>> Flags (decoded below) : 00000001 >>>> Platform : 1 >>>> Reserved : 0000000000000000 >>>> >>>> Subtable Type : 00 [Generic Communications Subspace] >>>> Length : 3E >>>> >>>> Reserved : 000000000000 >>>> Base Address : 00000000DCE43018 >>>> Address Length : 0000000000001000 >>>> >>>> Doorbell Register : [Generic Address Structure] >>>> Space ID : 01 [SystemIO] >>>> Bit Width : 08 >>>> Bit Offset : 00 >>>> Encoded Access Width : 01 [Byte Access:8] >>>> Address : 0000000000001842 >>>> >>>> Preserve Mask : 00000000000000FD >>>> Write Mask : 0000000000000002 >>>> Command Latency : 00001388 >>>> Maximum Access Rate : 00000000 >>>> Minimum Turnaround Time : 0000 >>>> >>>> To fix this, we count up all of the possible subtable types for the >>>> PCCT, and only report an error when there are none (which could mean >>>> either no subtables, or no valid subtables), or there are too many. >>>> We also change the logic so that if there is a valid subtable, we >>>> do try to initialize it per the PCCT subtable contents. This is a >>>> change in functionality; previously, the probe would have returned >>>> right after the error message and would not have tried to use any >>>> other subtable definition. >>>> >>>> Tested on my personal laptop which showed the error previously; the >>>> error message no longer appears and the laptop appears to operate >>>> normally. >>>> >>>> Signed-off-by: Al Stone >>>> Cc: Jassi Brar >>>> Cc: Rafael J. Wysocki >>>> Cc: Len Brown >>>> --- >>>> drivers/mailbox/pcc.c | 96 +++++++++++++++++++++++++++++++++------------------ >>>> 1 file changed, 63 insertions(+), 33 deletions(-) >>>> >>>> diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c >>>> index 3ef7f036ceea..72af37d7e95e 100644 >>>> --- a/drivers/mailbox/pcc.c >>>> +++ b/drivers/mailbox/pcc.c >>>> @@ -372,13 +372,37 @@ static const struct mbox_chan_ops pcc_chan_ops = { >>>> .send_data = pcc_send_data, >>>> }; >>>> >>>> +/* >>>> + * >>>> + * count_pcc_subspaces -- Count PCC subspaces not used in reduced HW systems. >>>> + * @header: Pointer to the ACPI subtable header under the PCCT. >>>> + * @end: End of subtable entry. >>>> + * >>>> + * Return: If we find a PCC subspace entry that is one of the types used >>>> + * in reduced hardware systems, return -EINVAL. Otherwise, return 0. >>>> + * >>>> + * This gets called for each subtable in the PCC table. >>>> + */ >>>> +static int count_pcc_subspaces(struct acpi_subtable_header *header, >>>> + const unsigned long end) >>>> +{ >>>> + struct acpi_pcct_subspace *pcct_ss = (struct acpi_pcct_subspace *) header; >>>> + >>>> + if ((pcct_ss->header.type <= ACPI_PCCT_TYPE_RESERVED) && >>>> + (pcct_ss->header.type != ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE) && >>>> + (pcct_ss->header.type != ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2)) >>>> + return 0; >>>> + >>>> + return -EINVAL; >>>> +} >>>> + >>>> /** >>>> - * parse_pcc_subspace - Parse the PCC table and verify PCC subspace >>>> - * entries. There should be one entry per PCC client. >>>> + * parse_pcc_subspaces -- Count PCC subspaces used only in reduced HW systems. >>>> * @header: Pointer to the ACPI subtable header under the PCCT. >>>> * @end: End of subtable entry. >>>> * >>>> - * Return: 0 for Success, else errno. >>>> + * Return: If we find a PCC subspace entry that is one of the types used >>>> + * in reduced hardware systems, return 0. Otherwise, return -EINVAL. >>>> * >>>> * This gets called for each entry in the PCC table. >>>> */ >>>> @@ -393,10 +417,8 @@ static int parse_pcc_subspace(struct acpi_subtable_header *header, >>>> if ((pcct_ss->header.type != >>>> ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE) >>>> && (pcct_ss->header.type != >>>> - ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2)) { >>>> - pr_err("Incorrect PCC Subspace type detected\n"); >>>> + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2)) >>>> return -EINVAL; >>>> - } >>>> } >>>> >>>> return 0; >>> Can't we combine parse_pcc_subspace and count_pcc_subspaces into a >>> single function? parse_pcc_subspace can return 0 for supported subspace >>> types and -EINVAL for others. >> >> I did think about that. The issue is that we have subspaces that are only >> valid in reduced hardware systems, and subspaces that are not. It might make >> sense to use different names, as in 'count_reduced_hw_subspaces()' and >> 'count_general_subspaces()' (or something like those) but we do have the two >> separate classes and hardware belonging to each of those classes. >> >> That being said, you raise a good point: this would only be useful if the >> mailbox code needed to know the classes of subspaces were different; I saw >> no such code but I could have missed it. If you're aware of any such cases, >> let me know. Otherwise, I'll combine the two counting routines and test it. >> >>> The limitation on number of subspaces(max = 256) applies to all types of PCC >>> subspaces (see Table 14-351 in ACPI 6.2). The MAX_PCC_SUBSPACES check in >>> parse_pcc_subspace seems invalid as pcc_mbox_ctrl.num_chans will not be >>> initialized yet at that moment. >> >> Good catch. Thanks. That test was there prior to my patches, but I'll pull >> it out. >> >>> Given above, I think it is probably better to update parse_pcc_subspace to >>> only check for a valid PCC subspace type. The check to make sure overall count >>> of subspace is less than 256 is already present following the call to >>> acpi_table_parse_entries_array(). >>> >>> -- >>> Thanks, >>> Prashanth >>> >> >> Thanks, Prashanth. >> >> Rafael: do you want me to just re-send this patch or the whole series? Either >> way works for me; what's easiest for you since the first two have been applied? > > Just this patch, please. > > I've applied the other two already. > > Thanks, > Rafael > An FYI: I tested v4 of this patch with and without patch 2/3 of this set (which has already been withdrawn); both cases removed the mostly incorrect error message. -- ciao, al ----------------------------------- Al Stone Software Engineer Red Hat, Inc. ahs3@redhat.com -----------------------------------