From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752055AbdE0P6Z (ORCPT ); Sat, 27 May 2017 11:58:25 -0400 Received: from mail-qt0-f193.google.com ([209.85.216.193]:34733 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750982AbdE0P6Y (ORCPT ); Sat, 27 May 2017 11:58:24 -0400 MIME-Version: 1.0 In-Reply-To: References: <20170526160936.54265-1-mika.westerberg@linux.intel.com> <20170526160936.54265-14-mika.westerberg@linux.intel.com> From: Andy Shevchenko Date: Sat, 27 May 2017 18:58:22 +0300 Message-ID: Subject: Re: [PATCH v2 13/27] thunderbolt: Read vendor and device name from DROM To: Mika Westerberg Cc: Greg Kroah-Hartman , Andreas Noever , Michael Jamet , Yehezkel Bernat , Lukas Wunner , Amir Levy , Andy Lutomirski , Mario Limonciello , Jared.Dominguez@dell.com, Andy Shevchenko , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, May 27, 2017 at 6:57 PM, Andy Shevchenko wrote: > On Fri, May 26, 2017 at 7:09 PM, Mika Westerberg > wrote: >> The device DROM contains name of the vendor and device among other >> things. Extract this information and expose it to the userspace via two >> new attributes. > >> +static const char *parse_name(const u8 *data, u8 len) > > Hmm... (name) > >> +{ >> + char *name; >> + >> + name = kmemdup(data, len, GFP_KERNEL); > > Since it's ASCII by specification it may make sense to use > > sw->..._name = kstrndup(entry->data, sizeof(*header), GFP_KERNEL); sizeof(*header) - 1, of course. > if (!sw->..._name) > return -ENOMEM; > > just in place, instead of this entire function. > >> + if (name) >> + name[len - 1] = '\0'; >> + return name; >> +} >> + >> +static int tb_drom_parse_entry_generic(struct tb_switch *sw, >> + struct tb_drom_entry_header *header) >> +{ >> + const struct tb_drom_entry_generic *entry = >> + (const struct tb_drom_entry_generic *)header; >> + >> + switch (header->index) { >> + case 1: >> + /* Length includes 2 bytes header so remove it before copy */ >> + sw->vendor_name = parse_name(entry->data, >> + header->len - sizeof(*header)); >> + if (!sw->vendor_name) >> + return -ENOMEM; >> + break; >> + >> + case 2: >> + sw->device_name = parse_name(entry->data, >> + header->len - sizeof(*header)); >> + if (!sw->device_name) >> + return -ENOMEM; >> + break; >> + } >> + >> + return 0; >> +} > > -- > With Best Regards, > Andy Shevchenko -- With Best Regards, Andy Shevchenko