Make USB statistics per device instead of per bus.

Bump the FreeBSD version due to structure change to
force recompilation of external USB modules.

MFC after:	1 week
Sponsored by:	Mellanox Technologies
This commit is contained in:
Hans Petter Selasky 2019-12-27 20:29:13 +00:00
parent 12fe21a3d8
commit 7082625d97
5 changed files with 18 additions and 17 deletions

View File

@ -2,7 +2,7 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
* Copyright (c) 2008-2019 Hans Petter Selasky. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -41,20 +41,11 @@ struct usb_bus_msg {
struct usb_bus *bus;
};
/*
* The following structure defines the USB statistics structure.
*/
struct usb_bus_stat {
uint32_t uds_requests[4];
};
/*
* The following structure defines an USB BUS. There is one USB BUS
* for every Host or Device controller.
*/
struct usb_bus {
struct usb_bus_stat stats_err;
struct usb_bus_stat stats_ok;
#if USB_HAVE_ROOT_MOUNT_HOLD
struct root_hold_token *bus_roothold;
#endif

View File

@ -2,7 +2,7 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
* Copyright (c) 2008-2019 Hans Petter Selasky. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -176,11 +176,22 @@ union usb_device_scratch {
uint8_t data[255];
};
/*
* Helper structure to keep track of USB device statistics.
*/
struct usb_device_statistics {
uint32_t uds_requests[4];
};
/*
* The following structure defines an USB device. There exists one of
* these structures for every USB device.
*/
struct usb_device {
/* statistics */
struct usb_device_statistics stats_err;
struct usb_device_statistics stats_ok;
/* generic clear stall message */
struct usb_udev_msg cs_msg[2];
struct sx enum_sx;

View File

@ -2223,10 +2223,9 @@ ugen_ioctl_post(struct usb_fifo *f, u_long cmd, void *addr, int fflags)
for (n = 0; n != 4; n++) {
u.stat->uds_requests_fail[n] =
f->udev->bus->stats_err.uds_requests[n];
f->udev->stats_err.uds_requests[n];
u.stat->uds_requests_ok[n] =
f->udev->bus->stats_ok.uds_requests[n];
f->udev->stats_ok.uds_requests[n];
}
break;

View File

@ -2594,10 +2594,10 @@ usbd_transfer_done(struct usb_xfer *xfer, usb_error_t error)
#endif
/* keep some statistics */
if (xfer->error) {
info->bus->stats_err.uds_requests
info->udev->stats_err.uds_requests
[xfer->endpoint->edesc->bmAttributes & UE_XFERTYPE]++;
} else {
info->bus->stats_ok.uds_requests
info->udev->stats_ok.uds_requests
[xfer->endpoint->edesc->bmAttributes & UE_XFERTYPE]++;
}

View File

@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
#define __FreeBSD_version 1300070 /* Master, propagated to newvers */
#define __FreeBSD_version 1300071 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,