From owner-svn-src-head@freebsd.org Sat Dec 3 05:00:31 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 336EAC4AA37; Sat, 3 Dec 2016 05:00:31 +0000 (UTC) (envelope-from kevans91@ksu.edu) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0043.outbound.protection.outlook.com [104.47.40.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "Microsoft IT SSL SHA2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A79131089; Sat, 3 Dec 2016 05:00:29 +0000 (UTC) (envelope-from kevans91@ksu.edu) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ksu.edu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=7iXOC88RAQE3aeLhYCGKsvwhN2U2Akn5hqHnxeB1+aY=; b=qU97gb7TTZ/4SvD5Beaq9xybGC6jqc1FRyEoRCc/GmHaQSFxGNAtPvRehghuSE6TXM4HOMs4yFVtPDCX8jHhkNsLS+8obMS1Wa3TYiFk7a/bD0EuAjwFhdA7ZO+7LdOBPEhRfCLPg9UnjCXEcKfh6ai+6xKcFUzVXpANrR+kDuM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kevans91@ksu.edu; Received: from mail-yw0-f174.google.com (209.85.161.174) by CY1PR0501MB1324.namprd05.prod.outlook.com (10.160.226.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.5; Sat, 3 Dec 2016 04:45:09 +0000 Received: by mail-yw0-f174.google.com with SMTP id a10so228332472ywa.3; Fri, 02 Dec 2016 20:45:09 -0800 (PST) X-Gm-Message-State: AKaTC02tVK8Reyu+YeF+fMDoUaB15hmiYBrrodIieWpWKteuTrghCI7q06FQLx8CuK2EhxDjKC+wzodzT5zb6Q== X-Received: by 10.13.247.65 with SMTP id h62mr49054579ywf.56.1480740303642; Fri, 02 Dec 2016 20:45:03 -0800 (PST) MIME-Version: 1.0 Received: by 10.37.5.12 with HTTP; Fri, 2 Dec 2016 20:44:43 -0800 (PST) In-Reply-To: <201612012220.uB1MKSbR054941@repo.freebsd.org> References: <201612012220.uB1MKSbR054941@repo.freebsd.org> From: Kyle Evans Date: Fri, 2 Dec 2016 22:44:43 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r309374 - in head: sbin/camcontrol sys/cam/scsi To: "Kenneth D. Merry" CC: , , Content-Type: text/plain; charset="UTF-8" X-Originating-IP: [209.85.161.174] X-ClientProxiedBy: BN3PR16CA0006.namprd16.prod.outlook.com (10.165.112.144) To CY1PR0501MB1324.namprd05.prod.outlook.com (10.160.226.141) X-MS-Office365-Filtering-Correlation-Id: 7cf0b403-6735-430e-a8d2-08d41b372969 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0501MB1324; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0501MB1324; 3:Y1ik/7L7Rk/7BEGBPSavMJAAys7pU22+XkVyvR5SB/G1BoBHddDNvqydDhpAjKHTk/+OW7FNlalpq4oDkup4Z9xtB7RranlzXA+1RHD3sz4dDfKJBQjAD/+A3IZH59kC7t5SDuyxBaiQuX+/ssTPZ8AGB5DohvRl/AFIzhXJdeYBSr7jzAShAwQrqxVMc5yFVYvJbytKfbf4wH3HvBK3ExMGNPrsJl+/OE+41K/DLMDeGs2vzK7bV4utXSi4HbiWN+8EEzlU9ahjyuCmRPoDTA== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0501MB1324; 25:EDi8nsmejSesKBsmber8amS8XD82hQJKDjWp6bHkvRZRgpwIZiSfzOdF5/3C77VceYUkCBInFCKcuQt8xqX65GszBaRGwxwmLMpMapbJUsKJncqaBOCyftEt+kTD44KqTW4VUbCu36seniuJ3D/DtFUqsrAftaOt/F9ex8I6ueF3V/dTj7hTMBbsb2i92F/5jVUOaQBIAs+ThUbbHyRT74Cwm+mu9g6GfSdXIHH1BpetUEOB7WzNaWutzMKnpLHYbBNHOfie8RjpYp1IPtL1ZIQALicheb0lSzLf15lknJa47ZFjRsdAoMR2t6b0bAUgLw3nOFEfDvxdwhqPT/4qhb1BYOoc/Wlvm/c4TTTAC4foSiutJOCrUk+IDrP8G1L/vfFB3lU7nLMM/2jGET8N3hxfqL/1l9Ktt8ThsBKH2yvnHiQmkD4GyyY5DgHQ8oHdFPG3spkdrY/Ywtn2qZjizoViFBZzkMdObtDHUptWpZ5acUBPoQjvHiNcDQKF8UhI2khRk0dH0l30GCUoZkU/8AEoOZl+APYpkYCrTZlIuRznURKF5zVRdt01tt+2QsesBtWIUYCaZTgVY3ugJdJ5GT5hPEQHf/DbcuqqyExoBjgjP7OYnB9z2Mu8OLIJtkJq7amRI4z62pCavuCTh3YU8MLQ1nHEOBMAAmHNX0Cl7FwLNGWGqfSBz9RBd2FD2MB0mPomvCaTInU8RWBxBGGl0AemLGmRI6Alz2bdAtD+MZQYxGjd9F5jZSKmE0LlOkjAKW5mpzQVOOakZP1jcUqBnA3eKP0IfK9KhANTyYqr4epW/ohdtnPynluZtk2tigyhIuof5VRHbo5Z3q0DcoK6a77wMMcCQcWNixLSyNiGk5qUn1hPsBrPadyVqTgv0CTH X-Microsoft-Exchange-Diagnostics: 1; CY1PR0501MB1324; 31:On66lkMUpe5i3zB4XuZXwiVtTtj42puOXSBW9N4m+wCQMqFq9u9pY1xwqXOnB064c8EMp4HrZU1XB77zykBPDi04u3H012vRYJnjVLJGTuEFWVigpJwr9kv+ZavlNfo0EwjCEeMyprQ6Ou9MCJkff1ksgsD4/umLpNe2GDBaz/0Z908ThS7pIJ1HQ8+UDCxl3ISvtFBpN4VrohoDKtAhKaj36HaBoqkM+C4dzT9wLGQkJvMhEQg1xtWaSOgh1sdqN+4M0z2yjGTX3H36YdqJzQ==; 20:2Ybv8gfUyF7DsIu768jHpox/wSCiaL9LJn0ijwBEF/DoR2LWrFxT8HcPn76d6iHOYAmD0+bAsOib6JjgfSmqWaIwReN9GTfBPNNe1CHVQNLQIye6BIBtlgnp08t9+6ekLF8FRVmTuNzAeqo7mmnIBqRY9XvuYFx70aCJYl2Aduj8ECrLyhbaue05WhcufvgA4fj1PwJLkOvYiTY8d3LZQV3eJAF9vY1Ta2jGxvQeofqruuCSOyc++V27UB2vubWZ0g+QPT0EqkQZROjL8Ko4FaOHbWY6S6VJDI2hPz5tz5mXMfz/k/Oj2YOZ+LCAt61oWaMsVUJ/wiyLDFdx/FkdN+xmVAEt5mGmWYzrsvbSSVtxDWb5hAYvIOpbwshLJJgXALAxjiCHBOFPU6Ni2Y60ilzsTOlaMfJbbKwKsdbJ/rB+QkNl/ipnJgOWS1edFDHYbXQtSX7lk7lErJwIosB86ziZ8YP5meRH2pW3qPSEZKiay2kZm09uC6xS8dGCjrJH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(56005881305849)(211171220733660); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(6072148); SRVR:CY1PR0501MB1324; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0501MB1324; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0501MB1324; 4:YhB2alo8Y+ZMQM2udDBN4rdUfSQ5ikyTndXJZWz8DR07YgBjuuQQBwirDWlShSTbzcOA3/tby5gpRjuqjjITK+d74WZvgSZ3tTEnb1NCL8BELSOnBS8sMUTr1f1CAXhODsxXAaqmKed/nQmydXzaI6L5wuhJZfBBRmfrp0JkWa7XlyVdIILcKpLZkQ+8ZVO6oQajxFfGUhTHpuG2ZLJBx+fJuPT6wfxglP0ed2valQoz5EeXcgpHcEQE8DVFsw2RttaJeHkn+o4RQJC0AiSFcKDm8pT2FQV6JAw7V4Ik6l+tXDjB8/nDKPp0QwtIbYdSULF8s9nbruBgKNHZgDCOUpQ7356pAtNGVb44zf94sl/vpY7dA29nWc+Ie+pfzT3JMtljLyC0qwKS/RU2meYU7949THp+ucM3WTdx5W5abrBzz2OlytW0KhVaPwc10M9xNAVOD3P4XaMhS0FvnZwXqyajUi3/CAhtraXjtBUtURzi5cWs5vBgxsmlB0UM7Wi3zrACb1Gz4xTOKpKhRzbTQqaPbP5/7Frh4xhkM2enw7hd+sLLz0M+UMoP2E+TuNqOH4WsumoWZS8GYqnRjNM9qFILAlo/db5eDNR3z013Dzk+iu/y6OrG/v/XfvalD+OM2jeYqG8ykCzLRRWINaVabg== X-Forefront-PRVS: 0145758B1D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(13624006)(24454002)(377454003)(38730400001)(9896002)(68736007)(450100001)(122856001)(5820100001)(9686002)(69596002)(4326007)(90282001)(106356001)(105586002)(229853002)(97736004)(42186005)(8676002)(66066001)(92566002)(81156014)(86362001)(81166006)(50466002)(47776003)(61266001)(59536001)(55446002)(23676002)(305945005)(189998001)(89122001)(88552002)(39450400002)(63696999)(7736002)(2950100002)(3846002)(7846002)(54356999)(6116002)(50986999)(101416001)(6916009)(76176999)(75432002)(110136003)(2906002)(93516999)(61726006)(5660300001)(55456009); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0501MB1324; H:mail-yw0-f174.google.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: ksu.edu does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTFQUjA1MDFNQjEzMjQ7MjM6Q0RDeGZmMHQ1VytJQUR6cVplalo0VWlG?= =?utf-8?B?ZndObzE4Q1RJSDZVMVBGd001dG5GV2xoZUErSytMRWUxY2oyMDlMZTZmd2Fv?= =?utf-8?B?em9iclhtYmJ0REVQUjc1QmdtblE3ckZJUm1McHdFZnJ2MjE0ME9laFo5QVVn?= =?utf-8?B?bnlPakRMVE91RDFManIzT0hZbE94akFmRWsrazRlem9IeG42MFYxZ0VvUmVC?= =?utf-8?B?VkZVVnRsQmJoeDVJY1M0eXphVkZxc2xUZUhRclJGY21hbWNFOWZiUzI3Yy83?= =?utf-8?B?U1ZmSms2QllNU0RaRFR4bXhnOTFtR0k0c3F4WW9uejhqUFJuQ3hVdzNmUWxu?= =?utf-8?B?c2piODBHWDJlMUVVU0JteWZQYUZ5aXN1ZjhUbWZMeTRrZHpweXJlSjNEcEFr?= =?utf-8?B?NUJwN3hnUlZuOSs5VDcrZStYQVc5dU8yUDBCcXg0RlJTK0sxSUZXeG4vNkJt?= =?utf-8?B?TUpGd24yM1lsWWtXOSs4dnF2N05IOEFJS0d2OThERnlYSm9SanVUcnp0TFIz?= =?utf-8?B?QWxZQ25USlFTdUp5OStteWpkQnA2VXFsWjZ6VWVJZEVaZGYvam5EcTJyVkxk?= =?utf-8?B?V1BKUHY2WmhwbjVBTnRSb0NtVlhacXJiQW5HbXdSZUlFMFpNZm9iZlNJQXlr?= =?utf-8?B?V0tldi8ra0hLOVFyRXVQK0UxeENDaCtKQnpKWDFoMXA0QzhIYVJ0OHJtcW1N?= =?utf-8?B?VDlydXlKUDAwTERHdUJUVWVJRHRjc2VXNEhKR2NzSXIyRmJYRncwVXFXVTVY?= =?utf-8?B?QjlNU2MweXd3d2lxaXFucllnSkhma2N6OVBGM3FRbDNCK1R1aURLZk5DVlhY?= =?utf-8?B?Z24ybGNSYjlrZnVzOEhLZE9xS3A5Q1JmWkg2QzRwNXFaVWovQm1ES243YXFp?= =?utf-8?B?MW1FZG1wUnYyN2lNUHZRYnM1MlNJdkVUcWp6VFFmTE01eEI1b29WQU1Eanp2?= =?utf-8?B?RmJZZGNVVkpjVEtxYUVOb1pQL0RBMmdIYkdaNnN0dHgvK1E3UDNzcXNJTW1o?= =?utf-8?B?aTZFVStoSFNGem5JeTZPb2w0d3h0MjJQK3A4NDZiaWNONDVuV1hpb3ZnSHpq?= =?utf-8?B?cHd0aE9OU1ZiZlBheVJiQjY3MDNnMll5WldQSEJkajdnNG5LeDVNV09haUJF?= =?utf-8?B?ODJSOWh2clVQZTdQQjRTdWxCNkx5K0ZidWVETE1CUElpZGVqbFNmZWRuYm1K?= =?utf-8?B?WXZBY2hHaXhBZ3kwUXNFd1RNdFdCZTUwNjRlcDNKMWNEUkRhbFZlUXI2WEsr?= =?utf-8?B?Y2gxTmxQS0dYcDFtZktvV0dkajcvMzc2MHRTQUxTbndraVRRa25Gbk5veWhy?= =?utf-8?B?L0VaYWgzcXc4b3FUT2tRb3pvb0VIMlhHdU5RUFNvcjhPTWxiMjFzckRaVWxG?= =?utf-8?B?eVNzaHpoSFhtL2RjOVJ1dHJxVG9hcWFUdFJzVHRsSHFOcEREcDB4K0thYm03?= =?utf-8?B?YmdzSWhhSHpWcHlrVVZBcFpXMjBZS3dRUW12VlVWNS92L3YyUVFic1JDNEkw?= =?utf-8?B?ZEt4Sm81emM4ZTlTaFArU2sxamN6ZHBpZU84Y09xTVNwcHpQbHhkdWcrSG84?= =?utf-8?B?K1ZDMnUxMzB2dkw1UU85TVpuRjhWQmlXTUxHcG1rVDdVZ01jamFPU3ZrcGRW?= =?utf-8?B?YU8zcnhRVUE2eC96YUdqRDh0ZGp5K284MFM3WTlwVzg1ZGE1d1cwK2JUSVBy?= =?utf-8?B?Vlh1eWhKcCt3SXdPclRxRmVqSEsya3JKTlMxZVphcnA1a3dJRDBCM0F3alB4?= =?utf-8?B?SWoyMjBEOVZBQ0hCTDFVRk5BV0FOVm1UaTRORGoySDR2OHY4c0ZSV1pqTnMy?= =?utf-8?B?NUhML0U0WlRwbE5UZFZEdHVkcGpBVkd3Mm9hUTVKdnFPanhiZndjbWVzc3ZK?= =?utf-8?Q?9H3xhQmZfG8bc=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0501MB1324; 6:E6ASrq26vNz+H6Ogjg2bz+48gTsA0BitRyAG1glk/AdVbwtsrzFCt2NSupqZEmrpRgFY+65H1jbsmZVAgLtnf+hyf7L/YZbOGHrIm9Xa+AduxvL93EOH5MtGm4b3Rlw39YiMOgvDv+yeUZ8wWF8Al/VmVGYAorf1rgS1Y5ehpfqn/k6xH6lHErur5k4hHSuVfKjoP0h96pVe/22bH2tzMViyQaHyCaiYKCF5l0RDXEmM3CfSHsTakzOzhwBiId08/enth2FAKlgm/FybS1hcG2tL56fhsp+LQQH7oe9xJxVFU8DGX3x7mUCIdFplFckvWGR/QTMmCZfx43ny1BH9uoY0aT9R061LaY71sH9ziAczl47kYf7TBJob/7pG9h++uz2xKfQh262gXWbD2eCnWgpQd42zP4AT0gwC2M9OvW87qUlRe8QxX/kUOPpesEX93gD64yx+UiKCNnmpcLvoVA==; 5:2HQnJB4mRgNp0zSopWFlkQCzaEJ6baGKmKHR5eX6VYaGiWmZUCAEUUkRX/x2LAdVoAgdQx0eAne3PfHp3QuKPh7XKtOHs3MIiSDJMH4DBo47BNKlMGP/HHTG5Yb90iYXM4l12Cghq8OUTVYoq1dRGXfKZ3BUeOg9FIq1tbdePkw=; 24:AXLcKAHbnlO0/lY/SG9ZyP2GilpJR2hHw2ruUHYx21DIj1C12uflBJFfSBcavTRfC8J7xSN6ld/aYx/Tv5VoTcIQBdez016UK/ohwbDSeBc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0501MB1324; 7:jj6RNO4WJMme3IIbS4AvV39CU4mNdahDjXONMAW4AsQ6rjcIh1/jTp4fFX90c3jINQFB3WmrXApE811jBeAvPASBqON5u5kIiFCHFGDtfHyEDozUSZpuM+BiLKMWTIiWCl7poL9YSSuAcCymvga+hLS2/ELeXoyRaGDaWfGJX0zwg6ivMpSBO8B742UPrWE2jsJVvqG69ubcbfLMNoH6C+SqTCMU/Ybe010XBJD5J8/+j8vDxntux6E+OODnxYBs/iG6voRNGiZa5ZFzOuMcOmfnLIksfSWDfD2buj1JZwflqhbZtgbc8HhXgUCi4qLZ4EBSMqIln12gDuqZAqVoD3nzgRGhyzPv1tFqXCETq3gGqyNIA9mg8F23f5F8yxSTFUEmFnl19x2689kxPbYtk2nWIsz0CnjLF3DmIPuZL01FmtFxjFC8v+qkIvI+ccnvixl73F6yhj3dE5XCr4IHxg==; 20:W8eynyrhVGjdD4iZDKNYTytJk/8lW4XI68PTt8n/NwC+lXDUe2G+Dfv1wmrgbXYi9ZujAD4f/2Ym/TNNTP9F0y70BlCAVySF6a9xGDHaGJlqKCAcMJcUAPA+p0IHteDXqBvjkqKAsUMtNhHXHdmKJ9aBOMc0g4C7xB2FRArDmC8= X-OriginatorOrg: ksu.edu X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2016 04:45:09.7994 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0501MB1324 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Dec 2016 05:00:31 -0000 On Thu, Dec 1, 2016 at 4:20 PM, Kenneth D. Merry 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