From: Dan Carpenter <dan.carpenter@oracle.com>
To: Eugenio Perez Martin <eperezma@redhat.com>
Cc: "Kamde, Tanuj" <tanuj.kamde@amd.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
Wu Zongyong <wuzongyong@linux.alibaba.com>,
Si-Wei Liu <si-wei.liu@oracle.com>,
"pabloc@xilinx.com" <pabloc@xilinx.com>,
Eli Cohen <elic@nvidia.com>, Zhang Min <zhang.min9@zte.com.cn>,
"lulu@redhat.com" <lulu@redhat.com>,
"Piotr.Uminski@intel.com" <Piotr.Uminski@intel.com>,
"martinh@xilinx.com" <martinh@xilinx.com>,
Xie Yongji <xieyongji@bytedance.com>,
"dinang@xilinx.com" <dinang@xilinx.com>,
"habetsm.xilinx@gmail.com" <habetsm.xilinx@gmail.com>,
Longpeng <longpeng2@huawei.com>,
"lvivier@redhat.com" <lvivier@redhat.com>,
Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
"Dawar, Gautam" <gautam.dawar@amd.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"ecree.xilinx@gmail.com" <ecree.xilinx@gmail.com>,
"hanand@xilinx.com" <hanand@xilinx.com>,
"martinpo@xilinx.com" <martinpo@xilinx.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Zhu Lingshan <lingshan.zhu@intel.com>
Subject: Re: [PATCH v3 2/4] vhost-vdpa: introduce STOP backend feature bit
Date: Thu, 26 May 2022 16:20:38 +0300 [thread overview]
Message-ID: <20220526132038.GF2168@kadam> (raw)
In-Reply-To: <CAJaqyWf7PumZXy1g3PbbTNCdn3u1XH3XQF73tw2w8Py5yLkSAg@mail.gmail.com>
On Thu, May 26, 2022 at 02:44:02PM +0200, Eugenio Perez Martin wrote:
> > >> +static bool vhost_vdpa_can_stop(const struct vhost_vdpa *v) {
> > >> + struct vdpa_device *vdpa = v->vdpa;
> > >> + const struct vdpa_config_ops *ops = vdpa->config;
> > >> +
> > >> + return ops->stop;
> > >> [GD>>] Would it be better to explicitly return a bool to match the return type?
> > >
> > >I'm not sure about the kernel code style regarding that casting. Maybe
> > >it's better to return !!ops->stop here. The macros likely and unlikely
> > >do that.
> >
> > IIUC `ops->stop` is a function pointer, so what about
> >
> > return ops->stop != NULL;
> >
>
> I'm ok with any method proposed. Both three ways can be found in the
> kernel so I think they are all valid (although the double negation is
> from bool to integer in (0,1) set actually).
>
> Maybe Jason or Michael (as maintainers) can state the preferred method here.
Always just do whatever the person who responded feels like because
they're likely the person who cares the most. ;)
I don't think there are any static analysis tools which will complain
about this. Smatch will complain if you return a negative literal.
It feels like returning any literal that isn't 1 or 0 should trigger a
warning... I've written that and will check it out tonight.
Really anything negative should trigger a warning. See new Smatch stuff
below.
regards,
dan carpenter
================ TEST CASE =========================
int x;
_Bool one(int *p)
{
if (p)
x = -2;
return x;
}
_Bool two(int *p)
{
return -4; // returning 2 triggers a warning now
}
=============== OUTPUT =============================
test.c:10 one() warn: potential negative cast to bool 'x'
test.c:14 two() warn: signedness bug returning '(-4)'
test.c:14 two() warn: '(-4)' is not bool
=============== CODE ===============================
#include "smatch.h"
#include "smatch_extra.h"
#include "smatch_slist.h"
static int my_id;
static void match_literals(struct expression *ret_value)
{
struct symbol *type;
sval_t sval;
type = cur_func_return_type();
if (!type || sval_type_max(type).value != 1)
return;
if (!get_implied_value(ret_value, &sval))
return;
if (sval.value == 0 || sval.value == 1)
return;
sm_warning("'%s' is not bool", sval_to_str(sval));
}
static void match_any_negative(struct expression *ret_value)
{
struct symbol *type;
struct sm_state *extra, *sm;
sval_t sval;
char *name;
type = cur_func_return_type();
if (!type || sval_type_max(type).value != 1)
return;
extra = get_extra_sm_state(ret_value);
if (!extra)
return;
FOR_EACH_PTR(extra->possible, sm) {
if (estate_get_single_value(sm->state, &sval) &&
sval_is_negative(sval)) {
name = expr_to_str(ret_value);
sm_warning("potential negative cast to bool '%s'", name);
free_string(name);
return;
}
} END_FOR_EACH_PTR(sm);
}
void check_bool_return(int id)
{
my_id = id;
add_hook(&match_literals, RETURN_HOOK);
add_hook(&match_any_negative, RETURN_HOOK);
}
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2022-05-26 13:21 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20220525105922.2413991-1-eperezma@redhat.com>
[not found] ` <20220525105922.2413991-3-eperezma@redhat.com>
[not found] ` <BL1PR12MB582520CC9CE024149141327499D69@BL1PR12MB5825.namprd12.prod.outlook.com>
[not found] ` <CAJaqyWc9_ErCg4whLKrjNyP5z2DZno-LJm7PN=-9uk7PUT4fJw@mail.gmail.com>
2022-05-26 9:07 ` [PATCH v3 2/4] vhost-vdpa: introduce STOP backend feature bit Stefano Garzarella
[not found] ` <CAJaqyWf7PumZXy1g3PbbTNCdn3u1XH3XQF73tw2w8Py5yLkSAg@mail.gmail.com>
2022-05-26 13:20 ` Dan Carpenter [this message]
[not found] ` <CAJaqyWe4311B6SK997eijEJyhwnAxkBUGJ_0iuDNd=wZSt0DmQ@mail.gmail.com>
2022-05-26 19:06 ` Dan Carpenter
[not found] ` <CAJaqyWdfWgC-uthR0aCjitCrBf=ca=Ee1oAB=JumffK=eSLgng@mail.gmail.com>
2022-05-27 7:36 ` Dan Carpenter
2022-05-30 14:27 ` Dan Carpenter
2022-05-30 15:12 ` Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220526132038.GF2168@kadam \
--to=dan.carpenter@oracle.com \
--cc=Piotr.Uminski@intel.com \
--cc=christophe.jaillet@wanadoo.fr \
--cc=dinang@xilinx.com \
--cc=ecree.xilinx@gmail.com \
--cc=elic@nvidia.com \
--cc=eperezma@redhat.com \
--cc=gautam.dawar@amd.com \
--cc=habetsm.xilinx@gmail.com \
--cc=hanand@xilinx.com \
--cc=kvm@vger.kernel.org \
--cc=lingshan.zhu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longpeng2@huawei.com \
--cc=lulu@redhat.com \
--cc=lvivier@redhat.com \
--cc=martinh@xilinx.com \
--cc=martinpo@xilinx.com \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabloc@xilinx.com \
--cc=si-wei.liu@oracle.com \
--cc=tanuj.kamde@amd.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=wuzongyong@linux.alibaba.com \
--cc=xieyongji@bytedance.com \
--cc=zhang.min9@zte.com.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).