DellEMC: Z9332f - Graceful platform reboot (#10240)

Why I did it
To gracefully unmount filesystems and stop containers while performing a cold reboot.
Unmount ONIE-BOOT if mounted during fast/soft/warm reboot
How I did it
Override systemd-reboot service to perform a cold reboot.
Unmount ONIE-BOOT if mounted using fast/soft/warm-reboot plugins.
How to verify it
On reboot, verify that the container stop and filesystem unmount services have completed execution before the platform reboot.
This commit is contained in:
Arun Saravanan Balachandran 2022-08-30 23:53:52 +05:30 committed by GitHub
parent cf69206d02
commit 092e0394b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 41 additions and 1 deletions

View File

@ -4,7 +4,11 @@ z9332f/scripts/sensors usr/bin
z9332f/cfg/z9332f-modules.conf etc/modules-load.d
z9332f/systemd/platform-modules-z9332f.service etc/systemd/system
z9332f/modules/sonic_platform-1.0-py3-none-any.whl usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0
common/platform_reboot usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0
z9332f/scripts/platform_reboot_override usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0
z9332f/scripts/override.conf /etc/systemd/system/systemd-reboot.service.d
z9332f/scripts/fast-reboot_plugin usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0
z9332f/scripts/soft-reboot_plugin usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0
z9332f/scripts/warm-reboot_plugin usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0
common/pcisysfs.py usr/bin
common/io_rd_wr.py usr/local/bin
common/fw-updater usr/local/bin

View File

@ -0,0 +1,8 @@
#!/bin/bash
ONIE_PATH="/mnt/onie-boot"
# Unmount ONIE partition if mounted
if grep -qs ${ONIE_PATH} /proc/mounts; then
umount ${ONIE_PATH}
fi

View File

@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=/usr/share/sonic/device/x86_64-dellemc_z9332f_d1508-r0/platform_reboot_override

View File

@ -0,0 +1,23 @@
#!/usr/bin/python3
import os
import struct
PORT_RES = '/dev/port'
def portio_reg_write(resource, offset, val):
fd = os.open(resource, os.O_RDWR)
if(fd < 0):
print('file open failed %s' % resource)
return
if(os.lseek(fd, offset, os.SEEK_SET) != offset):
print('lseek failed on %s' % resource)
return
ret = os.write(fd, struct.pack('B', val))
if(ret != 1):
print('write failed %d' % ret)
return
os.close(fd)
if __name__ == "__main__":
portio_reg_write(PORT_RES, 0xcf9, 0xe)

View File

@ -0,0 +1 @@
fast-reboot_plugin

View File

@ -0,0 +1 @@
fast-reboot_plugin