Commit graph

15847 commits

Author SHA1 Message Date
Manu Gautam
d69c50aa2a usb: xhci: clean up command queue on HC halt failure as well
'Commit c9cabb7ee02bcb0c ("usb: xhci: clean up command queue when
halting"); fixes deadlock condition when some commands are pending
at the time of usb_remove_hcd() or when controller is halted.
That change cleans up command queue if halting of controller is
successful. But, this deadlock may still be seen in case if due
to some reason halting of controller fails. To handle that scenario
as well cleanup command queue irrespective of controller halt
succeeds or fails.

Change-Id: I2c88fca3614af7fe58bc858898449d47546da247
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
2016-09-29 17:20:19 -07:00
Jack Pham
8b01cb751c usb: pd: Print out source/sink subtypes
Add additional verbiage to the info logs to help
determine the type of source cable connected: default,
medium or high current. Similarly, if a sink is attached,
indicate whether it is with a powered cable or not.

Change-Id: I0687365827cdbb8a1b7168a2b676b1afd2f576f6
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-28 18:40:14 -07:00
Vamsi Krishna Samavedam
e43496ce13 usb: dwc3: fix overriding core clock rate to default max
Fix the bug introduced by commit 82d4ec9778
("usb: Add support for reset controller framework") which
overrides the core clock rate from device tree.

Change-Id: Ic3ef2229fa8552301e09dfb912e79e044a81324f
Signed-off-by: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
2016-09-28 10:56:12 -07:00
Hemant Kumar
85cc38fca2 usb: pd: Add support to set the maximum speed via extcon
Driver sets the speed using extcon cable state flag. This
allows to start host or peripheral in selected speed.
By default start peripheral in super speed mode. However,
starting host in super speed consumes more power so to
achieve lower consumption default it to high speed only.

Add module params to override the default behavior as follows:

 # echo Y|N > /sys/module/policy_engine/parameters/ss_dev
 # echo Y|N > /sys/module/policy_engine/parameters/ss_host

Change-Id: I2a45a4149f593a129b4dd123df730405169404f9
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-26 17:47:44 -07:00
Jack Pham
3b64c4cead usb: pd: Return different errors in devm_usbpd_get_by_phandle()
Allow callers of devm_usbpd_get_by_phandle() to distinguish
between different errors depending on what failure is encountered.
For instance, return -EPROBE_DEFER if the device is available
but not yet probed, which allows callers to appropriately try
again later.

Change-Id: I96b03d0a4c2a04a405af5a40f9f713443bc5769b
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-26 10:41:25 -07:00
Linux Build Service Account
02663bfe05 Merge "usb: gadget: f_cdev: Avoid potential NULL pointer dereference" 2016-09-24 02:00:41 -07:00
Linux Build Service Account
0a20333b02 Merge "USB: gadget: f_fs: Use %zu when printing size_t" 2016-09-23 20:19:08 -07:00
Linux Build Service Account
4fbca7b158 Merge "usb: gadget: gsi: Set NUM_OF_TRB as 15 for IN and OUT GSI endpoints" 2016-09-23 20:19:08 -07:00
Linux Build Service Account
00193d2edf Merge "dwc3: core: clear DELAYP1TRANS with USB3PIPECTL register" 2016-09-23 20:19:07 -07:00
Linux Build Service Account
8da923f7e0 Merge "usb: phy: qusb: Reset clock mux to avoid leakage on vdd rail" 2016-09-23 20:19:06 -07:00
Linux Build Service Account
6ae0998ab6 Merge "usb: gadget: composite: fix dereference after null check coverify warning" 2016-09-23 20:19:04 -07:00
Linux Build Service Account
25d60ce52e Merge "usb: gadget: Enable L1 suspend by default" 2016-09-23 20:19:03 -07:00
Mayank Rana
1ed274d00a usb: gadget: f_cdev: Avoid potential NULL pointer dereference
Fix possible NULL pointer dereference issue as strrchr() API can
return NULL if there is no port_num found as part of passed string.

Change-Id: I410e58361282f175e46b68cbfaf4824e386454f8
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-23 11:40:37 -07:00
Mayank Rana
40ea40878a usb: gadget: f_cdev: Remove func_name and port_num attributes
func_name and port_num attributes related information is already
available as part of created driver instance name itself. These
attributes don't give any valuable information. Hence remove both
attributes and related functionality. Add check against length of
func_name.

