Skip to contentSkip to conversation

Why sparse does not support context tracking?

DISCUSSION Alexander Riesen 2 participants 3 messages May 4, 2015 Sparse checker

lore
Share & tools
lore
#0 lore raw

Hi,

I tried to instrument my code (a kernel driver) with __must_hold hints and noticed that they don't really work: a definitely broken code caused no errors from sparse.

A test in the "sparse" tree confirmed. Here is the test I used:

static int ctx;

static void must_hold(void) __attribute__((context(ctx,1,1)))

{
    if (ctx)
        ;
}
static void bad_must_hold(void)
{
    must_hold();
}

After a bit of looking I found a commit which removed context tracking from the "sparse":

Author: Johannes Berg <[email protected]> 2008-12-23 10:59:22

Revert the context tracking code

> Do you want to resend your change which revert the context changes? > Make it base on Josh's git's tree and I will merge your changes in my > branch.

Below. Or I can give it to you in git if you prefer. I still think we should redo this in some form so that annotations with different contexts can work properly, but I don't have time to take care of it right now.

johannes

>From ca95b62edf1600a2b55ed9ca0515d049807a84fc Mon Sep 17 00:00:00 2001
From: Johannes Berg <[email protected]>
Date: Tue, 23 Dec 2008 10:53:19 +0100
Subject: [PATCH] Revert context tracking code

So it seems that the code has problems with different contexts. Still, it seems a bit heavy-handed to remove it completely (assuming it worked, of course). The kernel even has a bit of use for it (not much, admittedly: DRBD and aoe).

Is it be possible to reintroduce the code at least for the same context? So that it catches at least some locks not taken?

Regards,
Alex Riesen

#1 lore raw
Quoted 10 lines · Alexander Riesen

Hi,

I tried to instrument my code (a kernel driver) with __must_hold hints and noticed that they don't really work: a definitely broken code caused no errors from sparse.

Revert the context tracking code

So it seems that the code has problems with different contexts. Still, it seems a bit heavy-handed to remove it completely (assuming it worked, of course).

It didn't really work. It had a lot of issues that were too big for my little wireless-focused brain :)

johannes

#2 lore raw
Quoted 9 lines · Johannes Berg
Quoted 5 lines · Alexander Riesen

Revert the context tracking code

So it seems that the code has problems with different contexts. Still, it seems a bit heavy-handed to remove it completely (assuming it worked, of course).

It didn't really work. It had a lot of issues that were too big for my little wireless-focused brain :)

Ah, pity. Wasn't there any hope for it?