Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp3509990imm; Mon, 8 Oct 2018 05:19:59 -0700 (PDT) X-Google-Smtp-Source: ACcGV62VSIOxNI3N3ph4Q+V4Vvj2M5x+NIwzsd8tyYE5xiV3CK57ptK4Uxb0PixhHDNqtVmdVovo X-Received: by 2002:a17:902:e012:: with SMTP id ca18-v6mr23271548plb.195.1539001199837; Mon, 08 Oct 2018 05:19:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539001199; cv=none; d=google.com; s=arc-20160816; b=VTSie2hsr5VqNW5/ITYYTtQpi+ffdg9YyGsthPgMPXyM2I9BzeeCGAcBWfWVQP7kZW JX29NlET7tnvxLJL2Ia5L58nohB7/ieIunuv4MB4xNaMi1BWsOl5v/+G3ot3qq4iqq0S 11Qn0ZLoXwaPbPPWM+F22zXaLttv/vu+GbiYun0s3jNCHPNhlMeW8G6ojE1sITffHZ3F VRoBYASRFaRBC5nkUs2eCaRezSC3l5Kn/7b6R0kaU9TVF7rTGjICFXc6zmPiIFaQQqUJ HKkSmvYQblcnRxCIZpFIm7t3AceEfddT1W+jViuGQQGHB6RO53xRBuW2f5MdbWIO5pfH rckQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=NaiVNtYCDKE0Z4Xwjd4fDLoCLSWdI5pEGC87+tacw3U=; b=JaUPkyRfGsRqj45do6Eef2vlOMNGRw1b+BpivkOGRTAuZsA2dWU0NABpvqpalnh5JF p7AefL53FJwiKR4uEqJWmqMeDNHDjbpZwGkl5QZKxUPXcilNyXZiHHFwSwac8+pwhxsm CY1x0b69cku1CMQrOjzsTW5uQQRkoID+dTE0zH6J6zEEUyfiLofRfbOURFF/VsyPXwns nuRD1DDzka3hGedOJzY1XTTJ8f85MHw8q532Zp0HAeYCOTi4yz8IqrioovO7Bj/P52GR CrWJSuZk95RwgDhL2eW1Fao+zXg95COtafyDWoHvTDA7p0Q5PkP8hL0sYv/pjIbmjC6o +rvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@monstr-eu.20150623.gappssmtp.com header.s=20150623 header.b=WQeC82nj; 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 i21-v6si16645691pgh.53.2018.10.08.05.19.44; Mon, 08 Oct 2018 05:19:59 -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=@monstr-eu.20150623.gappssmtp.com header.s=20150623 header.b=WQeC82nj; 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 S1726492AbeJHTau (ORCPT + 99 others); Mon, 8 Oct 2018 15:30:50 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:32902 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725893AbeJHTas (ORCPT ); Mon, 8 Oct 2018 15:30:48 -0400 Received: by mail-wr1-f66.google.com with SMTP id e4-v6so20622886wrs.0 for ; Mon, 08 Oct 2018 05:19:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=NaiVNtYCDKE0Z4Xwjd4fDLoCLSWdI5pEGC87+tacw3U=; b=WQeC82njnSR42hpup7wZXwBNSubTb3gf8gaJFg7bXHyu8ZR7HAkKY8a8aICfTmvvu8 N5lSQVmNv0t8akMB8KP6EUtsW6pvMeDVbTAY8cgaRoMck1/FE3tSMzKVtY2HClK9uiFz bFTAuODAP3sFvJENnfGlrjM/QqQIncgpOUm/VvGAnKwYJkiMYPnmkqFaKC3uzmni0ILm akaN3v5yhXZMXo8sJ38Z7PRc9DmdBKx2Y86PqKexySVJImVpGvrxF1QcCxgO7R78X4BM 7r5TMdooiBNjsQ+IOkSHvFJ14HLznWncYsxEdKOgaPQEd0t5Va5nhy1WrxB43guPUG03 tXDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=NaiVNtYCDKE0Z4Xwjd4fDLoCLSWdI5pEGC87+tacw3U=; b=OCi4nlRKl7HFBthPl1BUKCn0PCIJYBB2RKKJoEqvdN0RTrcknFHKOcoxw9BIZjDszV LgZbAj7KgciGcrZSdOO2WYgNMC0z/FBWFMg80z2j6I2Zn1VWtuKHqBDksz4gbGdzqAkk Ci7jvY2cjQp2TLwpPhmz1RUTr0Ka/Kj5A1nWyMHCrpnfyTOnSLA9ss954F2laP7sO/V+ AEXy9o4TYyAbk2iasXSquOAacDx8Ij7Ny8uPpF5zU48ChUnBLcHOLXDXpMaWkPyaayoG jkLgp+fkqhEVpWAR98sw7bwymCjcpjuDRj9U3ZsfUSr30hUZFQeZDkKqFoKw/e5xqoRU JqpA== X-Gm-Message-State: ABuFfoidSygDjy633WyXRKijWpKMyXPa4IQY8GhooZ8N0HED2qk17oMT jYfrwzk1rMtZz9Hvw2pCXMa2WQCYSfnCnQ== X-Received: by 2002:adf:da43:: with SMTP id r3-v6mr16595987wrl.221.1539001159564; Mon, 08 Oct 2018 05:19:19 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id r16-v6sm22635162wrv.21.2018.10.08.05.19.18 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 08 Oct 2018 05:19:19 -0700 (PDT) From: Michal Simek To: linux-kernel@vger.kernel.org, monstr@monstr.eu, geert@linux-m68k.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, Jiri Slaby , Rob Herring , linux-serial@vger.kernel.org, Frank Rowand , linux-arm-kernel@lists.infradead.org Subject: [PATCH] of: base: Change logic in of_alias_get_alias_list() Date: Mon, 8 Oct 2018 14:19:18 +0200 Message-Id: X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Check compatible string first before setting up bit in bitmap to also cover cases that allocated bitfield is not big enough. Show warning about it but let driver to continue to work with allocated bitfield to keep at least some devices (included console which is commonly close to serial0) to work. Fixes: b1078c355d76 ("of: base: Introduce of_alias_get_alias_list() to check alias IDs") Fixes: ae1cca3fa347 ("serial: uartps: Change uart ID port allocation") Signed-off-by: Michal Simek --- I have looked at it and I don't think there should be necessary to report error immediately back with partially initialized bitfield. The reason is that still there could be a console device which is most likely below that max limit and it is worth to return at least that nbits properly filled. It will also enable cases that you can still continue to use aliases higher then fields prepared for devices without alias. To be fixed patches are present in tty-next branch. --- drivers/of/base.c | 22 ++++++++++++---------- drivers/tty/serial/xilinx_uartps.c | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 908de45f966b..0b9611e196d1 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1953,13 +1953,15 @@ int of_alias_get_id(struct device_node *np, const char *stem) * The function travels the lookup table to record alias ids for the given * device match structures and alias stem. * - * Return: 0 or -ENOSYS when !CONFIG_OF + * Return: 0 or -ENOSYS when !CONFIG_OF or + * -EINVAL if alias ID is greater then allocated nbits */ int of_alias_get_alias_list(const struct of_device_id *matches, const char *stem, unsigned long *bitmap, unsigned int nbits) { struct alias_prop *app; + int ret = 0; /* Zero bitmap field to make sure that all the time it is clean */ bitmap_zero(bitmap, nbits); @@ -1976,21 +1978,21 @@ int of_alias_get_alias_list(const struct of_device_id *matches, continue; } - if (app->id >= nbits) { - pr_debug("%s: ID %d greater then bitmap field %d\n", - __func__, app->id, nbits); - continue; - } - if (of_match_node(matches, app->np)) { pr_debug("%s: Allocated ID %d\n", __func__, app->id); - set_bit(app->id, bitmap); + + if (app->id >= nbits) { + pr_warn("%s: ID %d >= than bitmap field %d\n", + __func__, app->id, nbits); + ret = -EINVAL; + } else { + set_bit(app->id, bitmap); + } } - /* Alias exists but is not compatible with matches */ } mutex_unlock(&of_mutex); - return 0; + return ret; } EXPORT_SYMBOL_GPL(of_alias_get_alias_list); diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c index d452dceb0cb3..29a18103182d 100644 --- a/drivers/tty/serial/xilinx_uartps.c +++ b/drivers/tty/serial/xilinx_uartps.c @@ -1393,7 +1393,7 @@ static int cdns_get_id(struct platform_device *pdev) if (!alias_bitmap_initialized) { ret = of_alias_get_alias_list(cdns_uart_of_match, "serial", alias_bitmap, MAX_UART_INSTANCES); - if (ret) { + if (ret && ret != -EINVAL) { mutex_unlock(&bitmap_lock); return ret; } -- 1.9.1