CRs-Fixed: 1069476
Change-Id: Ibfc050cda62cfc7e5838949ae833a9d7c0a59303
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-23 11:38:55 -07:00
Mayank Rana
f1288259bf usb: gadget: f_cdev: Fix memory leak with func_name
func_name related memory is allocated on creating instance of driver with
cser_set_inst_name() API with usage of kstrndup(). If cser_set_inst_name()
returns non-zero value or driver instance is released, this func_name
related memory is not freed. Fix this memory leak by freeing func_name from
cser_free_inst() API.

CRs-Fixed: 1070060
Change-Id: I7ba4c5a65bb01d056b4d2690fe30f7cbe47ba311
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-22 11:59:14 -07:00
Manu Gautam
d0bdc926c4 USB: gadget: f_fs: Use %zu when printing size_t
Using %lu for size_t gives compilation error on 32bit system.
Replace this with %zu which should be used to print size_t on
both 32bit and 64bit machines.

Change-Id: Id8a42dec3e081187054cb2353ba3473bae9dd547
CRs-fixed: 1069970
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
2016-09-22 16:34:27 +05:30
Peter Chen
19e19a1710 usb: gadget: composite: fix dereference after null check coverify warning
cdev->config is checked for null pointer at above code, so cdev->config
might be null, fix it by adding null pointer check.

