--- /dev/null
+From 98531cf9e097d88165612dd3efec709678abfd06 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 18 Jul 2023 10:15:33 -0500
+Subject: docs: Move rustdoc output, cross-reference it
+
+From: Carlos Bilbao <carlos.bilbao@amd.com>
+
+[ Upstream commit 48fadf44007568e75c7af92857083058d57be403 ]
+
+Generate rustdoc documentation with the rest of subsystem's documentation
+in Documentation/output. Add a cross reference to the generated rustdoc in
+Documentation/rust/index.rst if Sphinx target rustdoc is set.
+
+Reviewed-by: Akira Yokosawa <akiyks@gmail.com>
+Signed-off-by: Carlos Bilbao <carlos.bilbao@amd.com>
+Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
+Signed-off-by: Jonathan Corbet <corbet@lwn.net>
+Link: https://lore.kernel.org/r/20230718151534.4067460-2-carlos.bilbao@amd.com
+Stable-dep-of: cfd96726e611 ("rust: docs: fix logo replacement")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ Documentation/rust/index.rst | 8 ++++++++
+ rust/Makefile | 15 +++++++++------
+ 2 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/Documentation/rust/index.rst b/Documentation/rust/index.rst
+index 4ae8c66b94faf..e599be2cec9ba 100644
+--- a/Documentation/rust/index.rst
++++ b/Documentation/rust/index.rst
+@@ -6,6 +6,14 @@ Rust
+ Documentation related to Rust within the kernel. To start using Rust
+ in the kernel, please read the quick-start.rst guide.
+
++.. only:: rustdoc and html
++
++ You can also browse `rustdoc documentation <rustdoc/kernel/index.html>`_.
++
++.. only:: not rustdoc and html
++
++ This documentation does not include rustdoc generated information.
++
+ .. toctree::
+ :maxdepth: 1
+
+diff --git a/rust/Makefile b/rust/Makefile
+index 4124bfa01798d..b9acbe5a7a5d5 100644
+--- a/rust/Makefile
++++ b/rust/Makefile
+@@ -1,5 +1,8 @@
+ # SPDX-License-Identifier: GPL-2.0
+
++# Where to place rustdoc generated documentation
++rustdoc_output := $(objtree)/Documentation/output/rust/rustdoc
++
+ obj-$(CONFIG_RUST) += core.o compiler_builtins.o
+ always-$(CONFIG_RUST) += exports_core_generated.h
+
+@@ -65,7 +68,7 @@ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
+ OBJTREE=$(abspath $(objtree)) \
+ $(RUSTDOC) $(if $(rustdoc_host),$(rust_common_flags),$(rust_flags)) \
+ $(rustc_target_flags) -L$(objtree)/$(obj) \
+- --output $(objtree)/$(obj)/doc \
++ --output $(rustdoc_output) \
+ --crate-name $(subst rustdoc-,,$@) \
+ @$(objtree)/include/generated/rustc_cfg $<
+
+@@ -82,15 +85,15 @@ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
+ # and then retouch the generated files.
+ rustdoc: rustdoc-core rustdoc-macros rustdoc-compiler_builtins \
+ rustdoc-alloc rustdoc-kernel
+- $(Q)cp $(srctree)/Documentation/images/logo.svg $(objtree)/$(obj)/doc
+- $(Q)cp $(srctree)/Documentation/images/COPYING-logo $(objtree)/$(obj)/doc
+- $(Q)find $(objtree)/$(obj)/doc -name '*.html' -type f -print0 | xargs -0 sed -Ei \
++ $(Q)cp $(srctree)/Documentation/images/logo.svg $(rustdoc_output)
++ $(Q)cp $(srctree)/Documentation/images/COPYING-logo $(rustdoc_output)
++ $(Q)find $(rustdoc_output) -name '*.html' -type f -print0 | xargs -0 sed -Ei \
+ -e 's:rust-logo\.svg:logo.svg:g' \
+ -e 's:rust-logo\.png:logo.svg:g' \
+ -e 's:favicon\.svg:logo.svg:g' \
+ -e 's:<link rel="alternate icon" type="image/png" href="[./]*favicon-(16x16|32x32)\.png">::g'
+ $(Q)echo '.logo-container > img { object-fit: contain; }' \
+- >> $(objtree)/$(obj)/doc/rustdoc.css
++ >> $(rustdoc_output)/rustdoc.css
+
+ rustdoc-macros: private rustdoc_host = yes
+ rustdoc-macros: private rustc_target_flags = --crate-type proc-macro \
+@@ -154,7 +157,7 @@ quiet_cmd_rustdoc_test = RUSTDOC T $<
+ @$(objtree)/include/generated/rustc_cfg \
+ $(rustc_target_flags) $(rustdoc_test_target_flags) \
+ --sysroot $(objtree)/$(obj)/test/sysroot $(rustdoc_test_quiet) \
+- -L$(objtree)/$(obj)/test --output $(objtree)/$(obj)/doc \
++ -L$(objtree)/$(obj)/test --output $(rustdoc_output) \
+ --crate-name $(subst rusttest-,,$@) $<
+
+ # We cannot use `-Zpanic-abort-tests` because some tests are dynamic,
+--
+2.42.0
+
--- /dev/null
+From 3596febd0621d11a3c3cee6fb04ca5d531e1a6c6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 18 Oct 2023 17:55:27 +0200
+Subject: rust: docs: fix logo replacement
+
+From: Miguel Ojeda <ojeda@kernel.org>
+
+[ Upstream commit cfd96726e61136e68a168813cedc4084f626208b ]
+
+The static files placement by `rustdoc` changed in Rust 1.67.0 [1],
+but the custom code we have to replace the logo in the generated
+HTML files did not get updated.
+
+Thus update it to have the Linux logo again in the output.
+
+Hopefully `rustdoc` will eventually support a custom logo from
+a local file [2], so that we do not need to maintain this hack
+on our side.
+
+Link: https://github.com/rust-lang/rust/pull/101702 [1]
+Link: https://github.com/rust-lang/rfcs/pull/3226 [2]
+Fixes: 3ed03f4da06e ("rust: upgrade to Rust 1.68.2")
+Cc: stable@vger.kernel.org
+Tested-by: Benno Lossin <benno.lossin@proton.me>
+Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>
+Link: https://lore.kernel.org/r/20231018155527.1015059-1-ojeda@kernel.org
+Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ rust/Makefile | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/rust/Makefile b/rust/Makefile
+index b9acbe5a7a5d5..467f50a752dbd 100644
+--- a/rust/Makefile
++++ b/rust/Makefile
+@@ -85,15 +85,14 @@ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
+ # and then retouch the generated files.
+ rustdoc: rustdoc-core rustdoc-macros rustdoc-compiler_builtins \
+ rustdoc-alloc rustdoc-kernel
+- $(Q)cp $(srctree)/Documentation/images/logo.svg $(rustdoc_output)
+- $(Q)cp $(srctree)/Documentation/images/COPYING-logo $(rustdoc_output)
++ $(Q)cp $(srctree)/Documentation/images/logo.svg $(rustdoc_output)/static.files/
++ $(Q)cp $(srctree)/Documentation/images/COPYING-logo $(rustdoc_output)/static.files/
+ $(Q)find $(rustdoc_output) -name '*.html' -type f -print0 | xargs -0 sed -Ei \
+- -e 's:rust-logo\.svg:logo.svg:g' \
+- -e 's:rust-logo\.png:logo.svg:g' \
+- -e 's:favicon\.svg:logo.svg:g' \
+- -e 's:<link rel="alternate icon" type="image/png" href="[./]*favicon-(16x16|32x32)\.png">::g'
+- $(Q)echo '.logo-container > img { object-fit: contain; }' \
+- >> $(rustdoc_output)/rustdoc.css
++ -e 's:rust-logo-[0-9a-f]+\.svg:logo.svg:g' \
++ -e 's:favicon-[0-9a-f]+\.svg:logo.svg:g' \
++ -e 's:<link rel="alternate icon" type="image/png" href="[/.]+/static\.files/favicon-(16x16|32x32)-[0-9a-f]+\.png">::g'
++ $(Q)for f in $(rustdoc_output)/static.files/rustdoc-*.css; do \
++ echo ".logo-container > img { object-fit: contain; }" >> $$f; done
+
+ rustdoc-macros: private rustdoc_host = yes
+ rustdoc-macros: private rustc_target_flags = --crate-type proc-macro \
+--
+2.42.0
+