| 680 | } |
| 681 | |
| 682 | void |
| 683 | ktrgenio(int fd, enum uio_rw rw, struct uio *uio, int error) |
| 684 | { |
| 685 | struct ktr_request *req; |
| 686 | struct ktr_genio *ktg; |
| 687 | int datalen; |
| 688 | char *buf; |
| 689 | |
| 690 | if (error) { |
| 691 | free(uio, M_IOV); |
| 692 | return; |
| 693 | } |
| 694 | uio->uio_offset = 0; |
| 695 | uio->uio_rw = UIO_WRITE; |
| 696 | datalen = MIN(uio->uio_resid, ktr_geniosize); |
| 697 | buf = malloc(datalen, M_KTRACE, M_WAITOK); |
| 698 | error = uiomove(buf, datalen, uio); |
| 699 | free(uio, M_IOV); |
| 700 | if (error) { |
| 701 | free(buf, M_KTRACE); |
| 702 | return; |
| 703 | } |
| 704 | req = ktr_getrequest(KTR_GENIO); |
| 705 | if (req == NULL) { |
| 706 | free(buf, M_KTRACE); |
| 707 | return; |
| 708 | } |
| 709 | ktg = &req->ktr_data.ktr_genio; |
| 710 | ktg->ktr_fd = fd; |
| 711 | ktg->ktr_rw = rw; |
| 712 | req->ktr_header.ktr_len = datalen; |
| 713 | req->ktr_buffer = buf; |
| 714 | ktr_submitrequest(curthread, req); |
| 715 | } |
| 716 | |
| 717 | void |
| 718 | ktrpsig(int sig, sig_t action, sigset_t *mask, int code) |
no test coverage detected