diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-02-10 11:12:55 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-02-10 11:13:53 -0800 |
commit | 7483948fdd31a8642ef0288aab6f368b98d53c29 (patch) | |
tree | 031020a5553701d2aae8dddb0fa509aa65854eb1 /include/linux/res_counter.h | |
parent | 22a416c4e0f2179b57028e084ac0ed2c110333bd (diff) | |
parent | fe250923bbbbcbccc9aa7b84d05ee7a060450534 (diff) | |
download | talos-op-linux-7483948fdd31a8642ef0288aab6f368b98d53c29.tar.gz talos-op-linux-7483948fdd31a8642ef0288aab6f368b98d53c29.zip |
Merge tag 'usb-3.3-rc3' into usb-next
This is done to resolve a merge conflict with:
drivers/usb/class/cdc-wdm.c
and to better handle future patches for this driver as it is under
active development at the moment.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/res_counter.h')
-rw-r--r-- | include/linux/res_counter.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index c9d625ca659e..da81af086eaf 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h @@ -109,12 +109,18 @@ void res_counter_init(struct res_counter *counter, struct res_counter *parent); * * returns 0 on success and <0 if the counter->usage will exceed the * counter->limit _locked call expects the counter->lock to be taken + * + * charge_nofail works the same, except that it charges the resource + * counter unconditionally, and returns < 0 if the after the current + * charge we are over limit. */ int __must_check res_counter_charge_locked(struct res_counter *counter, unsigned long val); int __must_check res_counter_charge(struct res_counter *counter, unsigned long val, struct res_counter **limit_fail_at); +int __must_check res_counter_charge_nofail(struct res_counter *counter, + unsigned long val, struct res_counter **limit_fail_at); /* * uncharge - tell that some portion of the resource is released @@ -142,7 +148,10 @@ static inline unsigned long long res_counter_margin(struct res_counter *cnt) unsigned long flags; spin_lock_irqsave(&cnt->lock, flags); - margin = cnt->limit - cnt->usage; + if (cnt->limit > cnt->usage) + margin = cnt->limit - cnt->usage; + else + margin = 0; spin_unlock_irqrestore(&cnt->lock, flags); return margin; } |