Message ID | 20220608110734.2928245-17-tzungbi@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | platform/chrome: Kunit tests and refactor for cros_ec_query_all() | expand |
On Wed, Jun 8, 2022 at 4:08 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote: > > cros_ec_get_host_command_version_mask() used to return value from > send_command() which is number of available bytes for input payload on > success (i.e. sizeof(struct ec_response_get_cmd_versions)). > > However, the callers don't need to know how many bytes are available. > > Don't return number of available bytes. Instead, return 0 on success; > otherwise, negative integers on error. > > Also remove the unneeded `ver_mask` initialization as the callers should > take it only if cros_ec_get_host_command_version_mask() returns 0. Make sure this compiles with W=1. Compilers may think that ver_mask may be uninitialized when used. > > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> Otherwise Reviewed-by: Guenter Roeck <groeck@chromium.org> > --- > Changes from v2: > - Separate Kunit test to another patch. > - Rephrase the commit message. > > Changes from v1: > - Return 0 on success; otherwise, negative intergers. > > drivers/platform/chrome/cros_ec_proto.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c > index efbabdcb31ae..06bc7db1213e 100644 > --- a/drivers/platform/chrome/cros_ec_proto.c > +++ b/drivers/platform/chrome/cros_ec_proto.c > @@ -453,6 +453,7 @@ static int cros_ec_get_host_command_version_mask(struct cros_ec_device *ec_dev, > if (ret > 0) { > rver = (struct ec_response_get_cmd_versions *)msg->data; > *mask = rver->version_mask; > + ret = 0; > } > > kfree(msg); > @@ -469,7 +470,7 @@ static int cros_ec_get_host_command_version_mask(struct cros_ec_device *ec_dev, > */ > int cros_ec_query_all(struct cros_ec_device *ec_dev) > { > - u32 ver_mask = 0; > + u32 ver_mask; > int ret; > > /* First try sending with proto v3. */ > @@ -505,9 +506,7 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev) > return -ENOMEM; > > /* Probe if MKBP event is supported */ > - ret = cros_ec_get_host_command_version_mask(ec_dev, > - EC_CMD_GET_NEXT_EVENT, > - &ver_mask); > + ret = cros_ec_get_host_command_version_mask(ec_dev, EC_CMD_GET_NEXT_EVENT, &ver_mask); > if (ret < 0 || ver_mask == 0) { > ec_dev->mkbp_event_supported = 0; > } else { > @@ -517,10 +516,8 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev) > } > > /* Probe if host sleep v1 is supported for S0ix failure detection. */ > - ret = cros_ec_get_host_command_version_mask(ec_dev, > - EC_CMD_HOST_SLEEP_EVENT, > - &ver_mask); > - ec_dev->host_sleep_v1 = (ret >= 0 && (ver_mask & EC_VER_MASK(1))); > + ret = cros_ec_get_host_command_version_mask(ec_dev, EC_CMD_HOST_SLEEP_EVENT, &ver_mask); > + ec_dev->host_sleep_v1 = (ret == 0 && (ver_mask & EC_VER_MASK(1))); > > /* Get host event wake mask. */ > ret = cros_ec_get_host_event_wake_mask(ec_dev, &ec_dev->host_event_wake_mask); > -- > 2.36.1.255.ge46751e96f-goog >
On Wed, Jun 08, 2022 at 09:20:29AM -0700, Guenter Roeck wrote: > On Wed, Jun 8, 2022 at 4:08 AM Tzung-Bi Shih <tzungbi@kernel.org> wrote: > > > > cros_ec_get_host_command_version_mask() used to return value from > > send_command() which is number of available bytes for input payload on > > success (i.e. sizeof(struct ec_response_get_cmd_versions)). > > > > However, the callers don't need to know how many bytes are available. > > > > Don't return number of available bytes. Instead, return 0 on success; > > otherwise, negative integers on error. > > > > Also remove the unneeded `ver_mask` initialization as the callers should > > take it only if cros_ec_get_host_command_version_mask() returns 0. > > Make sure this compiles with W=1. Compilers may think that ver_mask > may be uninitialized when used. If I tested it correctly, it compiles. $ make mrproper $ make allmodconfig $ make W=1 drivers/platform/chrome/ ... CC drivers/platform/chrome/cros_ec_proto.o CC drivers/platform/chrome/cros_ec_trace.o AR drivers/platform/chrome/built-in.a CC [M] drivers/platform/chrome/chromeos_acpi.o CC [M] drivers/platform/chrome/chromeos_laptop.o CC [M] drivers/platform/chrome/chromeos_privacy_screen.o CC [M] drivers/platform/chrome/chromeos_pstore.o CC [M] drivers/platform/chrome/chromeos_tbmc.o CC [M] drivers/platform/chrome/cros_ec.o ...
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c index efbabdcb31ae..06bc7db1213e 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -453,6 +453,7 @@ static int cros_ec_get_host_command_version_mask(struct cros_ec_device *ec_dev, if (ret > 0) { rver = (struct ec_response_get_cmd_versions *)msg->data; *mask = rver->version_mask; + ret = 0; } kfree(msg); @@ -469,7 +470,7 @@ static int cros_ec_get_host_command_version_mask(struct cros_ec_device *ec_dev, */ int cros_ec_query_all(struct cros_ec_device *ec_dev) { - u32 ver_mask = 0; + u32 ver_mask; int ret; /* First try sending with proto v3. */ @@ -505,9 +506,7 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev) return -ENOMEM; /* Probe if MKBP event is supported */ - ret = cros_ec_get_host_command_version_mask(ec_dev, - EC_CMD_GET_NEXT_EVENT, - &ver_mask); + ret = cros_ec_get_host_command_version_mask(ec_dev, EC_CMD_GET_NEXT_EVENT, &ver_mask); if (ret < 0 || ver_mask == 0) { ec_dev->mkbp_event_supported = 0; } else { @@ -517,10 +516,8 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev) } /* Probe if host sleep v1 is supported for S0ix failure detection. */ - ret = cros_ec_get_host_command_version_mask(ec_dev, - EC_CMD_HOST_SLEEP_EVENT, - &ver_mask); - ec_dev->host_sleep_v1 = (ret >= 0 && (ver_mask & EC_VER_MASK(1))); + ret = cros_ec_get_host_command_version_mask(ec_dev, EC_CMD_HOST_SLEEP_EVENT, &ver_mask); + ec_dev->host_sleep_v1 = (ret == 0 && (ver_mask & EC_VER_MASK(1))); /* Get host event wake mask. */ ret = cros_ec_get_host_event_wake_mask(ec_dev, &ec_dev->host_event_wake_mask);
cros_ec_get_host_command_version_mask() used to return value from send_command() which is number of available bytes for input payload on success (i.e. sizeof(struct ec_response_get_cmd_versions)). However, the callers don't need to know how many bytes are available. Don't return number of available bytes. Instead, return 0 on success; otherwise, negative integers on error. Also remove the unneeded `ver_mask` initialization as the callers should take it only if cros_ec_get_host_command_version_mask() returns 0. Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> --- Changes from v2: - Separate Kunit test to another patch. - Rephrase the commit message. Changes from v1: - Return 0 on success; otherwise, negative intergers. drivers/platform/chrome/cros_ec_proto.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)