kernel-6.4.0-59
* Mon Jun 26 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.4.0-59] - redhat/kernel.spec.template: Disable 'extracting debug info' messages (Prarit Bhargava) - kernel/rh_messages.c: Another gcc12 warning on redundant NULL test (Florian Weimer) [2216678] - redhat: fix signing for realtime and arm64_64k non-debug variants (Jan Stancek) - redhat: treat with_up consistently (Jan Stancek) - redhat: make with_realtime opt-in (Jan Stancek) - Linux v6.4.0 Resolves: rhbz#2216678 Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
This commit is contained in:
parent
c9674c94f5
commit
bbc4ecfee0
@ -12,7 +12,7 @@ RHEL_MINOR = 99
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 57
|
||||
RHEL_RELEASE = 59
|
||||
|
||||
#
|
||||
# RHEL_REBASE_NUM
|
||||
|
@ -1,3 +1,6 @@
|
||||
"https://gitlab.com/cki-project/kernel-ark/-/commit"/31b524ea69e17121c193a63739c513cdcec00deb
|
||||
31b524ea69e17121c193a63739c513cdcec00deb kernel/rh_messages.c: Another gcc12 warning on redundant NULL test
|
||||
|
||||
"https://gitlab.com/cki-project/kernel-ark/-/commit"/aee04731d0904833c3cfaded90144103c7001407
|
||||
aee04731d0904833c3cfaded90144103c7001407 tools/resolve_btfids: Fix setting HOSTCFLAGS
|
||||
|
||||
|
135
kernel.spec
135
kernel.spec
@ -174,13 +174,13 @@ Summary: The Linux kernel
|
||||
%define specrpmversion 6.4.0
|
||||
%define specversion 6.4.0
|
||||
%define patchversion 6.4
|
||||
%define pkgrelease 0.rc7.20230623git8a28a0b6f1a1.57
|
||||
%define pkgrelease 59
|
||||
%define kversion 6
|
||||
%define tarfile_release 6.4-rc7-194-g8a28a0b6f1a1
|
||||
%define tarfile_release 6.4
|
||||
# This is needed to do merge window version magic
|
||||
%define patchlevel 4
|
||||
# This allows pkg_release to have configurable %%{?dist} tag
|
||||
%define specrelease 0.rc7.20230623git8a28a0b6f1a1.57%{?buildid}%{?dist}
|
||||
%define specrelease 59%{?buildid}%{?dist}
|
||||
# This defines the kabi tarball version
|
||||
%define kabiversion 6.4.0
|
||||
|
||||
@ -206,14 +206,23 @@ Summary: The Linux kernel
|
||||
%define with_up %{?_without_up: 0} %{?!_without_up: 1}
|
||||
# kernel PAE (only valid for ARM (lpae))
|
||||
%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1}
|
||||
# kernel-debug
|
||||
# build also debug variants
|
||||
%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1}
|
||||
# kernel-zfcpdump (s390 specific kernel for zfcpdump)
|
||||
%define with_zfcpdump %{?_without_zfcpdump: 0} %{?!_without_zfcpdump: 1}
|
||||
# kernel-64k (aarch64 kernel with 64K page_size)
|
||||
%define with_arm64_64k %{?_without_arm64_64k: 0} %{?!_without_arm64_64k: 1}
|
||||
# kernel-rt (x86_64 and aarch64 only PREEMPT_RT enabled kernel)
|
||||
%define with_realtime %{?_without_realtime: 1} %{?!_without_realtime: 0}
|
||||
%define with_realtime %{?_with_realtime: 1} %{?!_with_realtime: 0}
|
||||
|
||||
# Supported variants
|
||||
# (base) with_debug with_gcov
|
||||
# up X X X
|
||||
# pae X X
|
||||
# zfcpdump X X
|
||||
# arm64_64k X X X
|
||||
# realtime X X X
|
||||
|
||||
# kernel-doc
|
||||
%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1}
|
||||
# kernel-headers
|
||||
@ -238,7 +247,7 @@ Summary: The Linux kernel
|
||||
%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0}
|
||||
# Only build the pae kernel (--with paeonly):
|
||||
%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0}
|
||||
# Only build the debug kernel (--with dbgonly):
|
||||
# Only build the debug variants (--with dbgonly):
|
||||
%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0}
|
||||
# Only build the realtime kernel (--with rtonly):
|
||||
%define with_rtonly %{?_with_rtonly: 1} %{?!_with_rtonly: 0}
|
||||
@ -413,8 +422,6 @@ Summary: The Linux kernel
|
||||
|
||||
# if requested, only build debug kernel
|
||||
%if %{with_dbgonly}
|
||||
%define with_up 0
|
||||
%define with_realtime 0
|
||||
%define with_vdso_install 0
|
||||
%define with_perf 0
|
||||
%define with_tools 0
|
||||
@ -647,6 +654,22 @@ Summary: The Linux kernel
|
||||
%define with_debug 0
|
||||
%endif
|
||||
|
||||
# short-hand for "are we building base/non-debug variants of ...?"
|
||||
%if %{with_up} && !%{with_dbgonly}
|
||||
%define with_up_base 1
|
||||
%else
|
||||
%define with_up_base 0
|
||||
%endif
|
||||
%if %{with_realtime} && !%{with_dbgonly}
|
||||
%define with_realtime_base 1
|
||||
%else
|
||||
%define with_realtime_base 0
|
||||
%endif
|
||||
%if %{with_arm64_64k} && !%{with_dbgonly}
|
||||
%define with_arm64_64k_base 1
|
||||
%else
|
||||
%define with_arm64_64k_base 0
|
||||
%endif
|
||||
|
||||
#
|
||||
# Packages that need to be installed before the kernel is, because the %%post
|
||||
@ -757,11 +780,9 @@ BuildConflicts: dwarves < 1.13
|
||||
%undefine _debugsource_packages
|
||||
%undefine _debuginfo_subpackages
|
||||
|
||||
%if 0%{?fedora}
|
||||
# Remove -q option below to provide 'extracting debug info' messages
|
||||
%global _find_debuginfo_opts -r -q
|
||||
%else
|
||||
%global _find_debuginfo_opts -r
|
||||
%endif
|
||||
|
||||
%global _missing_build_ids_terminate_build 1
|
||||
%global _no_recompute_build_ids 1
|
||||
%endif
|
||||
@ -1589,7 +1610,7 @@ zfcpdump infrastructure.
|
||||
# with_zfcpdump
|
||||
%endif
|
||||
|
||||
%if %{with_arm64_64k}
|
||||
%if %{with_arm64_64k_base}
|
||||
%define variant_summary The Linux kernel compiled for 64k pagesize usage
|
||||
%kernel_variant_package 64k
|
||||
%description 64k-core
|
||||
@ -1626,7 +1647,7 @@ It should only be installed when trying to gather additional information
|
||||
on kernel bugs, as some of these options impact performance noticably.
|
||||
%endif
|
||||
|
||||
%if %{with_realtime}
|
||||
%if %{with_realtime_base}
|
||||
%define variant_summary The Linux kernel compiled with PREEMPT_RT enabled
|
||||
%kernel_variant_package rt
|
||||
%description rt-core
|
||||
@ -1634,6 +1655,7 @@ This package includes a version of the Linux kernel compiled with the
|
||||
PREEMPT_RT real-time preemption support
|
||||
%endif
|
||||
|
||||
%if %{with_up} && %{with_debug}
|
||||
%if !%{debugbuildsenabled}
|
||||
%kernel_variant_package -m debug
|
||||
%else
|
||||
@ -1648,8 +1670,9 @@ input and output, etc.
|
||||
This variant of the kernel has numerous debugging options enabled.
|
||||
It should only be installed when trying to gather additional information
|
||||
on kernel bugs, as some of these options impact performance noticably.
|
||||
%endif
|
||||
|
||||
%if %{with_up}
|
||||
%if %{with_up_base}
|
||||
# And finally the main -core package
|
||||
|
||||
%define variant_summary The Linux kernel
|
||||
@ -1661,10 +1684,12 @@ of the operating system: memory allocation, process allocation, device
|
||||
input and output, etc.
|
||||
%endif
|
||||
|
||||
%if %{with_efiuki}
|
||||
%if %{with_up} && %{with_debug} && %{with_efiuki}
|
||||
%description debug-uki-virt
|
||||
Prebuilt debug unified kernel image for virtual machines.
|
||||
%endif
|
||||
|
||||
%if %{with_up_base} && %{with_efiuki}
|
||||
%description uki-virt
|
||||
Prebuilt default unified kernel image for virtual machines.
|
||||
%endif
|
||||
@ -2630,7 +2655,7 @@ cd linux-%{KVERREL}
|
||||
|
||||
|
||||
%if %{with_debug}
|
||||
%if %{with_realtime} && !%{with_dbgonly}
|
||||
%if %{with_realtime}
|
||||
echo "building rt-debug"
|
||||
BuildKernel %make_target %kernel_image %{_use_vdso} rt-debug
|
||||
%endif
|
||||
@ -2649,7 +2674,7 @@ BuildKernel %make_target %kernel_image %{_use_vdso} debug
|
||||
BuildKernel %make_target %kernel_image %{_use_vdso} zfcpdump
|
||||
%endif
|
||||
|
||||
%if %{with_arm64_64k}
|
||||
%if %{with_arm64_64k_base}
|
||||
BuildKernel %make_target %kernel_image %{_use_vdso} 64k
|
||||
%endif
|
||||
|
||||
@ -2657,11 +2682,11 @@ BuildKernel %make_target %kernel_image %{_use_vdso} 64k
|
||||
BuildKernel %make_target %kernel_image %{use_vdso} lpae
|
||||
%endif
|
||||
|
||||
%if %{with_realtime}
|
||||
%if %{with_realtime_base}
|
||||
BuildKernel %make_target %kernel_image %{_use_vdso} rt
|
||||
%endif
|
||||
|
||||
%if %{with_up}
|
||||
%if %{with_up_base}
|
||||
BuildKernel %make_target %kernel_image %{_use_vdso}
|
||||
%endif
|
||||
|
||||
@ -2812,25 +2837,30 @@ find Documentation -type d | xargs chmod u+w
|
||||
#
|
||||
# Don't sign modules for the zfcpdump variant as it is monolithic.
|
||||
|
||||
# TODO - this needs to be fixed in same way as we have it in c9s
|
||||
%define __modsign_install_post \
|
||||
if [ "%{signmodules}" -eq "1" ]; then \
|
||||
if [ "%{with_pae}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+lpae certs/signing_key.x509.sign+lpae $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+lpae/ \
|
||||
fi \
|
||||
if [ "%{with_debug}" -ne "0" ]; then \
|
||||
if [ "%{with_realtime}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+rt-debug certs/signing_key.x509.sign+rt-debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+rt-debug/ \
|
||||
fi \
|
||||
if [ "%{with_up}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \
|
||||
fi \
|
||||
if [ "%{with_arm64_64k}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+64k-debug certs/signing_key.x509.sign+64k-debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+64k-debug/ \
|
||||
fi \
|
||||
fi \
|
||||
if [ "%{with_up}" -ne "0" ]; then \
|
||||
if [ "%{with_up_base}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign certs/signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \
|
||||
fi \
|
||||
if [ "%{with_up}" -ne "0" ] && [ "%{with_debug}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+debug certs/signing_key.x509.sign+debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+debug/ \
|
||||
fi \
|
||||
if [ "%{with_realtime_base}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+rt certs/signing_key.x509.sign+rt $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+rt/ \
|
||||
fi \
|
||||
if [ "%{with_realtime}" -ne "0" ] && [ "%{with_debug}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+rt-debug certs/signing_key.x509.sign+rt-debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+rt-debug/ \
|
||||
fi \
|
||||
if [ "%{with_arm64_64k_base}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+64k certs/signing_key.x509.sign+64k $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+64k/ \
|
||||
fi \
|
||||
if [ "%{with_arm64_64k}" -ne "0" ] && [ "%{with_debug}" -ne "0" ]; then \
|
||||
%{modsign_cmd} certs/signing_key.pem.sign+64k-debug certs/signing_key.x509.sign+64k-debug $RPM_BUILD_ROOT/lib/modules/%{KVERREL}+64k-debug/ \
|
||||
fi \
|
||||
fi \
|
||||
if [ "%{zipmodules}" -eq "1" ]; then \
|
||||
echo "Compressing kernel modules ..." \
|
||||
@ -3342,11 +3372,11 @@ then\
|
||||
fi\
|
||||
%{nil}
|
||||
|
||||
%if %{with_efiuki}
|
||||
%if %{with_up_base} && %{with_efiuki}
|
||||
%kernel_uki_virt_scripts
|
||||
%endif
|
||||
|
||||
%if %{with_up}
|
||||
%if %{with_up_base}
|
||||
%kernel_variant_preun
|
||||
%kernel_variant_post -r kernel-smp
|
||||
%endif
|
||||
@ -3361,15 +3391,16 @@ fi\
|
||||
%kernel_variant_post -v zfcpdump
|
||||
%endif
|
||||
|
||||
%if %{with_debug}
|
||||
%if %{with_efiuki}
|
||||
%if %{with_up} && %{with_debug} && %{with_efiuki}
|
||||
%kernel_uki_virt_scripts debug
|
||||
%endif
|
||||
|
||||
%if %{with_up} && %{with_debug}
|
||||
%kernel_variant_preun debug
|
||||
%kernel_variant_post -v debug
|
||||
%endif
|
||||
|
||||
%if %{with_arm64_64k}
|
||||
%if %{with_arm64_64k_base}
|
||||
%kernel_variant_preun 64k
|
||||
%kernel_variant_post -v 64k
|
||||
%endif
|
||||
@ -3379,16 +3410,17 @@ fi\
|
||||
%kernel_variant_post -v 64k-debug
|
||||
%endif
|
||||
|
||||
%if %{with_realtime}
|
||||
%if %{with_realtime_base}
|
||||
%kernel_variant_preun rt
|
||||
%kernel_variant_post -v rt -r (kernel|kernel-smp)
|
||||
%kernel_kvm_post rt
|
||||
%if %{with_debug}
|
||||
%endif
|
||||
|
||||
%if %{with_realtime} && %{with_debug}
|
||||
%kernel_variant_preun rt-debug
|
||||
%kernel_variant_post -v rt-debug
|
||||
%kernel_kvm_post rt-debug
|
||||
%endif
|
||||
%endif
|
||||
|
||||
###
|
||||
### file lists
|
||||
@ -3556,7 +3588,7 @@ fi\
|
||||
%endif
|
||||
|
||||
# empty meta-package
|
||||
%if %{with_up}
|
||||
%if %{with_up_base}
|
||||
%ifnarch %nobuildarches noarch
|
||||
%files
|
||||
%endif
|
||||
@ -3653,12 +3685,14 @@ fi\
|
||||
%endif\
|
||||
%{nil}
|
||||
|
||||
%kernel_variant_files %{_use_vdso} %{with_up}
|
||||
%kernel_variant_files %{_use_vdso} %{with_up_base}
|
||||
%if %{with_up}
|
||||
%kernel_variant_files %{_use_vdso} %{with_debug} debug
|
||||
%endif
|
||||
%if %{with_arm64_64k}
|
||||
%kernel_variant_files %{_use_vdso} %{with_debug} 64k-debug
|
||||
%endif
|
||||
%kernel_variant_files %{_use_vdso} %{with_realtime} rt
|
||||
%kernel_variant_files %{_use_vdso} %{with_realtime_base} rt
|
||||
%if %{with_realtime}
|
||||
%kernel_variant_files %{_use_vdso} %{with_debug} rt-debug
|
||||
%endif
|
||||
@ -3680,7 +3714,7 @@ fi\
|
||||
%endif
|
||||
%endif
|
||||
%kernel_variant_files %{_use_vdso} %{with_zfcpdump} zfcpdump
|
||||
%kernel_variant_files %{_use_vdso} %{with_arm64_64k} 64k
|
||||
%kernel_variant_files %{_use_vdso} %{with_arm64_64k_base} 64k
|
||||
|
||||
%define kernel_variant_ipaclones(k:) \
|
||||
%if %{1}\
|
||||
@ -3693,13 +3727,24 @@ fi\
|
||||
%endif\
|
||||
%{nil}
|
||||
|
||||
%kernel_variant_ipaclones %{with_up}
|
||||
%kernel_variant_ipaclones %{with_up_base}
|
||||
|
||||
# plz don't put in a version string unless you're going to tag
|
||||
# and build.
|
||||
#
|
||||
#
|
||||
%changelog
|
||||
* Mon Jun 26 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.4.0-59]
|
||||
- redhat/kernel.spec.template: Disable 'extracting debug info' messages (Prarit Bhargava)
|
||||
- kernel/rh_messages.c: Another gcc12 warning on redundant NULL test (Florian Weimer) [2216678]
|
||||
- redhat: fix signing for realtime and arm64_64k non-debug variants (Jan Stancek)
|
||||
- redhat: treat with_up consistently (Jan Stancek)
|
||||
- redhat: make with_realtime opt-in (Jan Stancek)
|
||||
- Linux v6.4.0
|
||||
|
||||
* Sat Jun 24 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.4.0-0.rc7.a92b7d26c743.58]
|
||||
- Linux v6.4.0-0.rc7.a92b7d26c743
|
||||
|
||||
* Fri Jun 23 2023 Fedora Kernel Team <kernel-team@fedoraproject.org> [6.4.0-0.rc7.8a28a0b6f1a1.57]
|
||||
- redhat/configs: Disable qcom armv7 drippings in the aarch64 tree (Jeremy Linton)
|
||||
- Linux v6.4.0-0.rc7.8a28a0b6f1a1
|
||||
|
@ -118,7 +118,7 @@ index 000000000000..effb81d04bfd
|
||||
+
|
||||
+endmenu
|
||||
diff --git a/Makefile b/Makefile
|
||||
index b68b43c19072..78e7e19c0d66 100644
|
||||
index e51e4d9174ab..e58f04ca4249 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
|
||||
@ -2626,7 +2626,7 @@ index 886d2ebd0a0d..d3d1fbbfaa93 100644
|
||||
/**
|
||||
diff --git a/kernel/rh_messages.c b/kernel/rh_messages.c
|
||||
new file mode 100644
|
||||
index 000000000000..c55fb108c6bb
|
||||
index 000000000000..018800f35ff2
|
||||
--- /dev/null
|
||||
+++ b/kernel/rh_messages.c
|
||||
@@ -0,0 +1,209 @@
|
||||
@ -2825,7 +2825,7 @@ index 000000000000..c55fb108c6bb
|
||||
+ if (msg)
|
||||
+ str = msg;
|
||||
+#ifdef CONFIG_MODULES
|
||||
+ else if (mod && mod->name)
|
||||
+ else if (mod)
|
||||
+ str = mod->name;
|
||||
+#endif
|
||||
+
|
||||
@ -2840,7 +2840,7 @@ index 000000000000..c55fb108c6bb
|
||||
+}
|
||||
+EXPORT_SYMBOL(mark_partner_supported);
|
||||
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
|
||||
index d4531d09984d..071964717c3b 100644
|
||||
index c12150f96b88..3f28b300ae22 100644
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -23,6 +23,7 @@
|
||||
@ -2851,7 +2851,7 @@ index d4531d09984d..071964717c3b 100644
|
||||
|
||||
/* Are we using CONFIG_MODVERSIONS? */
|
||||
static bool modversions;
|
||||
@@ -2132,6 +2133,12 @@ static void write_buf(struct buffer *b, const char *fname)
|
||||
@@ -2137,6 +2138,12 @@ static void write_buf(struct buffer *b, const char *fname)
|
||||
}
|
||||
}
|
||||
|
||||
@ -2864,7 +2864,7 @@ index d4531d09984d..071964717c3b 100644
|
||||
static void write_if_changed(struct buffer *b, const char *fname)
|
||||
{
|
||||
char *tmp;
|
||||
@@ -2195,6 +2202,7 @@ static void write_mod_c_file(struct module *mod)
|
||||
@@ -2200,6 +2207,7 @@ static void write_mod_c_file(struct module *mod)
|
||||
add_depends(&buf, mod);
|
||||
add_moddevtable(&buf, mod);
|
||||
add_srcversion(&buf, mod);
|
||||
|
6
sources
6
sources
@ -1,3 +1,3 @@
|
||||
SHA512 (linux-6.4-rc7-194-g8a28a0b6f1a1.tar.xz) = ba41087299ebcaebf2b1b19f60ea76e3a7e8f63c1b2d6522cfaf889d411a2ea6f34a4fb06636dc6f68cf5c0aaae762c4a83b3d743f0cfab5ae72ba0faf02f863
|
||||
SHA512 (kernel-abi-stablelists-6.4.0.tar.bz2) = 69889d0a2466af14f80903667c9b2d3b147d998a34957dea9f69141173f5a1084f0d8b27f98749ba31921faf3597fe9357b6cda45375bf8f182a0ad18f33ca37
|
||||
SHA512 (kernel-kabi-dw-6.4.0.tar.bz2) = 388683a3e3544c2bb0f6429dad1cd237ac492bf7d9c4abfe660da1e394161a4dfe692643a76c0239d5d9c486c6221879398f76b4f6d237fcffb9c97ed3e2f80e
|
||||
SHA512 (linux-6.4.tar.xz) = 37f036bc2ca47a191a763bf87bbc23adb99547996efce28845ce0e186982b7fe70d5d1409f6aa7465e9ae7ac51b7487b6f63c22f09a8d040175016f152da4cd2
|
||||
SHA512 (kernel-abi-stablelists-6.4.0.tar.bz2) = b9684d91c453443567d9e2ec8a8026a3c49e8dfd311a53676ec28697ae03c9a99fb6d0b2edc91078b7f25bbdfb06070132f1126f51f2dcd58a2c1f8bb2a1e629
|
||||
SHA512 (kernel-kabi-dw-6.4.0.tar.bz2) = c4591e681488467ffc9a4e110a56a092afd8f63eda9277b3b3ee596e811b394637ea0b7a142c404e1ae7861a397121c4ecb74470b0ef60bcc329294dfaac7f16
|
||||
|
Loading…
Reference in New Issue
Block a user