Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2530690imu; Mon, 19 Nov 2018 01:59:33 -0800 (PST) X-Google-Smtp-Source: AJdET5fi26K7+Vhmu7ttTnSAB/kg3Ntb5en94+iD2g/GLrCgv1+Jz3ucIIhMTp3GjI54hRLS0hQG X-Received: by 2002:a63:4246:: with SMTP id p67mr19315674pga.335.1542621573511; Mon, 19 Nov 2018 01:59:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542621573; cv=none; d=google.com; s=arc-20160816; b=LDJnFCUpeZMAXJyh/m497XOw+0W0PazVXJoHKsQP1k5houWCvf5kyVy3qtBCBupalT 9OKfh4hEJYIUKOBPZQK2Twphz+GX7nw+DFOPgGwvZwi6/akJAC1Lc0iDIebciVl5Y4KP HGCflS4+kUAHItipkvGnPs4E9J/F8mz/rqMj8mLKf19KyStPrrqTFuAKjmshUahLlkbJ wY1ODnFE4TxBp0/0gUVDdIytGy/NYvQi7hFR+4eh01Zf1d2k6ahYXx7QJBL7r6yp0DaA 2FczXGdZdFCkRmydu/OzbrTJZ2VWZHQa2QdHsQf3nIGabFUhF8KNXcPPftX4qjB+wGKI KY8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=fBpd1ayW9T1ckYD5iDe8Lvs3BCmuYLUXB4WYHdw3A/0=; b=evRatrmMyJi1ZjFkLuCaNTycbI4yuIxWv8mU+Y3fW0+8eNanfx5NgOnEBw3n8WUQs+ 9yPm5teLhKmfOxz45VKdnqWwQcpkPujUzSOPLbDIw4vsYs77lHiTZq5kUbt9wVUhY7L4 3XiZLa5UNgKuoIZIV0s7QomvCmCj3S/7sHE+oBaJBgtIKcaOlvzFILGfj2oxeUzdSzcp vgcMSHCnPe6z1ESace6RnVufNGR05Qyv1hWz9x3b31Pnlnwr1Q8s56IfaGC2Vl5gQUjC DDa4pQhSG4sZ8K0BbhA3TeEAowdIHTKCktCFJbtFCQcN6PDfavyt3p+Xcb6k6sNV2ftk E8+Q== 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p2si38581131pgr.133.2018.11.19.01.59.18; Mon, 19 Nov 2018 01:59:33 -0800 (PST) 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727631AbeKSUVc (ORCPT + 99 others); Mon, 19 Nov 2018 15:21:32 -0500 Received: from mail-ot1-f67.google.com ([209.85.210.67]:45212 "EHLO mail-ot1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727084AbeKSUVc (ORCPT ); Mon, 19 Nov 2018 15:21:32 -0500 Received: by mail-ot1-f67.google.com with SMTP id 32so26517109ota.12; Mon, 19 Nov 2018 01:58:24 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=fBpd1ayW9T1ckYD5iDe8Lvs3BCmuYLUXB4WYHdw3A/0=; b=pa4JSMIDCgCoMjdqKzvX6ijShf9tpEZyvhB6yWaskrzsd3xD+KSmS7S1MqpaRjvubx hG883KeiaIfAkiCVbSDha3mWT2H5Wo42IYKcOWsWOpHpiksB7cxajnOVTfSo7cin4OU/ KhfEdvgS7GyvjfpKoRKNWqs0iQrZoLik2VfMJ15k1CWy4LmCH6RAIr0J2ulJANlNeIn1 PRZxLTbyEg3SbdbBlmnGNMwTGIBF9tdt3D1SZ1mzcT58AQTHgWFaH22Hsvgtekehzr1Y zFzF49laBN1jn87N09P6Ric5MbJSdUWxglqZGHLefiOh+vklf2hZF/QI3LcHyngRZ1DW RXCw== X-Gm-Message-State: AGRZ1gKopM61GN7cczA69pD790qgw8UVSh9Zd08hMCoS73QEnLgU+EEo qHAMAXK5EkDMi7nk9LmLmbH03X8CY4fcDJtKdr8= X-Received: by 2002:a9d:5e8c:: with SMTP id f12mr13539827otl.343.1542621504252; Mon, 19 Nov 2018 01:58:24 -0800 (PST) MIME-Version: 1.0 References: <20181114224921.12123-2-keith.busch@intel.com> <20181114224921.12123-7-keith.busch@intel.com> In-Reply-To: <20181114224921.12123-7-keith.busch@intel.com> From: "Rafael J. Wysocki" Date: Mon, 19 Nov 2018 10:58:12 +0100 Message-ID: Subject: Re: [PATCH 6/7] acpi: Create subtable parsing infrastructure To: Keith Busch Cc: Linux Kernel Mailing List , ACPI Devel Maling List , Linux Memory Management List , Greg Kroah-Hartman , "Rafael J. Wysocki" , Dave Hansen , Dan Williams Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 14, 2018 at 11:53 PM Keith Busch wrote: > > Parsing entries in an ACPI table had assumed a generic header structure > that is most common. There is no standard ACPI header, though, so less > common types would need custom parsers if they want go walk their > subtable entry list. > > Create the infrastructure for adding different table types so parsing > the entries array may be more reused for all ACPI system tables. > > Signed-off-by: Keith Busch > --- > drivers/acpi/tables.c | 75 ++++++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 65 insertions(+), 10 deletions(-) > > diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c > index 61203eebf3a1..15ee77780f68 100644 > --- a/drivers/acpi/tables.c > +++ b/drivers/acpi/tables.c > @@ -49,6 +49,19 @@ static struct acpi_table_desc initial_tables[ACPI_MAX_TABLES] __initdata; > > static int acpi_apic_instance __initdata; > > +enum acpi_subtable_type { > + ACPI_SUBTABLE_COMMON, > +}; > + > +union acpi_subtable_headers { > + struct acpi_subtable_header common; > +}; > + > +struct acpi_subtable_entry { > + union acpi_subtable_headers *hdr; > + enum acpi_subtable_type type; > +}; > + > /* > * Disable table checksum verification for the early stage due to the size > * limitation of the current x86 early mapping implementation. > @@ -217,6 +230,45 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header) > } > } > > +static unsigned long __init > +acpi_get_entry_type(struct acpi_subtable_entry *entry) > +{ > + switch (entry->type) { > + case ACPI_SUBTABLE_COMMON: > + return entry->hdr->common.type; > + } > + WARN_ONCE(1, "invalid acpi type\n"); > + return 0; > +} > + > +static unsigned long __init > +acpi_get_entry_length(struct acpi_subtable_entry *entry) > +{ > + switch (entry->type) { > + case ACPI_SUBTABLE_COMMON: > + return entry->hdr->common.length; > + } > + WARN_ONCE(1, "invalid acpi type\n"); AFAICS this does a WARN_ONCE() on information obtained from firmware. That is not a kernel problem, so generating traces in that case is not a good idea IMO. Moreover, users can't really do much about this in the majority of cases, so a pr_info() message should be sufficient. And similarly below.