Sultan Alsawaf f80c966a5e kobject_uevent: Allocate environment buffer on the stack 5 years ago
..
842 b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
fonts f7267a7564 Fonts: Replace discarded const qualifier 4 years ago
lz4 02b2d8f65d lib/lz4: explicitly support in-place decompression 3 years ago
lzo b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
mpi fbab22111f lib/mpi: Fix 64-bit MIPS build with Clang 4 years ago
raid6 5efb8f94df lib/raid6: use vdupq_n_u8 to avoid endianness warnings 4 years ago
reed_solomon 9a3d442c24 rslib: Fix handling of of caller provided syndrome 5 years ago
vdso 8d34fed97c ANDROID: clock_gettime(CLOCK_BOOTTIME,) slows down >20x 3 years ago
xz bf4d064d89 lib/xz: enable all filters by default in Kconfig 10 years ago
zlib_deflate 8b235f2f16 zlib_deflate/deftree: remove bi_reverse() 9 years ago
zlib_inflate 660915b384 lib/zlib: remove outdated and incorrect pre-increment optimization 4 years ago
zstd 73f3d1b48f lib: Add zstd modules 7 years ago
.gitignore a77ad6ea0b X.509: Implement simple static OID registry 12 years ago
Kconfig 75644ed66f lib/scatterlist: Introduce sgl_alloc() and sgl_free() 5 years ago
Kconfig.debug 9ee2af535b mm: kmemleak: Don't require global debug options or debugfs 3 years ago
Kconfig.kasan 946c5d356a android: Import remaining from merlin-r-oss 3 years ago
Kconfig.kgdb 08c76a2f43 lib: update location of kgdb documentation 7 years ago
Kconfig.ubsan 946c5d356a android: Import remaining from merlin-r-oss 3 years ago
Makefile f80c966a5e kobject_uevent: Allocate environment buffer on the stack 3 years ago
argv_split.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
asn1_decoder.c 4c69b34050 ASN.1: check for error from ASN1_OP_END__ACT actions 7 years ago
assoc_array.c d366f51305 assoc_array: Fix shortcut creation 5 years ago
atomic64.c 28aa2bda22 locking/atomic: Implement atomic{,64,_long}_fetch_{add,sub,and,andnot,or,xor}{,_relaxed,_acquire,_release}() 8 years ago
atomic64_test.c ffba19ccae lib/atomic64_test.c: add a test that atomic64_inc_not_zero() returns an int 7 years ago
audit.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
bcd.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
bch.c 437aa565e2 lib: add shared BCH ECC library 14 years ago
bitmap.c 8f715caa52 bitmap: Add bitmap_alloc(), bitmap_zalloc() and bitmap_free() 5 years ago
bitrev.c 556d2f055b ARM: 8187/1: add CONFIG_HAVE_ARCH_BITREVERSE to support rbit instruction 10 years ago
bsearch.c e62824d1f8 kprobes: Prohibit probing on bsearch() 5 years ago
btree.c 90eec103b9 treewide: Remove old email address 9 years ago
bug.c 92a2ae7160 bug: Remove redundant condition check in report_bug 3 years ago
build_OID_registry a857c6e7d5 X.509: do not emit any informational output 11 years ago
bust_spinlocks.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
chacha.c 4c11fdd701 BACKPORT, FROMGIT: crypto: chacha - add XChaCha12 support 6 years ago
check_signature.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
checksum.c 01cfbad79a ipv4: Update parameters for csum_tcpudp_magic to their original types 9 years ago
clz_ctz.c 3c516cdd02 lib/clz_ctz.c: add prototype declarations in lib/clz_ctz.c 11 years ago
clz_tab.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
cmdline.c 7c61bd6983 lib/cmdline.c: remove meaningless comment 7 years ago
compat_audit.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
cordic.c d89ce936b4 Docs: wording: functions -> algorithm 13 years ago
cpu_rmap.c 06931e6224 sched/topology: Rename topology_thread_cpumask() to topology_sibling_cpumask() 9 years ago
cpumask.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
crc-ccitt.c 2f72100c01 [PATCH] kernel-doc for lib/crc*.c 18 years ago
crc-itu-t.c 94268fcd9a lib: crc-itu-t.[ch] fix 0x0x prefix in integer constants 9 years ago
crc-t10dif.c 10081fb532 lib: introduce crc_t10dif_update() 9 years ago
crc16.c 2f72100c01 [PATCH] kernel-doc for lib/crc*.c 18 years ago
crc32.c 6f0344af61 lib/crc32.c: fix trivial typo in preprocessor condition 4 years ago
crc32defs.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
crc32test.c dc64568652 lib/crc32test: remove extra local_irq_disable/enable 4 years ago
crc4.c 0cbaa44841 lib: Add crc4 module 7 years ago
crc7.c 1836eea209 lib/crc7: Shift crc7() output left 1 bit 10 years ago
crc8.c 7150962d63 lib: crc8: add new library module providing crc8 algorithm 13 years ago
ctype.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
debug_info.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
debug_locks.c 946c5d356a android: Import remaining from merlin-r-oss 3 years ago
debugobjects.c 225b113746 debugobjects: avoid recursive calls with kmemleak 6 years ago
dec_and_lock.c 946c5d356a android: Import remaining from merlin-r-oss 3 years ago
decompress.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
decompress_bunzip2.c 2d3862d26e lib/decompressors: use real out buf size for gunzip with kernel 9 years ago
decompress_inflate.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
decompress_unlz4.c d2e80fcae1 lib/decompress_unlz4.c: correctly handle zero-padding around initrds. 3 years ago
decompress_unlzma.c e4e29dc484 lib/decompress_unlzma: Do a NULL check for pointer 9 years ago
decompress_unlzo.c 2d3862d26e lib/decompressors: use real out buf size for gunzip with kernel 9 years ago
decompress_unxz.c 2d3862d26e lib/decompressors: use real out buf size for gunzip with kernel 9 years ago
devres.c 97464364e3 devres: allow const resource arguments 5 years ago
digsig.c 192cabd6a2 lib/digsig: fix dereference of NULL user_key_payload 7 years ago
div64.c 6dc75ccba5 lib/div64.c: off by one in shift 5 years ago
dma-debug.c 946c5d356a android: Import remaining from merlin-r-oss 3 years ago
dma-noop.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
dma-virt.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
dump_stack.c e8b4d457b1 dump_stack: avoid the livelock of the dump_lock 5 years ago
dynamic_debug.c 553b274c07 Merge branch 'android-4.14-stable' of https://android.googlesource.com/kernel/common into a11 3 years ago
dynamic_queue_limits.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
earlycpio.c 7557933e6b lib/cpio: Make find_cpio_data()'s offset arg optional 8 years ago
errseq.c 0799a0ea96 errseq: Always report a writeback error once 6 years ago
extable.c a94c33dd1f lib/extable.c: use bsearch() library function in search_extable() 7 years ago
fault-inject.c 9eeb52ae71 fault-inject: fix wrong should_fail() decision in task context 7 years ago
fdt.c ab25383983 of/lib: Allow scripts/dtc/libfdt to be used from kernel code 12 years ago
fdt_empty_tree.c adaf568784 lib: add fdt_empty_tree.c 10 years ago
fdt_ro.c ab25383983 of/lib: Allow scripts/dtc/libfdt to be used from kernel code 12 years ago
fdt_rw.c ab25383983 of/lib: Allow scripts/dtc/libfdt to be used from kernel code 12 years ago
fdt_strerror.c ab25383983 of/lib: Allow scripts/dtc/libfdt to be used from kernel code 12 years ago
fdt_sw.c ab25383983 of/lib: Allow scripts/dtc/libfdt to be used from kernel code 12 years ago
fdt_wip.c ab25383983 of/lib: Allow scripts/dtc/libfdt to be used from kernel code 12 years ago
find_bit.c 4eb9d5bc70 uapi: rename ext2_swab() to swab() and share globally in swab.h 4 years ago
flex_array.c 809fa972fd reciprocal_divide: update/correction of the algorithm 11 years ago
flex_proportions.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
gcd.c fff7fb0b2d lib/GCD.c: use binary GCD algorithm instead of Euclidean 8 years ago
gen_crc32table.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
genalloc.c 708f3baafc lib/genalloc: fix the overflow when size is too big 4 years ago
glob.c ba95b045e9 lib: add module support to glob tests 8 years ago
globtest.c ba95b045e9 lib: add module support to glob tests 8 years ago
hexdump.c 9888a588ea lib/hexdump.c: return -EINVAL in case of error in hex2bin() 7 years ago
hweight.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
idr.c a99fc91770 idr: Fix idr_get_next race with idr_remove 5 years ago
inflate.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
int_sqrt.c e1721d26e1 int_sqrt: Improve 3x faster integer sqrt. 3 years ago
interval_tree.c 85c5e27c4a lib/interval_tree.c: simplify includes 10 years ago
interval_tree_test.c 891e5a89f0 lib/rbtree-test: lower default params 6 years ago
iomap.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
iomap_copy.c a9aec5881b lib/iomap_copy.c: add __ioread32_copy() 9 years ago
iommu-common.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
iommu-helper.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
ioremap.c a34806961b ioremap: Update pgtable free interfaces with addr 6 years ago
iov_iter.c 1ff545051f iov_iter_fault_in_readable() should do nothing in xarray case 3 years ago
irq_poll.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
irq_regs.c 8bc3bcc93a lib: reduce the use of module.h wherever possible 13 years ago
is_single_threaded.c 9164bb4a18 sched/headers: Prepare to move 'init_task' and 'init_thread_union' from <linux/sched.h> to <linux/sched/task.h> 8 years ago
jedec_ddr_data.c 9c1c21a053 ddr: add LPDDR2 data from JESD209-2 12 years ago
kasprintf.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
kfifo.c abb78b8d94 Partially revert "kfifo: fix kfifo_alloc() and kfifo_init()" 5 years ago
klist.c 1390c37d16 scsi: klist: Make it safe to use klists in atomic context 6 years ago
kobject.c af882cb0bc kobject: Replace strncpy with memcpy 6 years ago
kobject_uevent.c f80c966a5e kobject_uevent: Allocate environment buffer on the stack 3 years ago
kstrtox.c aea6a00ad6 lib: vsprintf: Fix handling of number field widths in vsscanf 3 years ago
kstrtox.h aea6a00ad6 lib: vsprintf: Fix handling of number field widths in vsscanf 3 years ago
lcm.c e9637415a9 block: fix blk_stack_limits() regression due to lcm() change 10 years ago
libcrc32c.c d41519a69b crypto: Work around deallocated stack frame reference gcc bug on sparc. 7 years ago
list_debug.c 85caa95b9f bug: switch data corruption check to __must_check 8 years ago
list_sort.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
llist.c 2cf12f821c lib/llist.c: fix data race in llist_del_first 9 years ago
locking-selftest-hardirq.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-mutex.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-rlock-hardirq.h cae2ed9aa5 [PATCH] lockdep: locking API self tests 18 years ago
locking-selftest-rlock-softirq.h cae2ed9aa5 [PATCH] lockdep: locking API self tests 18 years ago
locking-selftest-rlock.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-rsem.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-rtmutex.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-softirq.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-spin-hardirq.h cae2ed9aa5 [PATCH] lockdep: locking API self tests 18 years ago
locking-selftest-spin-softirq.h cae2ed9aa5 [PATCH] lockdep: locking API self tests 18 years ago
locking-selftest-spin.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-wlock-hardirq.h cae2ed9aa5 [PATCH] lockdep: locking API self tests 18 years ago
locking-selftest-wlock-softirq.h cae2ed9aa5 [PATCH] lockdep: locking API self tests 18 years ago
locking-selftest-wlock.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest-wsem.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
locking-selftest.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
lockref.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
lru_cache.c bb649b34dd lru_cache: Converted lc_seq_printf_status to return void 9 years ago
memory-notifier-error-inject.c 9579f5bd31 memory: memory notifier error injection module 12 years ago
memweight.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
net_utils.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
netdev-notifier-error-inject.c c39d0454ec net: Add support for CHANGEUPPER notifier error injection 9 years ago
nlattr.c 335ed6f45a lib/nlattr.c: Fix warning due to incorrect strlen() variable type 3 years ago
nmi_backtrace.c cd71265a8c printk/nmi: Prevent deadlock when accessing the main log buffer in NMI 6 years ago
nodemask.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
notifier-error-inject.c 0ecc833bac mode_t, whack-a-mole at 11... 12 years ago
notifier-error-inject.h b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
of-reconfig-notifier-error-inject.c d526e85f60 powerpc+of: Rename and fix OF reconfig notifier error inject module 12 years ago
oid_registry.c f2f12ea19f 509: fix printing uninitialized stack memory when OID is empty 7 years ago
once.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
parman.c 44091d29f2 lib: Introduce priority array area manager 8 years ago
parser.c a317178e36 parser: add u64 number parser 8 years ago
pci_iomap.c 12f03ee606 Merge tag 'libnvdimm-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm 9 years ago
percpu-refcount.c 210f7cdcf0 percpu-refcount: support synchronous switch to atomic mode. 8 years ago
percpu_counter.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
percpu_ida.c fd7712337f sched/headers: Prepare to remove the <linux/gfp.h> include from <linux/sched.h> 8 years ago
percpu_test.c 623fd8072c percpu: add test module for various percpu operations 11 years ago
plist.c e601757102 sched/headers: Prepare for new header dependencies before moving code to <linux/sched/clock.h> 8 years ago
pm-notifier-error-inject.c 048b9c3549 PM: PM notifier error injection module 12 years ago
prime_numbers.c 717c8ae7aa lib/prime_numbers: Suppress warn on kmalloc failure 8 years ago
radix-tree.c d0840f62f1 idr: Fix idr_alloc_u32 on 32-bit systems 5 years ago
random32.c a16f026330 random32: make prandom_u32() output unpredictable 4 years ago
ratelimit.c 656d61ce96 lib/ratelimit.c: use deferred printk() version 7 years ago
rational.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
rbtree.c 35dc67d7d9 rbtree: add some additional comments for rebalancing cases 7 years ago
rbtree_test.c 891e5a89f0 lib/rbtree-test: lower default params 6 years ago
reciprocal_div.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
refcount.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
rhashtable.c 9f6e90284f rhashtable: Still do rehash when we get EEXIST 5 years ago
sbitmap.c fce095450b sbitmap: fix improper use of smp_mb__before_atomic() 5 years ago
scatterlist.c 521f0ce306 scatterlist: Don't allocate sg lists using __get_free_page 3 years ago
seq_buf.c 50b51460f5 seq_buf: Fix overflow in seq_buf_putmem_hex() 3 years ago
sg_pool.c 9b1d6c8950 lib: scatterlist: move SG pool code from SCSI driver to lib/sg_pool.c 8 years ago
sg_split.c f8bcbe62ac lib: scatterlist: add sg splitting function 9 years ago
sha1.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
show_mem.c 9af744d743 lib/show_mem.c: teach show_mem to work with the given nodemask 8 years ago
siphash.c 1ae2324f73 siphash: implement HalfSipHash1-3 for hash tables 8 years ago
smp_processor_id.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
sort.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
stackdepot.c 553b274c07 Merge branch 'android-4.14-stable' of https://android.googlesource.com/kernel/common into a11 3 years ago
stmp_device.c b6d4f3221d lib/stmp_device.c: replace module.h include 10 years ago
string.c fe072e50be lib/string: Add strscpy_pad() function 4 years ago
string_helpers.c 0ee931c4e3 mm: treewide: remove GFP_TEMPORARY allocation flag 7 years ago
strncpy_from_user.c d6d7b18f40 Merge 4.14.185 into android-4.14-stable 4 years ago
strnlen_user.c d6d7b18f40 Merge 4.14.185 into android-4.14-stable 4 years ago
swiotlb.c 553b274c07 Merge branch 'android-4.14-stable' of https://android.googlesource.com/kernel/common into a11 3 years ago
syscall.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
test-kstrtox.c 2d2e4715a6 kstrto*: accept "-0" for signed conversion 9 years ago
test-string_helpers.c 72676bb53f lib/test-string_helpers.c: fix and improve string_get_size() tests 9 years ago
test_bitmap.c f6c0f020ee lib/test_bitmap.c: fix bitmap optimisation tests to report errors correctly 6 years ago
test_bpf.c 7d768c84ec test_bpf: Fix testing with CONFIG_BPF_JIT_ALWAYS_ON=y on other arches 6 years ago
test_debug_virtual.c ff420ff182 lib: fix build failure in CONFIG_DEBUG_VIRTUAL test 6 years ago
test_firmware.c 8d4611f342 test_firmware: fix a memory leak bug 5 years ago
test_hash.c e6173ba42b lib/test_hash.c: fix warning in preprocessor symbol evaluation 8 years ago
test_hexdump.c 337f2837c5 test_hexdump: use memcpy instead of strncpy 6 years ago
test_kasan.c 998aa7d8f2 Merge 4.14.171 into android-4.14 5 years ago
test_kmod.c 40e009db07 test_kmod: avoid potential double free in trigger_config_run_type() 4 years ago
test_list_sort.c e327fd7c86 lib: add module support to linked list sorting tests 7 years ago
test_meminit.c d1ac78ab13 ANDROID: make memory initialization tests panic on failure 5 years ago
test_module.c 93e9ef83f4 test: add minimal module for verification testing 11 years ago
test_parman.c 8118b7b76c lib: fix spelling mistake: "actualy" -> "actually" 8 years ago
test_printf.c d3ad09e4f7 UPSTREAM: printk: hash addresses printed with %p 5 years ago
test_rhashtable.c 783692558a lib: test_rhashtable: Fix KASAN warning 7 years ago
test_siphash.c 1ae2324f73 siphash: implement HalfSipHash1-3 for hash tables 8 years ago
test_sort.c ebd03a9aac Revert "lib/test_sort.c: make it explicitly non-modular" 7 years ago
test_stackinit.c a69ee7eebc FROMLIST: lib: test_stackinit.c: XFAIL switch variable init tests 5 years ago
test_static_key_base.c 2bf9e0ab08 locking/static_keys: Provide a selftest 9 years ago
test_static_keys.c 975db45e9c locking/static_keys: Avoid nested functions 9 years ago
test_sysctl.c 7c43a657a4 test_sysctl: test against int proc_dointvec() array support 7 years ago
test_user_copy.c cddbfbd448 lib: remove check for AVR32 arch in test_user_copy 7 years ago
test_uuid.c d9cf484165 uuid: fix incorrect uuid_equal conversion in test_uuid_test 7 years ago
textsearch.c fec2290832 lib/textsearch.c: remove textsearch_put reference from comments 10 years ago
timerqueue.c d852d39432 timerqueue: Use rb_entry_safe() instead of open-coding it 8 years ago
ts_bm.c 3b76d08190 textsearch: ts_bm: support case insensitive searching in Boyer-Moore algorithm 16 years ago
ts_fsm.c 7433a8d6fa textsearch: fix typos in library helpers 7 years ago
ts_kmp.c 7433a8d6fa textsearch: fix typos in library helpers 7 years ago
ubsan.c 946c5d356a android: Import remaining from merlin-r-oss 3 years ago
ubsan.h 2617e62c2f lib/ubsan: add type mismatch handler for new GCC/Clang 7 years ago
ucs2_string.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
usercopy.c 0ced0c46b4 Fix misannotated out-of-line _copy_to_user() 7 years ago
uuid.c ef40dda5bb uuid: hoist uuid_is_null() helper from libnvdimm 7 years ago
vsprintf.c 7b74d84a30 Merge 4.14.240 into android-4.14-stable 3 years ago
win_minmax.c b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license 7 years ago
xxhash.c 5d2405227a lib: Add xxhash module 7 years ago