Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp4232855ybp; Mon, 7 Oct 2019 05:30:44 -0700 (PDT) X-Google-Smtp-Source: APXvYqx1ZaLJVmSOvP1tbOEdoJL8yRxwt3ftQ5s5+xser3/r6kaXPAkC+ti7bCaio6P7nj3Lh9Jd X-Received: by 2002:a17:906:8041:: with SMTP id x1mr23816265ejw.132.1570451444094; Mon, 07 Oct 2019 05:30:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570451444; cv=none; d=google.com; s=arc-20160816; b=O3O8Td4tCt1eCXAI+smErhmemBIDMNFhudB+1H63EDc5DLzRf5E1FwrdsdFydcNWvt 0rWvjkJkmWWiKmeuLDxDTC5jVsuDa+5Gd7E+ZCZN62p3uqyvxONrRMc0JS8H5tNSA43a YKmCH+75+OBZwBdC5IGSeAiG7pZP9VT92bhgVxBh6GrkBssEnN+ZP9qRi1mk0FGqPMTK kiJ9oe87dRCmmhcoIkjhJjodE+x44zSE7q1zazG9hMgtRC03pGMU97xDHJ/xWhku3IYL MNzTvmHlCOQfjmyfa18a1YANLzlXObC4wYMgn71UQ8VhE4vufMZ+UFEaZuOF6TiZKDkH 3O0g== 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:from:references:cc:to:subject:dkim-signature; bh=Vo/eOLaIbA5/xys1EhkAUTChVY65F/rc67s1TRj6toM=; b=DxxnU5du5bY5IrMBvjnvCbQcUmfN5fFd4zxMteMJWC/HO1B/fykb0R4EE5aqdGqf7Z A1NzLdYBXQ6SQr1GyMvQlRLFb8pVwPF8/up1xeuGHEz3+sB4KqOSSA88N3Ltb6cgvWJ5 t15+/KqxOUjmPVaBWaPBEyg8XHwTddp39dwOKLcFCaitzRj2Q3kvAVDdMrzVJD5rWJhw i9FG/IUx8Bbo1PeFI3wbVoYA6eRciwi17t4Eu1X7oxw0NHEkDKzBHot1bODmtJD0wzGM GoQ0JHe7eu2/8iM/H/RlH1ioKRdutrsCZWPMcYcOyo2pcVjiC7eU4N22xVhtQ5yFnTLk Nj3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=lmzJINmt; 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 x14si7924777edq.49.2019.10.07.05.30.20; Mon, 07 Oct 2019 05:30:44 -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=fail header.i=@gmail.com header.s=20161025 header.b=lmzJINmt; 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 S1727697AbfJGM1y (ORCPT + 99 others); Mon, 7 Oct 2019 08:27:54 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:33255 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727467AbfJGM1y (ORCPT ); Mon, 7 Oct 2019 08:27:54 -0400 Received: by mail-pf1-f194.google.com with SMTP id q10so8600159pfl.0 for ; Mon, 07 Oct 2019 05:27:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Vo/eOLaIbA5/xys1EhkAUTChVY65F/rc67s1TRj6toM=; b=lmzJINmtvYtOTelPHr4Qun2GMR4udVEweNf38iCm0MkKZ/AEuIkJVu98CqLUvahfwb xwButHhOOdSTlk74Ca8TE3QPhxMphnKWOHfQ6idYiMgYZyJlOcqp8/YLs9MlKPQfkLFB 9zijhJAUUS72y4LhVtG1URiFq3d8WT5kQuzQPFwdSTNG3TIdRr8+TVYkK8GQYY796hIu yCr+vGZYzxGGN57+ORwZPRVJHQQ2nO/HHUk+91E0ZWrbNJaTBHFuEcGeaIGD6x1+lRz+ 6dEDgRkczOh2oWYEuGBLA4KXSWGsdzqFuu5HbijpbfMvO4YChCFVu61sxf4Z7MO2+uzR WlFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Vo/eOLaIbA5/xys1EhkAUTChVY65F/rc67s1TRj6toM=; b=N2URpRggRSLci8TeFiC9vB8/sT0gmQocaTRfY40KCRPJp6lSETR6agNYSbx98kxwVP PVcSRB10/lS3o+Ab4PPCr5+Y98oceQh/o+xgluzDyBwCaqdu3BtGNNpCyrZzpHCFhVsA wFwjJCYDbbbol+enM3LuJiN8sWhLr6ab/FWUcRY0L7imXYF7qSjDKUJlOAF/I4JrXjhC tc8QZqkK1FFYQxbXRCeXqfYDxqgHp4SxYPro30ESLG6che7+T0dB+G1qqMA8IGbVvZaK w8UBy01P7vuuzLRxVxVTJrPM1yQtIsiYpR8OJoD8+jAkQycOl+s6yPAONd6Vvn4aaQgb LZ4Q== X-Gm-Message-State: APjAAAWP+SILtjCa6zxIHRxDx+W2QJry3e+toSyHRIMV+dFx/49+Jxvj AyBZIkZXa6r249U/uU8wjio= X-Received: by 2002:a63:fb55:: with SMTP id w21mr30311545pgj.267.1570451273560; Mon, 07 Oct 2019 05:27:53 -0700 (PDT) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id f185sm18467820pfb.183.2019.10.07.05.27.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Oct 2019 05:27:52 -0700 (PDT) Subject: Re: [PATCH] firmware: vpd: Add an interface to read VPD value To: Tzung-Bi Shih , Cheng-Yi Chiang Cc: Linux Kernel Mailing List , ALSA development , Hung-Te Lin , Stephen Boyd , Greg Kroah-Hartman , Sean Paul , Mark Brown , dgreid@chromium.org, Tzung-Bi Shih References: <20191007071610.65714-1-cychiang@chromium.org> From: Guenter Roeck Message-ID: Date: Mon, 7 Oct 2019 05:27:51 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed 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 10/7/19 1:03 AM, Tzung-Bi Shih wrote: > On Mon, Oct 7, 2019 at 3:16 PM Cheng-Yi Chiang wrote: >> >> Add an interface for other driver to query VPD value. >> This will be used for ASoC machine driver to query calibration >> data stored in VPD for smart amplifier speaker resistor >> calibration. >> >> Signed-off-by: Cheng-Yi Chiang >> --- >> drivers/firmware/google/vpd.c | 16 ++++++++++++++++ >> include/linux/firmware/google/google_vpd.h | 18 ++++++++++++++++++ >> 2 files changed, 34 insertions(+) >> create mode 100644 include/linux/firmware/google/google_vpd.h >> >> diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c >> index db0812263d46..71e9d2da63be 100644 >> --- a/drivers/firmware/google/vpd.c >> +++ b/drivers/firmware/google/vpd.c >> @@ -65,6 +65,22 @@ static ssize_t vpd_attrib_read(struct file *filp, struct kobject *kobp, >> info->bin_attr.size); >> } >> >> +int vpd_attribute_read_value(bool ro, const char *key, >> + char **value, u32 value_len) FWIW, I don't think the "_value" in this function name adds any value, unless there is going to be some other read function. The API should be documented, and state clearly that the caller must release the returned value. >> +{ >> + struct vpd_attrib_info *info; >> + struct vpd_section *sec = ro ? &ro_vpd : &rw_vpd; >> + >> + list_for_each_entry(info, &sec->attribs, list) { >> + if (strcmp(info->key, key) == 0) { >> + *value = kstrndup(info->value, value_len, GFP_KERNEL); > > Value is not necessary a NULL-terminated string. > kmalloc(info->bin_attr.size) and memcpy(...) would make the most > sense. > kmemdup() ? > The value_len parameter makes less sense. It seems the caller knows > the length of the value in advance. > Suggest to change the value_len to report the length of value. I.e. > *value_len = info->bin_attr.size; > > Also please check the return value for memory allocation-like > functions (e.g. kstrndup, kmalloc) so that *value won't be NULL but > the function returned 0. > >> + return 0; >> + } >> + } >> + return -EINVAL; Maybe something like -ENOENT would be more appropriate here. >> +} >> +EXPORT_SYMBOL(vpd_attribute_read_value); >> + I would suggest to use EXPORT_SYMBOL_GPL(). >> /* >> * vpd_section_check_key_name() >> * >> diff --git a/include/linux/firmware/google/google_vpd.h b/include/linux/firmware/google/google_vpd.h >> new file mode 100644 >> index 000000000000..6f1160f28af8 >> --- /dev/null >> +++ b/include/linux/firmware/google/google_vpd.h >> @@ -0,0 +1,18 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +/* >> + * Google VPD interface. >> + * >> + * Copyright 2019 Google Inc. >> + */ >> + >> +/* Interface for reading VPD value on Chrome platform. */ >> + >> +#ifndef __GOOGLE_VPD_H >> +#define __GOOGLE_VPD_H >> + >> +#include >> + >> +int vpd_attribute_read_value(bool ro, const char *key, >> + char **value, u32 value_len); >> + >> +#endif /* __GOOGLE_VPD_H */ >> -- >> 2.23.0.581.g78d2f28ef7-goog >> >