Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759474AbdLRMoP (ORCPT ); Mon, 18 Dec 2017 07:44:15 -0500 Received: from mail-oi0-f66.google.com ([209.85.218.66]:33414 "EHLO mail-oi0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759437AbdLRMoL (ORCPT ); Mon, 18 Dec 2017 07:44:11 -0500 X-Google-Smtp-Source: ACJfBotgG0G9U4UhhnqIPb43m1SpS+YKW360+wZ1hgyyF1caSayJQlTEKrtiXc42SSBl5km13ufkzg3lfdyVnwc4Sxg= MIME-Version: 1.0 In-Reply-To: References: <87ec50c846bbc7afc09ba0855aba1cdea6473308.1512048582.git.baolin.wang@linaro.org> <20171215104204.p7i27sen77ohbmzi@dell> From: Arnd Bergmann Date: Mon, 18 Dec 2017 13:44:10 +0100 X-Google-Sender-Auth: d2MOThwPeKdPU1HmMYuK05DLHU0 Message-ID: Subject: Re: [PATCH v6] mfd: syscon: Add hardware spinlock support To: Baolin Wang Cc: Lee Jones , Rob Herring , Mark Rutland , Mark Brown , Linux Kernel Mailing List , DTML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2367 Lines: 51 On Mon, Dec 18, 2017 at 7:54 AM, Baolin Wang wrote: > On 15 December 2017 at 21:13, Arnd Bergmann wrote: >> On Fri, Dec 15, 2017 at 11:42 AM, Lee Jones wrote: >> >>>> @@ -87,6 +88,30 @@ static struct syscon *of_syscon_register(struct device_node *np) >>>> if (ret) >>>> reg_io_width = 4; >>>> >>>> + ret = of_hwspin_lock_get_id(np, 0); >>>> + if (ret > 0) { >>>> + syscon_config.hwlock_id = ret; >>>> + syscon_config.hwlock_mode = HWLOCK_IRQSTATE; >>>> + } else { >>>> + switch (ret) { >>>> + case -ENOENT: >>>> + /* Ignore missing hwlock, it's optional. */ >>>> + break; >>>> + case 0: >>>> + /* In case of the HWSPINLOCK is not enabled. */ >>>> + if (!IS_ENABLED(CONFIG_HWSPINLOCK)) >>>> + break; >>>> + >>>> + ret = -EINVAL; >>>> + /* fall-through */ >>>> + default: >>>> + pr_err("Failed to retrieve valid hwlock: %d\n", ret); >>>> + /* fall-through */ >>>> + case -EPROBE_DEFER: >>>> + goto err_regmap; >>>> + } >> >> The 'case 0' seems odd here, are we sure that this is always a failure? >> From the of_hwspin_lock_get_id() definition it looks like zero might >> be valid, and the !CONFIG_HWSPINLOCK implementation appears >> to be written so that we should consider '0' valid but unused and >> silently continue with that. If that is generally not the intended >> use, it should probably return -EINVAL or something like that. > > Yes, 0 is valid for of_hwspin_lock_get_id(), but if we pass 'hwlock id > = 0' to regmap, the regmap core will not regard it as a valid hwlock > id to request the hwlock and will use default mutex lock instead of > hwlock, which will cause problems. Meanwhile if we silently continue > with case 0, users will not realize that they set one invalid hwlock > id to regmap core, so here we regarded case 0 as one invalid id to > print error messages for users. Something else still seems wrong then: If regmap doesn't accept a zero lock-id, then of_hwspin_lock_get_id() should never return that as a valid ID, right? Arnd