Adjust the registration method of PCIe and INET drivers, and set raid6_select to start asynchronously by default.

Asynchronous modules should now be configured in the DTS file, with an additional variable in the bootargs.
The recommended configuration is as follows:
driver_async_probe=spacemit-hdmi-drv,i2c-spacemit-k1x,ri2c-spacemit-k1x,k1xccic,sdhci-spacemit,k1x-dwc-pcie,pxa2xx-uart

Change-Id: I2877696e84cc735c95363a1614dcbf3e5e26d5e0
This commit is contained in:
goumin 2024-11-22 17:59:34 +08:00 committed by zhangmeng
parent 6c7f63e739
commit 8b8ec6e224
3 changed files with 18 additions and 3 deletions

View file

@ -1861,6 +1861,7 @@ static const struct dev_pm_ops k1x_pcie_pm_ops = {
};
static struct platform_driver k1x_pcie_driver = {
.probe = k1x_pcie_probe,
.driver = {
.name = "k1x-dwc-pcie",
.of_match_table = of_k1x_pcie_match,
@ -1868,4 +1869,4 @@ static struct platform_driver k1x_pcie_driver = {
.pm = &k1x_pcie_pm_ops,
},
};
builtin_platform_driver_probe(k1x_pcie_driver, k1x_pcie_probe);
module_platform_driver(k1x_pcie_driver);

View file

@ -18,6 +18,9 @@
#else
#include <linux/module.h>
#include <linux/gfp.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/async.h>
/* In .bss so it's zeroed */
const char raid6_empty_zero_page[PAGE_SIZE] __attribute__((aligned(256)));
EXPORT_SYMBOL(raid6_empty_zero_page);
@ -289,7 +292,18 @@ static void raid6_exit(void)
do { } while (0);
}
subsys_initcall(raid6_select_algo);
static void raid6_select_algo_wrapper(void *data, long long unsigned int arg)
{
raid6_select_algo();
}
static int __init raid6_select_algo_async_init(void)
{
async_schedule(raid6_select_algo_wrapper, NULL);
return 0;
}
subsys_initcall(raid6_select_algo_async_init);
module_exit(raid6_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("RAID6 Q-syndrome calculations");

View file

@ -2080,7 +2080,7 @@ out_unregister_tcp_proto:
goto out;
}
fs_initcall(inet_init);
subsys_initcall(inet_init);
/* ------------------------------------------------------------------------ */