svn commit: r309374 - in head: sbin/camcontrol sys/cam/scsi
Kyle Evans
kevans91 at ksu.edu
Sat Dec 3 05:00:31 UTC 2016
On Thu, Dec 1, 2016 at 4:20 PM, Kenneth D. Merry <ken at freebsd.org> wrote:
> Author: ken
> Date: Thu Dec 1 22:20:27 2016
> New Revision: 309374
> URL: https://svnweb.freebsd.org/changeset/base/309374
>
> Log:
> Add SCSI REPORT TIMESTAMP and SET TIMESTAMP support.
>
> This adds support to camcontrol(8) and libcam(3) for getting and setting
> the time on SCSI protocol drives. This is more commonly found on tape
> drives, but is a SPC (SCSI Primary Commands) command, and may be found
> on any device that speaks SCSI.
>
> The new camcontrol timestamp subcommand allows getting the current device
> time or setting the time to the current system time or any arbitrary time.
>
> sbin/camcontrol/Makefile:
> Add timestamp.c.
>
> sbin/camcontrol/camcontrol.8:
> Document the new timestamp subcommand.
>
> sbin/camcontrol/camcontrol.c:
> Add the timestamp subcommand to camcontrol.
>
> sbin/camcontrol/camcontrol.h:
> Add the timestamp() function prototype.
>
> sbin/camcontrol/timestamp.c:
> Timestamp setting and reporting functionality.
>
> sys/cam/scsi/scsi_all.c:
> Add two new CCB building functions, scsi_set_timestamp() and
> scsi_report_timestamp(). Also, add a new helper function,
> scsi_create_timestamp().
>
> sys/cam/scsi/scsi_all.h:
> Add CDB and parameter data for the the set and report timestamp
> commands.
>
> Add function declarations for the new CCB building and helper
> functions.
>
> Submitted by: Sam Klopsch
> Sponsored by: Spectra Logic
> MFC After: 2 weeks
>
> Added:
> head/sbin/camcontrol/timestamp.c (contents, props changed)
> Modified:
> head/sbin/camcontrol/Makefile
> head/sbin/camcontrol/camcontrol.8
> head/sbin/camcontrol/camcontrol.c
> head/sbin/camcontrol/camcontrol.h
> head/sys/cam/scsi/scsi_all.c
> head/sys/cam/scsi/scsi_all.h
>
> Modified: head/sbin/camcontrol/Makefile
> ...
> +timestamp(struct cam_device *device, int argc, char **argv, char *combinedopt,
> + int retry_count, int timeout, int verbosemode __unused)
> +{
> + int c;
> + uint64_t ts;
> + char *format_string = NULL;
> + char *timestamp_string = NULL;
> + int action = -1;
> + int error = 0;
> + int single_arg = 0;
> + int do_utc = 0;
> +
> + if (action == TIMESTAMP_REPORT) {
> + error = report_timestamp(device, &ts, retry_count,
> + timeout);
> + if (error != 0) {
> + goto bailout;
> + } else if (strcmp(format_string, MIL) == 0) {
> + printf("Timestamp in milliseconds: %ju\n",
> + (uintmax_t)ts);
> + } else {
> + char temp_timestamp_string[100];
> + time_t time_var = ts / 1000;
Hi,
FWIW: Building -CURRENT on mips.mips (w/ freebsd-wifi-build),
mips-gcc gets upset at the above line with the following error:
/wifi-build/src/sbin/camcontrol/timestamp.c: In function 'timestamp':
/wifi-build/src/sbin/camcontrol/timestamp.c:459:25: error: 'ts' may be
used uninitialized in this function [-Werror=maybe-uninitialized]
time_t time_var = ts / 1000;
I understand that this is a bogus error because at this point it
pretty much *has* to be set by the report_timestamp call just prior,
but is there a clean way to trick GCC into agreeing, or is it just a
matter of explicitly initializing it to 0 before the report_timestamp
call?
Thanks,
Kyle Evans
More information about the svn-src-head
mailing list