From e1b41d44a3a08ce9e8a4f29aa2d456be3bcae3cf Mon Sep 17 00:00:00 2001 From: Andreas Faerber Date: Sun, 13 Jun 2010 17:00:45 +0200 Subject: [PATCH] boot loader: Wire up net_stack_cleanup() Add a platform cleanup hook before starting the kernel. The openfirmware and PXE loaders clean up their network stack there, while the other loaders currently do nothing. This closes ticket #6166 Change-Id: I34765892dfd9b2310c6af97c9ff7d414afae49e5 Reviewed-on: https://review.haiku-os.org/c/50 Reviewed-by: Adrien Destugues Reviewed-by: waddlesplash --- headers/private/kernel/boot/platform.h | 1 + src/system/boot/loader/main.cpp | 4 +++- src/system/boot/platform/amiga_m68k/devices.cpp | 5 +++++ src/system/boot/platform/atari_m68k/devices.cpp | 5 +++++ src/system/boot/platform/bios_ia32/devices.cpp | 5 +++++ src/system/boot/platform/efi/devices.cpp | 6 ++++++ src/system/boot/platform/openfirmware/devices.cpp | 7 +++++++ src/system/boot/platform/pxe_ia32/devices.cpp | 7 +++++++ src/system/boot/platform/u-boot/devices.cpp | 6 ++++++ 9 files changed, 45 insertions(+), 1 deletion(-) diff --git a/headers/private/kernel/boot/platform.h b/headers/private/kernel/boot/platform.h index f343c94659..fa00157717 100644 --- a/headers/private/kernel/boot/platform.h +++ b/headers/private/kernel/boot/platform.h @@ -61,6 +61,7 @@ extern status_t platform_add_block_devices(struct stage2_args *args, NodeList *d extern status_t platform_get_boot_partitions(struct stage2_args *args, Node *bootDevice, NodeList *partitions, NodeList *bootPartitions); extern status_t platform_register_boot_device(Node *device); +extern void platform_cleanup_devices(); /* menu functions */ diff --git a/src/system/boot/loader/main.cpp b/src/system/boot/loader/main.cpp index 6a08a42ef3..8b02173d01 100644 --- a/src/system/boot/loader/main.cpp +++ b/src/system/boot/loader/main.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include "file_systems/packagefs/packagefs.h" @@ -146,7 +147,8 @@ main(stage2_args *args) gKernelArgs.boot_volume = buffer; gKernelArgs.boot_volume_size = gBootVolume.ContentSize(); - // ToDo: cleanup, heap_release() etc. + platform_cleanup_devices(); + // TODO: cleanup, heap_release() etc. heap_print_statistics(); platform_start_kernel(); } diff --git a/src/system/boot/platform/amiga_m68k/devices.cpp b/src/system/boot/platform/amiga_m68k/devices.cpp index 621a8034bc..ef33682aff 100644 --- a/src/system/boot/platform/amiga_m68k/devices.cpp +++ b/src/system/boot/platform/amiga_m68k/devices.cpp @@ -194,3 +194,8 @@ platform_register_boot_device(Node *device) return B_OK; } + +void +platform_cleanup_devices() +{ +} diff --git a/src/system/boot/platform/atari_m68k/devices.cpp b/src/system/boot/platform/atari_m68k/devices.cpp index cc9fcef808..5738e94369 100644 --- a/src/system/boot/platform/atari_m68k/devices.cpp +++ b/src/system/boot/platform/atari_m68k/devices.cpp @@ -1238,3 +1238,8 @@ platform_register_boot_device(Node *device) return B_OK; } + +void +platform_cleanup_devices() +{ +} diff --git a/src/system/boot/platform/bios_ia32/devices.cpp b/src/system/boot/platform/bios_ia32/devices.cpp index 59d2da3b9b..35a1b03d17 100644 --- a/src/system/boot/platform/bios_ia32/devices.cpp +++ b/src/system/boot/platform/bios_ia32/devices.cpp @@ -923,3 +923,8 @@ platform_register_boot_device(Node *device) return B_OK; } + +void +platform_cleanup_devices() +{ +} diff --git a/src/system/boot/platform/efi/devices.cpp b/src/system/boot/platform/efi/devices.cpp index 9e92b8f131..1e5aacb67c 100644 --- a/src/system/boot/platform/efi/devices.cpp +++ b/src/system/boot/platform/efi/devices.cpp @@ -522,3 +522,9 @@ platform_register_boot_device(Node *device) return B_OK; } + + +void +platform_cleanup_devices() +{ +} diff --git a/src/system/boot/platform/openfirmware/devices.cpp b/src/system/boot/platform/openfirmware/devices.cpp index f123149980..acc57cb1b1 100644 --- a/src/system/boot/platform/openfirmware/devices.cpp +++ b/src/system/boot/platform/openfirmware/devices.cpp @@ -132,6 +132,13 @@ platform_get_boot_partitions(struct stage2_args *args, Node *device, } +void +platform_cleanup_devices() +{ + net_stack_cleanup(); +} + + #define DUMPED_BLOCK_SIZE 16 void diff --git a/src/system/boot/platform/pxe_ia32/devices.cpp b/src/system/boot/platform/pxe_ia32/devices.cpp index 5ea9aefd99..696bf77d2e 100644 --- a/src/system/boot/platform/pxe_ia32/devices.cpp +++ b/src/system/boot/platform/pxe_ia32/devices.cpp @@ -182,3 +182,10 @@ platform_register_boot_device(Node *device) return B_OK; } + + +void +platform_cleanup_devices() +{ + net_stack_cleanup(); +} diff --git a/src/system/boot/platform/u-boot/devices.cpp b/src/system/boot/platform/u-boot/devices.cpp index c00bfb6bea..aaf5206d1b 100644 --- a/src/system/boot/platform/u-boot/devices.cpp +++ b/src/system/boot/platform/u-boot/devices.cpp @@ -91,3 +91,9 @@ platform_register_boot_device(Node *device) return B_OK; } + + +void +platform_cleanup_devices() +{ +}