This enables X86_UMIP among other things, also restores TRANSPARENT_HUGEPAGE_MADVISE=y (which was set to _ALWAYS again, see [1]). How to know what is the policy to enable or disable any option? simple: we follow what upstream defaults to, e.g: if an option is disabled by default (N), we don't enable it unless it's explicitely required. For any other options that can be built as modules, we build them as modules. So the linux kernel configuration that void uses depends on what upstream sets by default. For now this only contains working configurations for x86 and x86_64. People with working hardware should adapt this configuration to the target arch appropiately. Built and tested on x86 and x86_64. [1] https://blog.nelhage.com/post/transparent-hugepages/ [ci skip]
95 lines
3.2 KiB
Diff
95 lines
3.2 KiB
Diff
From e36d607d56dc5c0cbf2cb600e7686b559ea77b44 Mon Sep 17 00:00:00 2001
|
|
From: popcornmix <popcornmix@gmail.com>
|
|
Date: Tue, 18 Feb 2014 01:43:50 -0300
|
|
Subject: [PATCH] net/smsc95xx: Allow mac address to be set as a parameter
|
|
|
|
---
|
|
drivers/net/usb/smsc95xx.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 56 insertions(+)
|
|
|
|
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
|
|
index dc989a8..912be75 100644
|
|
--- a/drivers/net/usb/smsc95xx.c
|
|
+++ b/drivers/net/usb/smsc95xx.c
|
|
@@ -60,6 +60,7 @@
|
|
#define SUSPEND_SUSPEND3 (0x08)
|
|
#define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \
|
|
SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3)
|
|
+#define MAC_ADDR_LEN (6)
|
|
|
|
#define CARRIER_CHECK_DELAY (2 * HZ)
|
|
|
|
@@ -80,6 +81,10 @@ static bool turbo_mode = true;
|
|
module_param(turbo_mode, bool, 0644);
|
|
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
|
|
|
|
+static char *macaddr = ":";
|
|
+module_param(macaddr, charp, 0);
|
|
+MODULE_PARM_DESC(macaddr, "MAC address");
|
|
+
|
|
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
|
u32 *data, int in_pm)
|
|
{
|
|
@@ -809,8 +814,59 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
|
return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
|
|
}
|
|
|
|
+/* Check the macaddr module parameter for a MAC address */
|
|
+static int smsc95xx_is_macaddr_param(struct usbnet *dev, u8 *dev_mac)
|
|
+{
|
|
+ int i, j, got_num, num;
|
|
+ u8 mtbl[MAC_ADDR_LEN];
|
|
+
|
|
+ if (macaddr[0] == ':')
|
|
+ return 0;
|
|
+
|
|
+ i = 0;
|
|
+ j = 0;
|
|
+ num = 0;
|
|
+ got_num = 0;
|
|
+ while (j < MAC_ADDR_LEN) {
|
|
+ if (macaddr[i] && macaddr[i] != ':') {
|
|
+ got_num++;
|
|
+ if ('0' <= macaddr[i] && macaddr[i] <= '9')
|
|
+ num = num * 16 + macaddr[i] - '0';
|
|
+ else if ('A' <= macaddr[i] && macaddr[i] <= 'F')
|
|
+ num = num * 16 + 10 + macaddr[i] - 'A';
|
|
+ else if ('a' <= macaddr[i] && macaddr[i] <= 'f')
|
|
+ num = num * 16 + 10 + macaddr[i] - 'a';
|
|
+ else
|
|
+ break;
|
|
+ i++;
|
|
+ } else if (got_num == 2) {
|
|
+ mtbl[j++] = (u8) num;
|
|
+ num = 0;
|
|
+ got_num = 0;
|
|
+ i++;
|
|
+ } else {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (j == MAC_ADDR_LEN) {
|
|
+ netif_dbg(dev, ifup, dev->net, "Overriding MAC address with: "
|
|
+ "%02x:%02x:%02x:%02x:%02x:%02x\n", mtbl[0], mtbl[1], mtbl[2],
|
|
+ mtbl[3], mtbl[4], mtbl[5]);
|
|
+ for (i = 0; i < MAC_ADDR_LEN; i++)
|
|
+ dev_mac[i] = mtbl[i];
|
|
+ return 1;
|
|
+ } else {
|
|
+ return 0;
|
|
+ }
|
|
+}
|
|
+
|
|
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
|
{
|
|
+ /* Check module parameters */
|
|
+ if (smsc95xx_is_macaddr_param(dev, dev->net->dev_addr))
|
|
+ return;
|
|
+
|
|
const u8 *mac_addr;
|
|
|
|
/* maybe the boot loader passed the MAC address in devicetree */
|
|
--
|
|
2.10.2
|
|
|