I heard that others were considering work on predicate locks for 9.1. Since Dan Ports of MIT and I have been working on that for the serializable implementation for the last few weeks, I felt it would be good to post a WIP patch to avoid duplicate effort. This implementation compiles without warning, passes all regression tests, and passes several hundred permutations of a dozen basic tests which are intended to confirm correct predicate locking. SIREAD locks are generally taken at the tuple level for the heap, with granularity promotion to page and then relation level as needed to prevent resource exhaustion. We've been using indexes to implement predicate locking, and currently have page level locking for btree indexes and only relation level locking otherwise, but Dan is actively working on getting btree down to next-key locking, and when I return from PGCon I will be working on the other index AMs.
We're currently using Markus Wanner's dtester for testing, but that can be moved out of the patch if we don't want to have a dependency on it.