mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Clarify some comments, fix some types, and rename ZBUF_FLAG_IMMUTABLE to
ZBUF_FLAG_ASSIGNED to make it clear why the buffer can't be written to: it is assigned to userspace.
This commit is contained in:
parent
6affafd098
commit
784cd896fc
1 changed files with 18 additions and 18 deletions
|
|
@ -91,7 +91,7 @@ __FBSDID("$FreeBSD$");
|
|||
* knows that the space is not available.
|
||||
*/
|
||||
struct zbuf {
|
||||
vm_offset_t zb_uaddr; /* User address, may be stale. */
|
||||
vm_offset_t zb_uaddr; /* User address at time of setup. */
|
||||
size_t zb_size; /* Size of buffer, incl. header. */
|
||||
u_int zb_numpages; /* Number of pages. */
|
||||
int zb_flags; /* Flags on zbuf. */
|
||||
|
|
@ -104,7 +104,7 @@ struct zbuf {
|
|||
* buffer may remain in the store position as a result of the user process
|
||||
* not yet having acknowledged the buffer in the hold position yet.
|
||||
*/
|
||||
#define ZBUF_FLAG_IMMUTABLE 0x00000001 /* Set when owned by user. */
|
||||
#define ZBUF_FLAG_ASSIGNED 0x00000001 /* Set when owned by user. */
|
||||
|
||||
/*
|
||||
* Release a page we've previously wired.
|
||||
|
|
@ -262,8 +262,8 @@ bpf_zerocopy_append_bytes(struct bpf_d *d, caddr_t buf, u_int offset,
|
|||
src_bytes = (u_char *)src;
|
||||
zb = (struct zbuf *)buf;
|
||||
|
||||
KASSERT((zb->zb_flags & ZBUF_FLAG_IMMUTABLE) == 0,
|
||||
("bpf_zerocopy_append_bytes: ZBUF_FLAG_IMMUTABLE"));
|
||||
KASSERT((zb->zb_flags & ZBUF_FLAG_ASSIGNED) == 0,
|
||||
("bpf_zerocopy_append_bytes: ZBUF_FLAG_ASSIGNED"));
|
||||
|
||||
/*
|
||||
* Scatter-gather copy to user pages mapped into kernel address space
|
||||
|
|
@ -314,8 +314,8 @@ bpf_zerocopy_append_mbuf(struct bpf_d *d, caddr_t buf, u_int offset,
|
|||
m = (struct mbuf *)src;
|
||||
zb = (struct zbuf *)buf;
|
||||
|
||||
KASSERT((zb->zb_flags & ZBUF_FLAG_IMMUTABLE) == 0,
|
||||
("bpf_zerocopy_append_mbuf: ZBUF_FLAG_IMMUTABLE"));
|
||||
KASSERT((zb->zb_flags & ZBUF_FLAG_ASSIGNED) == 0,
|
||||
("bpf_zerocopy_append_mbuf: ZBUF_FLAG_ASSIGNED"));
|
||||
|
||||
/*
|
||||
* Scatter gather both from an mbuf chain and to a user page set
|
||||
|
|
@ -374,8 +374,8 @@ bpf_zerocopy_buffull(struct bpf_d *d)
|
|||
zb = (struct zbuf *)d->bd_sbuf;
|
||||
KASSERT(zb != NULL, ("bpf_zerocopy_buffull: zb == NULL"));
|
||||
|
||||
if ((zb->zb_flags & ZBUF_FLAG_IMMUTABLE) == 0) {
|
||||
zb->zb_flags |= ZBUF_FLAG_IMMUTABLE;
|
||||
if ((zb->zb_flags & ZBUF_FLAG_ASSIGNED) == 0) {
|
||||
zb->zb_flags |= ZBUF_FLAG_ASSIGNED;
|
||||
zb->zb_header->bzh_kernel_len = d->bd_slen;
|
||||
atomic_add_rel_int(&zb->zb_header->bzh_kernel_gen, 1);
|
||||
}
|
||||
|
|
@ -384,9 +384,8 @@ bpf_zerocopy_buffull(struct bpf_d *d)
|
|||
/*
|
||||
* Notification from the BPF framework that a buffer has moved into the held
|
||||
* slot on a descriptor. Zero-copy BPF will update the shared page to let
|
||||
* the user process know and flag the buffer as immutable if it hasn't
|
||||
* already been marked immutable due to filling while it was in the store
|
||||
* position.
|
||||
* the user process know and flag the buffer as assigned if it hasn't already
|
||||
* been marked assigned due to filling while it was in the store position.
|
||||
*
|
||||
* Note: identical logic as in bpf_zerocopy_buffull(), except that we operate
|
||||
* on bd_hbuf and bd_hlen.
|
||||
|
|
@ -402,8 +401,8 @@ bpf_zerocopy_bufheld(struct bpf_d *d)
|
|||
zb = (struct zbuf *)d->bd_hbuf;
|
||||
KASSERT(zb != NULL, ("bpf_zerocopy_bufheld: zb == NULL"));
|
||||
|
||||
if ((zb->zb_flags & ZBUF_FLAG_IMMUTABLE) == 0) {
|
||||
zb->zb_flags |= ZBUF_FLAG_IMMUTABLE;
|
||||
if ((zb->zb_flags & ZBUF_FLAG_ASSIGNED) == 0) {
|
||||
zb->zb_flags |= ZBUF_FLAG_ASSIGNED;
|
||||
zb->zb_header->bzh_kernel_len = d->bd_hlen;
|
||||
atomic_add_rel_int(&zb->zb_header->bzh_kernel_gen, 1);
|
||||
}
|
||||
|
|
@ -411,7 +410,8 @@ bpf_zerocopy_bufheld(struct bpf_d *d)
|
|||
|
||||
/*
|
||||
* Notification from the BPF framework that the free buffer has been been
|
||||
* re-assigned. This happens when the user ackknowledges the buffer.
|
||||
* rotated out of the held position to the free position. This happens when
|
||||
* the user acknowledges the held buffer.
|
||||
*/
|
||||
void
|
||||
bpf_zerocopy_buf_reclaimed(struct bpf_d *d)
|
||||
|
|
@ -422,9 +422,9 @@ bpf_zerocopy_buf_reclaimed(struct bpf_d *d)
|
|||
("bpf_zerocopy_reclaim_buf: not in zbuf mode"));
|
||||
|
||||
KASSERT(d->bd_fbuf != NULL,
|
||||
("bpf_zerocopy_buf_reclaimed: NULL free buff"));
|
||||
("bpf_zerocopy_buf_reclaimed: NULL free buf"));
|
||||
zb = (struct zbuf *)d->bd_fbuf;
|
||||
zb->zb_flags &= ~ZBUF_FLAG_IMMUTABLE;
|
||||
zb->zb_flags &= ~ZBUF_FLAG_ASSIGNED;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -467,7 +467,7 @@ bpf_zerocopy_canwritebuf(struct bpf_d *d)
|
|||
zb = (struct zbuf *)d->bd_sbuf;
|
||||
KASSERT(zb != NULL, ("bpf_zerocopy_canwritebuf: bd_sbuf NULL"));
|
||||
|
||||
if (zb->zb_flags & ZBUF_FLAG_IMMUTABLE)
|
||||
if (zb->zb_flags & ZBUF_FLAG_ASSIGNED)
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
|
@ -510,7 +510,7 @@ bpf_zerocopy_ioctl_getzmax(struct thread *td, struct bpf_d *d, size_t *i)
|
|||
|
||||
/*
|
||||
* Ioctl to force rotation of the two buffers, if there's any data available.
|
||||
* This can be used by user space to implement time outs when waiting for a
|
||||
* This can be used by user space to implement timeouts when waiting for a
|
||||
* buffer to fill.
|
||||
*/
|
||||
int
|
||||
|
|
|
|||
Loading…
Reference in a new issue