On 20/08/24 00:59, Dan Carpenter wrote:
On Tue, Aug 20, 2024 at 12:38:21AM +0530, Harshit Mogalapalli wrote:
Hey Dan,
I have noticed some warnings which mark scoped_guard() as unreachable code
on today's next.
drivers/platform/x86/ideapad-laptop.c:856 dytc_profile_set() warn: ignoring
unreachable code.
drivers/platform/x86/ideapad-laptop.c
848 static int dytc_profile_set(struct platform_profile_handler *pprof,
849 enum platform_profile_option profile)
850 {
851 struct ideapad_dytc_priv *dytc = container_of(pprof, struct ideapad_dytc_priv, pprof);
852 struct ideapad_private *priv = dytc->priv;
853 unsigned long output;
854 int err;
855
856 scoped_guard(mutex_intr, &dytc->mutex) {
scoped_guard is actually a for loop that iterates one time. So the post-op
expression isn't reachable because to the return 0; This seems like it might
be a common false positive.
Add it to smatch_data/kernel.unreachable.ignore. Except... Ugh, I already did
but haven't committed it yet. I'll do that.
857 if (profile == PLATFORM_PROFILE_BALANCED) {
858 /* To get back to balanced mode we just issue a reset command */
859 err = eval_dytc(priv->adev->handle, DYTC_CMD_RESET, NULL);
860 if (err)
861 return err;
862 } else {
863 int perfmode;
864
865 err = convert_profile_to_dytc(profile, &perfmode);
866 if (err)
867 return err;
868
869 /* Determine if we are in CQL mode. This alters the commands we do */
870 err = dytc_cql_command(priv,
871 DYTC_SET_COMMAND(DYTC_FUNCTION_MMC, perfmode, 1),
872 &output);
873 if (err)
874 return err;
875 }
876
877 /* Success - update current profile */
878 dytc->current_profile = profile;
879 return 0;
880 }
881
882 return -EINTR;
883 }
drivers/input/touchscreen/wacom_w8001.c:383 w8001_open() warn: ignoring
unreachable code.
This one is the same.
Pushed.
Thanks for explaining and pushing the code Dan!
Harshit