Change-Id: Ie919a2a886924f1b1e01415bfdaa53f74046f5b0
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Git-commit: c526c62d565ea5a5bba9433f28756079734f430d
Git-repo: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-21 14:51:35 -07:00
Mayank Rana
1fdef7ce53 dwc3: core: clear DELAYP1TRANS with USB3PIPECTL register
Commit fd115e68971b ("dwc3: core: Don't perform controller and PHYs
soft reset") removed clearing DELAYP1TRANS. It is recommended to clear
DELAYP1TRANS bit with USB3PIPECTL register which controls USB
controller allowing USB QMP PHY low power transitions.

Change-Id: I54ba694f4c997bf5ecc540cee274e2cb07b77446
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-21 09:12:06 -07:00
Jack Pham
2d50ef2cf3 usb: pd: Avoid potential NULL ptr dereferences
Check that a valid pointer was passed in addition to non-zero
length to avoid dereferencing NULL pointers in functions
where data is copied from policy engine to the PD PHY.

Issues were identified with static analysis tool.

Change-Id: Ib42aad9e0d838eda4653e0bab9f074b3031983dd
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-20 09:18:25 -07:00
Linux Build Service Account
55ef1608c4 Merge "Revert "usb: dwc3: gadget: start requests as soon as they come"" 2016-09-19 23:28:17 -07:00
Linux Build Service Account
f71d743cf0 Merge "Revert "usb: dwc3: gadget: use update transfer command"" 2016-09-19 23:28:16 -07:00
Hemant Kumar
a778927e2c usb: gadget: Enable L1 suspend by default
Currently L1 suspend is disabled. Superspeed capable
device needs to support L1 suspend in HS/FS/LS mode.
Also, add module parameter to disable L1 suspend in
High speed mode.

Change-Id: Ie8e7f3949d276325305799640f2775343bd6b9da
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-19 17:35:44 -07:00
Hemant Kumar
a5b4466d33 usb: dwc3: Add support to select maximum speed via extcon notification
Use extcon notification to select the maximum speed for host as well
as for peripheral mode. Notification handler sets maximum speed based
on the extcon cable state flag. This provides an option to start host
or peripheral in high speed only mode and leave ss phy suspended.

Change-Id: Ic48c661e68a293822d30cbd491e0fe6e46d385c9
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-19 16:38:01 -07:00
Vamsi Krishna Samavedam
982bc86081 usb: phy: qusb: Reset clock mux to avoid leakage on vdd rail
Reset the clock mux when cable is disconnected and suspended
to avoid leakage on vdd rail. Also, add missing clock reset
when usb cable connect is notified.

Change-Id: If5485379934a222f19f5dd20b8d4f44769470e8d
Signed-off-by: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
2016-09-19 15:17:23 -07:00
Linux Build Service Account
4e2a8a0fa1 Merge "Revert "usb: dwc3: gadget: always enable IOC on bulk/interrupt transfers"" 2016-09-17 21:07:23 -07:00
Linux Build Service Account
d39931458e Merge "Revert "usb: gsi: Queue control notification on gsi_resume"" 2016-09-17 21:07:20 -07:00
Linux Build Service Account
a8db147fc1 Merge "USB: f_accessory: Fix NULL pointer dereference in acc_read()" 2016-09-17 21:07:16 -07:00
Mayank Rana
eeddeda6f7 usb: gadget: gsi: Set NUM_OF_TRB as 15 for IN and OUT GSI endpoints
It is recommended to use NUM_OF_TRB greater than USB controller's
TRB cache size. Currently USB controller's TRB cache size on GSI
available platform is 12. TRB ring base address must be aligned to
TRB ring length rounded to power of two. Hence set NUM_OF_TRB as
15 for both IN and OUT GSI endpoints.

CRs-Fixed: 1067833
Change-Id: Iab8b0bc6fd17183fc6056f06a90421cde24987c8
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-16 16:21:44 -07:00
Mayank Rana
427369cd5f Revert "usb: gsi: Queue control notification on gsi_resume"
This reverts commit <fae741edccb> ("usb: gsi: Queue control
notification on gsi_resume") as expected notification is not
queued resulting into mismatch of QMI transaction packet.

CRs-Fixed: 1067006
Change-Id: I4abdd79699d47054e268978aae9199f1d5d1ddcb
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-15 17:54:44 -07:00
Mayank Rana
b23d321b0a usb: gadget: gsi: Kick state machine with MESSAGE_PACKET_FILTER for RNDIS
commit <5b42bd749e8c> ("usb: gadget: gsi: Optimize TRB's buffer
allocation functionality") is kicking ipa_work_handler state
machine as part of set_alt() for RNDIS function which results
into giving max_xfer_size_bytes_to_host value as zero as
RNDIS_INIT_MSG from host may not have received here. This results
into low throughput due to device is sending more than accepted
aggregated bytes as part of one USB transfer to host. Fix this
issue by delaying RNDIS IPA initialization till MESSAGE_PACKET_FILTER
is received from host which makes sure that proper aggregation
parameters are passed to IPA driver to configure hardware
accerlerated path.

For non-rndis tethered interface, ipa_usb_notify_cb() posts EVT_CONNECTED
to enable IPA GSI data path (i.e. calling ipa_data_path_enable() API).

CRs-Fixed: 1065003
Change-Id: I4ce62745c82b4488cb1370248ab64951497493cd
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-15 08:55:40 -07:00
Linux Build Service Account
9ed8bfe3f2 Merge "Merge branch 'tmp-bab1564' into msm-4.4" 2016-09-13 05:43:53 -07:00
Hemant Kumar
b8b08404db Revert "usb: dwc3: gadget: start requests as soon as they come"
This reverts commit 1d6a39186b ("usb:
dwc3: gadget: start requests as soon as they come"). Queuing request
as soon as they come without waiting for XFER_NOT_READY event resulting
into usb transfer stall.

Change-Id: Ic08b2da2983a520a07a0b225254c068d499a67cc
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-12 19:56:13 -07:00
Hemant Kumar
3ba0c3fd0b Revert "usb: dwc3: gadget: start transfer on XFER_COMPLETE"
This reverts commit 8a1a9c9e45
("usb: dwc3: gadget: start transfer on XFER_COMPLETE"). This
optimization is resulting into transfer stall for an endpoint.
Hence start transfer only from XFER_NOT_READY event.

Change-Id: Idcd7ae3de3cb85b84c3db7f367b56b097561b2dd
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-12 19:36:57 -07:00
Runmin Wang
c568eb7aca Merge branch 'tmp-bab1564' into msm-4.4
* tmp-bab1564:
  ANDROID: mmc: Add CONFIG_MMC_SIMULATE_MAX_SPEED
  android: base-cfg: Add CONFIG_INET_DIAG_DESTROY
  cpufreq: interactive: only apply interactive boost when enabled
  cpufreq: interactive: fix policy locking
  ANDROID: dm verity fec: add sysfs attribute fec/corrected
  ANDROID: android: base-cfg: enable CONFIG_DM_VERITY_FEC
  UPSTREAM: dm verity: add ignore_zero_blocks feature
  UPSTREAM: dm verity: add support for forward error correction
  UPSTREAM: dm verity: factor out verity_for_bv_block()
  UPSTREAM: dm verity: factor out structures and functions useful to separate object
  UPSTREAM: dm verity: move dm-verity.c to dm-verity-target.c
  UPSTREAM: dm verity: separate function for parsing opt args
  UPSTREAM: dm verity: clean up duplicate hashing code
  UPSTREAM: dm: don't save and restore bi_private
  mm: Export do_munmap
  sdcardfs: remove unneeded __init and __exit
  sdcardfs: Remove unused code
  fs: Export d_absolute_path
  sdcardfs: remove effectless config option
  inotify: Fix erroneous update of bit count
  fs: sdcardfs: Declare LOOKUP_CASE_INSENSITIVE unconditionally
  trace: cpufreq: fix typo in min/max cpufreq
  sdcardfs: Add support for d_canonical_path
  vfs: add d_canonical_path for stacked filesystem support
  sdcardfs: Bring up to date with Android M permissions:
  Changed type-casting in packagelist management
  Port of sdcardfs to 4.4
  Included sdcardfs source code for kernel 3.0
  ANDROID: usb: gadget: Add support for MTP OS desc
  CHROMIUM: usb: gadget: f_accessory: add .raw_request callback
  CHROMIUM: usb: gadget: audio_source: add .free_func callback
  CHROMIUM: usb: gadget: f_mtp: fix usb_ss_ep_comp_descriptor
  CHROMIUM: usb: gadget: f_mtp: Add SuperSpeed support
  FROMLIST: mmc: block: fix ABI regression of mmc_blk_ioctl
  FROMLIST: mm: ASLR: use get_random_long()
  FROMLIST: drivers: char: random: add get_random_long()
  FROMLIST: pstore-ram: fix NULL reference when used with pdata
  usb: u_ether: Add missing rx_work init
  ANDROID: dm-crypt: run in a WQ_HIGHPRI workqueue
  misc: uid_stat: Include linux/atomic.h instead of asm/atomic.h
  hid-sensor-hub.c: fix wrong do_div() usage
  power: Provide dummy log_suspend_abort_reason() if SUSPEND is disabled
  PM / suspend: Add dependency on RTC_LIB
  drivers: power: use 'current' instead of 'get_current()'
  video: adf: Set ADF_MEMBLOCK to boolean
  video: adf: Fix modular build
  net: ppp: Fix modular build for PPPOLAC and PPPOPNS
  net: pppolac/pppopns: Replace msg.msg_iov with iov_iter_kvec()
  ANDROID: mmc: sdio: Disable retuning in sdio_reset_comm()
  ANDROID: mmc: Move tracepoint creation and export symbols
  ANDROID: kernel/watchdog: fix unused variable warning
  ANDROID: usb: gadget: f_mtp: don't use le16 for u8 field
  ANDROID: lowmemorykiller: fix declaration order warnings
  ANDROID: net: fix 'const' warnings
  net: diag: support v4mapped sockets in inet_diag_find_one_icsk()
  net: tcp: deal with listen sockets properly in tcp_abort.
  tcp: diag: add support for request sockets to tcp_abort()
  net: diag: Support destroying TCP sockets.
  net: diag: Support SOCK_DESTROY for inet sockets.
  net: diag: Add the ability to destroy a socket.
  net: diag: split inet_diag_dump_one_icsk into two
  Revert "mmc: Extend wakelock if bus is dead"
  Revert "mmc: core: Hold a wake lock accross delayed work + mmc rescan"
  ANDROID: mmc: move to a SCHED_FIFO thread

Conflicts:
	drivers/cpufreq/cpufreq_interactive.c
	drivers/misc/uid_stat.c
	drivers/mmc/card/block.c
	drivers/mmc/card/queue.c
	drivers/mmc/card/queue.h
	drivers/mmc/core/core.c
	drivers/mmc/core/sdio.c
	drivers/staging/android/lowmemorykiller.c
	drivers/usb/gadget/function/f_mtp.c
	kernel/watchdog.c

Signed-off-by: Runmin Wang <runminw@codeaurora.org>
Change-Id: Ibb4db11c57395f67dee86211a110c462e6181552
2016-09-12 18:25:49 -07:00
Hemant Kumar
b6271df1c9 Revert "usb: dwc3: gadget: use update transfer command"
This reverts commit 6bb4fe12ea
("usb: dwc3: gadget: use update transfer command"). If we get
a Xfer Not Ready event with reason "Transfer Active" issuing
update transfer for the endpoint for any pending request
results into transfer stall on the endpoint. Hence do not use
update transfer command for on-demad transfers.

Change-Id: Iec1c5913efe1dd266506f973951f22a2170fce77
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-12 15:43:56 -07:00
Mayank Rana
f5a8583fbb Revert "usb: dwc3: gadget: always enable IOC on bulk/interrupt transfers"
This change reverts Commit f3af36511e ("usb: dwc3: gadget: always
enable IOC on bulk/interrupt transfers") which sets IOC bit for both
bulk/interrupt transfers resulting into interrupt for each TRB
completion with event as XFERINPROGRESS. In some cases it has been
observed that controller is not able to complete provided TRB on
bulk-in endpoint causing stall conditions. Hence Fix this issue by not
setting IOC bit for each TRB to receive XFERCOMPLETE interrupt with it.

Change-Id: I5ff08188f37044332f7dadba8d677288e83bfec8
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-12 15:43:56 -07:00
Hemant Kumar
afaf5d0410 Revert "usb: dwc3: gadget: use Update Transfer from Xfer In Progress"
This reverts commit e6e709b7ab ("usb:
dwc3: gadget: use Update Transfer from Xfer In Progress"). Issueing
update transfer command for on-demand transfers reslting into
transfer stall.

Change-Id: I5dd4818e07a3297dd9226169741d8753b2f57a2e
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-12 15:43:56 -07:00
Mayank Rana
94a976091c dwc3: gadget: Avoid starting next transfer if transfer is active
XFERNOTREADY event provides status about current transfer. Hence
if transfer is active, then avoid starting next transfer by calling
__dwc3_gadget_kick_transfer() API. Otherwise USB controller stalls to
perform data transfer on that endpoint due to starting new transfer
without completing in progress transfer.

Change-Id: I90370e7e5de55b499a78fbfe5e913f39ec22c7e5
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-12 15:43:56 -07:00
Mayank Rana
ef529d5647 Revert "usb: dwc3: fix TRB completion when multiple TRBs are started"
commit 0b93a4c838 ("usb: dwc3: fix TRB completion when multiple TRBs
are started") enables XFERINPROGRESS event with all endpoint type
except control endpoint. Currently we are not using XFERINPROGRESS for
queuing next request and depends on XFERNOTREADY event only.

Change-Id: I833c2311c5af48fd15f2813df9cc83c3471c4f94
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-12 15:43:55 -07:00
Linux Build Service Account
bfb9253e65 Merge "USB: usbfs: fix potential infoleak in devio" 2016-09-12 14:42:24 -07:00
Linux Build Service Account
a2d7b195ec Merge "usb: dwc3-msm: Only set vbus_draw for SDP type" 2016-09-10 06:39:13 -07:00
Linux Build Service Account
6595d9c1cd Merge "usb: pd: Fix unbalanced vconn regulator disable" 2016-09-10 06:39:12 -07:00
Linux Build Service Account
d2f9d1e0e5 Merge "usb: gadget: u_ether: Add missing rx work initialization" 2016-09-10 06:39:04 -07:00
Jack Pham
abc22dbb35 usb: pd: Fix unbalanced vconn regulator disable
Make sure to only call regulator_disable() on VCONN only if
it was previously enabled, else it could result in an
unbalanced disable state. Subsequent enables would then be
no-ops and the regulator would not actually turn on.

Change-Id: I67a6ad6d2bc036a63714403e2eed8c0577ef0246
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-09-09 15:40:54 -07:00
Linux Build Service Account
cb8988669c Merge "usb: Add support for reset controller framework" 2016-09-09 01:26:06 -07:00
Linux Build Service Account
66d38bc53c Merge "usb: gadget: gsi: Fix handling of MSG PACKET FILTER" 2016-09-08 20:01:16 -07:00
Amit Nischal
82d4ec9778 usb: Add support for reset controller framework
The current api which performs the clock reset is moved to use the reset
framework, so support the changes in USB driver for the same. The reset
framework requires to get reset handle and perform assert/deassert of the
resets.

Change-Id: Ifcde1c6af624294cbd1944eaa9b526dd6dcc51de
Signed-off-by: Amit Nischal <anischal@codeaurora.org>
2016-09-07 21:06:22 -07:00
Kangjie Lu
3ae1cdb5b1 USB: usbfs: fix potential infoleak in devio
The stack object “ci” has a total size of 8 bytes. Its last 3 bytes
are padding bytes which are not initialized and leaked to userland
via “copy_to_user”.

Git-commit: 681fef8380eb818c0b845fca5d2ab1dcbab114ee
Git-repo: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git
Signed-off-by: Kangjie Lu <kjlu@gatech.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Dennis Cagle <d-cagle@codeaurora.org>
(cherry picked from commit 681fef8380eb818c0b845fca5d2ab1dcbab114ee)
Change-Id: Idacb2d5ed64654f85fb86fcce0a196223a7ac2af
2016-09-07 14:51:56 -07:00
Mayank Rana
e94b93aa7f usb: composite: Draw 900mA on USB resume if speed is super-speed
Per USB 3.1 specification, USB device can draw upto 900mA when
enumerated in super-speed mode and bus is resumed. Fix bug that is
requesting 500mA when bus is resumed when bus is operating in
super-speed mode.

CRs-Fixed: 1063393
Change-Id: I585f4c560f0920d3cb56cce009297b5665abb42e
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-09-07 10:17:23 -07:00
Linux Build Service Account
7773787201 Merge "usb: gsi: Queue control notification on gsi_resume" 2016-09-07 03:21:42 -07:00