Messages in this thread | | | From | Roland Dreier <> | Subject | Re: kfifo: possible weird violation of what should be invariant | Date | Tue, 16 Mar 2010 15:25:17 -0700 |
| |
> sure, the code seems to work, but allowing the internal values of a > kfifo to contain invalid values on a regular basis would seem to make > a mess of, say, tracing or debugging. making sure that offset values > actually lie within their valid range would seem to be one of those > ASSERT() things that should always be true, should it not? is there a > reason the design is like this?
Actually I believe having the values be free-running without clamping them makes the code much simpler -- the reason being that you preserve the invariant of "in" always being ahead of "out". If you reduce the pointers modulo the size, then you end up having a lot of code that has two cases: one to handle "in > out", and one to handle "in < out because in has wrapped and out hasn't yet".
- R. -- Roland Dreier <rolandd@cisco.com> For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/index.html
| |