Move Linux build rule to its own folder, update to v5.4.2

The Linux build rule was previously in //third_party/ which meant it was
built in the same folder as other third-party projects. Move its build
rule to its folder to avoid clashes.

Also update Linux to v5.4.2 and update submodule refs.

Change-Id: I32598092c3ef400677ccdb22d0b92f68de113d39
diff --git a/BUILD.gn b/BUILD.gn
index 21d1869..7b1bb73 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -33,7 +33,7 @@
 
 group("update_prebuilts") {
   deps = [
-    "//third_party:linux",
+    "//third_party/linux",
   ]
 }
 
diff --git a/Makefile b/Makefile
index 52fa980..9f39365 100644
--- a/Makefile
+++ b/Makefile
@@ -119,7 +119,7 @@
 update-prebuilts: prebuilts/linux-aarch64/linux/vmlinuz
 
 prebuilts/linux-aarch64/linux/vmlinuz: $(OUT_DIR)/build.ninja
-	@$(NINJA) -C $(OUT_DIR) "third_party:linux"
-	cp out/reference/obj/third_party/linux.bin $@
+	@$(NINJA) -C $(OUT_DIR) "third_party/linux"
+	cp out/reference/obj/third_party/linux/linux.bin $@
 
 endif  # HAFNIUM_HERMETIC_BUILD
diff --git a/build/linux/linux.gni b/build/linux/linux.gni
index 5712932..bb50aa6 100644
--- a/build/linux/linux.gni
+++ b/build/linux/linux.gni
@@ -56,10 +56,12 @@
   defconfig_target = "${target_name}__defconfig"
   prebuilt_target = "${target_name}__prebuilt"
 
+  kernel_dir = "./"
+
   # Args to build/make.py to start the Linux build.
   shared_args = [
     "--directory",
-    rebase_path(invoker.kernel_dir),
+    rebase_path(kernel_dir),
 
     # TODO: Build with toolchain cc instead of a hardcoded one.
     "CC=" + rebase_path("//prebuilts/linux-x64/clang/bin/clang"),
@@ -85,7 +87,7 @@
   # Subtarget which generates a depfile with all files in the Linux tree
   # and gets invalidated if any of them change.
   source_dir(source_target) {
-    path = invoker.kernel_dir
+    path = kernel_dir
   }
 
   # Subtarget which runs `defconfig` and `modules_prepare`. Used by targets
diff --git a/driver/BUILD.gn b/driver/BUILD.gn
index 2cb214a..a06996c 100644
--- a/driver/BUILD.gn
+++ b/driver/BUILD.gn
@@ -17,6 +17,6 @@
 linux_kernel_module("linux") {
   module_name = "hafnium"
   module_dir = "./linux"
-  kernel_target = "//third_party:linux"
+  kernel_target = "//third_party/linux:linux"
   kernel_dir = "//third_party/linux"
 }
diff --git a/prebuilts b/prebuilts
index 7717e1b..6fcd301 160000
--- a/prebuilts
+++ b/prebuilts
@@ -1 +1 @@
-Subproject commit 7717e1bd5d59b9dff482c7a8e1f10d580f4f65bf
+Subproject commit 6fcd30188886b8cdd7cdcd1de8be813914eb9015
diff --git a/test/linux/BUILD.gn b/test/linux/BUILD.gn
index a94af7f..681830e 100644
--- a/test/linux/BUILD.gn
+++ b/test/linux/BUILD.gn
@@ -59,7 +59,7 @@
 
   manifest = "manifest.dts"
   primary_name = "vmlinuz"
-  primary_vm = "//third_party:linux__prebuilt"
+  primary_vm = "//third_party/linux:linux__prebuilt"
   primary_initrd = ":linux_test_initrd"
   secondary_vms = [ [
         "socket0",
diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn
index 6dfa3b9..43c7e41 100644
--- a/third_party/BUILD.gn
+++ b/third_party/BUILD.gn
@@ -12,8 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import("//build/linux/linux.gni")
-
 # TODO: Having all third_party targets defined in this file means they share
 # the same $target_out_dir folder. Ideally we would like to avoid that.
 
@@ -55,8 +53,3 @@
     ":gtest",
   ]
 }
-
-linux_kernel("linux") {
-  kernel_dir = "linux"
-  prebuilt = "//prebuilts/linux-aarch64/linux/vmlinuz"
-}
diff --git a/third_party/linux b/third_party/linux
index bbc0e19..0f672f6 160000
--- a/third_party/linux
+++ b/third_party/linux
@@ -1 +1 @@
-Subproject commit bbc0e19aa259566f22c31e4dc344f88a1c759104
+Subproject commit 0f672f6c0b52b7b0700b0915c72b540721af4465