User question for __context__ or similiar

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I would like to use sparse on the OpenBSC[1] userspace application
and I'm searching for a hint on how to realize it or how to adopt the
sparse code to do the following.

In the code we have a struct called "struct gsm_subscriber" and it
is reference counted. We have various methods that query the 
database (VLR) to find a subscriber and then we have subscr_put
and subscr_get to operate on the reference count.

One rule we have established in the code is that the "reference" is
never borrowed. This means code that is doing a subscr_get or a query
will need to do subscr_put on all exits paths. The only exception is
e.g. if work needs to be scheduled and the pointer is put into a talloc
allocated structure.

My first thought was that this almost works like locking in the kernel
but I was wrong. I have used the CHECKER macros from linux/compiler.h

and changed code to

struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr)
                                          __acquires(subscr);
struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr)
                                         __releases(subscr);
struct gsm_subscriber *subscr_find_by_tmsi(int tmsi)
                                         __acquires(subscr);

and the code like

do_something()
{
    subscr = subscr_find_by_tmsi(tmsi);
    if (!subscr)
           return;

   if (some_condition) {
...
          subscr_put(subscr);
   }

...
   return;
}

My assumption would be that sparse is looking at the flows and figures
out that one path exits without subscr_put being called. Is my assumption
wrong, would it be worth adding a check that goes through the flow and
counts ref's/unref's? Am I doing it completely wrong?

help and pointers to the code are very much appreciated.

      z.

PS: I will update the wiki with some explanation when I get it to work.


[1] http://openbsc.gnumonks.org

--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux