Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <linux/kref.h>
  2. #include <asm/atomic.h>
  3.  
  4.  
  5. void kref_set(struct kref *kref, int num)
  6. {
  7.     atomic_set(&kref->refcount, num);
  8. }
  9.  
  10. /**
  11.  * kref_init - initialize object.
  12.  * @kref: object in question.
  13.  */
  14. void kref_init(struct kref *kref)
  15. {
  16.     kref_set(kref, 1);
  17. }
  18.  
  19. void kref_get(struct kref *kref)
  20. {
  21. //    WARN_ON(!atomic_read(&kref->refcount));
  22.     atomic_inc(&kref->refcount);
  23. }
  24.  
  25.  
  26. int kref_put(struct kref *kref, void (*release)(struct kref *kref))
  27. {
  28. //    WARN_ON(release == NULL);
  29. //    WARN_ON(release == (void (*)(struct kref *))kfree);
  30.  
  31.     if (atomic_dec_and_test(&kref->refcount)) {
  32.         release(kref);
  33.         return 1;
  34.     }
  35.     return 0;
  36. }
  37.  
  38.  
  39.