Lines Matching defs:ks
207 kstatioc_leave(struct kstat_req *ksreq, struct kstat *ks)
214 if (ks == NULL) {
219 switch (ks->ks_state) {
221 ksreq->ks_updated = ks->ks_created;
229 ksreq->ks_dataver = ks->ks_dataver;
230 ksreq->ks_interval = ks->ks_interval;
234 kstat_enter(ks);
235 ksreq->ks_datalen = ks->ks_datalen;
236 ksreq->ks_updated = ks->ks_updated;
237 kstat_leave(ks);
241 klen = ks->ks_datalen; /* KSTAT_F_REALLOC */
248 kstat_enter(ks);
249 error = (*ks->ks_read)(ks);
251 updated = ks->ks_updated;
254 KASSERTMSG(ks->ks_datalen == klen,
257 error = (*ks->ks_copy)(ks, buf);
259 kstat_leave(ks);
269 panic("ks %p unexpected state %u", ks, ks->ks_state);
273 ksreq->ks_id = ks->ks_id;
275 if (strlcpy(ksreq->ks_provider, ks->ks_provider,
277 panic("kstat %p provider string has grown", ks);
278 ksreq->ks_instance = ks->ks_instance;
279 if (strlcpy(ksreq->ks_name, ks->ks_name,
281 panic("kstat %p name string has grown", ks);
282 ksreq->ks_unit = ks->ks_unit;
284 ksreq->ks_created = ks->ks_created;
285 ksreq->ks_type = ks->ks_type;
286 ksreq->ks_state = ks->ks_state;
304 struct kstat *ks, key;
313 ks = RBT_FIND(kstat_id_tree, &kstat_id_tree, &key);
315 return (kstatioc_leave(ksreq, ks));
321 struct kstat *ks, key;
330 ks = RBT_NFIND(kstat_id_tree, &kstat_id_tree, &key);
332 return (kstatioc_leave(ksreq, ks));
338 struct kstat *ks, key;
350 ks = RBT_FIND(kstat_pv_tree, &kstat_pv_tree, &key);
352 return (kstatioc_leave(ksreq, ks));
358 struct kstat *ks, key;
370 ks = RBT_NFIND(kstat_pv_tree, &kstat_pv_tree, &key);
372 return (kstatioc_leave(ksreq, ks));
378 struct kstat *ks, key;
390 ks = RBT_FIND(kstat_nm_tree, &kstat_nm_tree, &key);
392 return (kstatioc_leave(ksreq, ks));
398 struct kstat *ks, key;
410 ks = RBT_NFIND(kstat_nm_tree, &kstat_nm_tree, &key);
412 return (kstatioc_leave(ksreq, ks));
505 struct kstat *ks, *oks;
514 ks = pool_get(&kstat_pool, PR_WAITOK|PR_ZERO);
516 ks->ks_provider = provider;
517 ks->ks_instance = instance;
518 ks->ks_name = name;
519 ks->ks_unit = unit;
520 ks->ks_flags = flags;
521 ks->ks_type = type;
522 ks->ks_state = KSTAT_S_CREATED;
524 getnanouptime(&ks->ks_created);
525 ks->ks_updated = ks->ks_created;
527 ks->ks_lock = &kstat_default_lock;
528 ks->ks_lock_ops = &kstat_wlock_ops;
529 ks->ks_read = kstat_read;
530 ks->ks_copy = kstat_copy;
533 ks->ks_id = kstat_next_id;
535 oks = RBT_INSERT(kstat_pv_tree, &kstat_pv_tree, ks);
541 oks = RBT_INSERT(kstat_nm_tree, &kstat_nm_tree, ks);
543 panic("kstat name collision! (%llu)", ks->ks_id);
545 oks = RBT_INSERT(kstat_id_tree, &kstat_id_tree, ks);
547 panic("kstat id collision! (%llu)", ks->ks_id);
552 pool_put(&kstat_pool, ks);
556 return (ks);
560 kstat_set_rlock(struct kstat *ks, struct rwlock *rwl)
562 KASSERT(ks->ks_state == KSTAT_S_CREATED);
564 ks->ks_lock = rwl;
565 ks->ks_lock_ops = &kstat_rlock_ops;
569 kstat_set_wlock(struct kstat *ks, struct rwlock *rwl)
571 KASSERT(ks->ks_state == KSTAT_S_CREATED);
573 ks->ks_lock = rwl;
574 ks->ks_lock_ops = &kstat_wlock_ops;
578 kstat_set_mutex(struct kstat *ks, struct mutex *mtx)
580 KASSERT(ks->ks_state == KSTAT_S_CREATED);
582 ks->ks_lock = mtx;
583 ks->ks_lock_ops = &kstat_mutex_ops;
600 kstat_set_cpu(struct kstat *ks, struct cpu_info *ci)
602 KASSERT(ks->ks_state == KSTAT_S_CREATED);
604 ks->ks_lock = ci;
605 ks->ks_lock_ops = &kstat_cpu_ops;
609 kstat_read_nop(struct kstat *ks)
615 kstat_install(struct kstat *ks)
617 if (!ISSET(ks->ks_flags, KSTAT_F_REALLOC)) {
618 KASSERTMSG(ks->ks_copy != NULL || ks->ks_data != NULL,
619 "kstat %p %s:%u:%s:%u must provide ks_copy or ks_data", ks,
620 ks->ks_provider, ks->ks_instance, ks->ks_name, ks->ks_unit);
621 KASSERT(ks->ks_datalen > 0);
625 ks->ks_state = KSTAT_S_INSTALLED;
630 kstat_remove(struct kstat *ks)
633 KASSERTMSG(ks->ks_state == KSTAT_S_INSTALLED,
634 "kstat %p %s:%u:%s:%u is not installed", ks,
635 ks->ks_provider, ks->ks_instance, ks->ks_name, ks->ks_unit);
637 ks->ks_state = KSTAT_S_CREATED;
642 kstat_destroy(struct kstat *ks)
645 RBT_REMOVE(kstat_id_tree, &kstat_id_tree, ks);
646 RBT_REMOVE(kstat_pv_tree, &kstat_pv_tree, ks);
647 RBT_REMOVE(kstat_nm_tree, &kstat_nm_tree, ks);
651 pool_put(&kstat_pool, ks);
655 kstat_read(struct kstat *ks)
657 getnanouptime(&ks->ks_updated);
662 kstat_copy(struct kstat *ks, void *buf)
664 memcpy(buf, ks->ks_data, ks->ks_datalen);