Use kn->kn_sdata to track the last bs->total value for each knote attached to an mmaped channel. An event is delivered only when the total byte counter has advanced by at least c->lw since the last delivery. After delivery kn_sdata is updated to the current total.
Each knote tracks its own watermark independently, so multiple knotes attached to the same mmaped channel all receive events correctly.
Non-mmap channels keep the existing level-triggered behavior via chn_polltrigger().