Messages in this thread | | | Date | Tue, 3 Mar 2009 16:53:06 +0530 | From | Balbir Singh <> | Subject | Re: [PATCH 0/4] Memory controller soft limit patches (v3) |
| |
* KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> [2009-03-03 09:03:03]:
> On Mon, 2 Mar 2009 23:22:35 +0530 > Balbir Singh <balbir@linux.vnet.ibm.com> wrote: > > > * KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> [2009-03-02 15:18:30]: > > > > > On Mon, 2 Mar 2009 11:35:19 +0530 > > > Balbir Singh <balbir@linux.vnet.ibm.com> wrote: > > > > > > > > Then, not-sorted RB-tree can be there. > > > > > > > > > > BTW, > > > > > time_after(jiffies, 0) > > > > > is buggy (see definition). If you want make this true always, > > > > > time_after(jiffies, jiffies +1) > > > > > > > > > > > > > HZ/4 is 250/4 jiffies in the worst case (62). We have > > > > time_after(jiffies, next_update_interval) and next_update_interval is > > > > set to last_tree_update + 62. Not sure if I got what you are pointing > > > > to. > > > > > > > + unsigned long next_update = 0; > > > + unsigned long flags; > > > + > > > + if (!css_tryget(&mem->css)) > > > + return; > > > + prev_usage_in_excess = mem->usage_in_excess; > > > + new_usage_in_excess = res_counter_soft_limit_excess(&mem->res); > > > + > > > + if (time_check) > > > + next_update = mem->last_tree_update + > > > + MEM_CGROUP_TREE_UPDATE_INTERVAL; > > > + if (new_usage_in_excess && time_after(jiffies, next_update)) { > > > + if (prev_usage_in_excess) > > > + mem_cgroup_remove_exceeded(mem); > > > + mem_cgroup_insert_exceeded(mem); > > > + updated_tree = true; > > > + } else if (prev_usage_in_excess && !new_usage_in_excess) { > > > + mem_cgroup_remove_exceeded(mem); > > > + updated_tree = true; > > > + } > > > > > > My point is what happens if time_check==false. > > > time_afrter(jiffies, 0) is buggy. > > > > > > > I see your point now, but the idea behind doing so is that > > time_after(jiffies, 0) will always return false, which forces the > > prev_usage_in_excess and !new_usage_in_excess check to execute. We set > > the value to false only from __mem_cgroup_free(). > > > > Are you suggesting that calling time_after(jiffies, 0) is buggy? > > The comment > > > > Do this with "<0" and ">=0" to only test the sign of the result. A > > > > I think refers to the comparison check and not to the parameters. I > > hope I am reading this right. > > 106 #define time_after(a,b) \ > 107 (typecheck(unsigned long, a) && \ > 108 typecheck(unsigned long, b) && \ > 109 ((long)(b) - (long)(a) < 0)) > > Reading above. > > if b==0. > if (long)a <0 -> false > if (long)a >0 -> true > > jiffies is unsigned value. please think of bit-pattern of signed/unsigned value.
Fair enough, the cast to long will be an issue. I'll fix it.
-- Balbir
| |