Compare commits
4 Commits
f20078df0b
...
f46ba93944
Author | SHA1 | Date |
---|---|---|
Lennart Poettering | f46ba93944 | |
Lennart Poettering | d47df15b11 | |
nabijaczleweli | e81f5fc4e8 | |
nabijaczleweli | 80af9bdabe |
|
@ -691,13 +691,29 @@
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>RxBufferSize=</varname></term>
|
<term><varname>RxBufferSize=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a integer. Specifies the NIC receive ring buffer size. When unset, the kernel's default will be used.</para>
|
<para>Takes an integer. Specifies the maximum number of pending packets in the NIC receive buffer.
|
||||||
|
When unset, the kernel's default will be used.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>RxMiniBufferSize=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Takes an integer. Specifies the maximum number of pending packets in the NIC mini receive buffer.
|
||||||
|
When unset, the kernel's default will be used.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>RxJumboBufferSize=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Takes an integer. Specifies the maximum number of pending packets in the NIC jumbo receive buffer.
|
||||||
|
When unset, the kernel's default will be used.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TxBufferSize=</varname></term>
|
<term><varname>TxBufferSize=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a integer. Specifies the NIC transmit ring buffer size. When unset, the kernel's default will be used.</para>
|
<para>Takes an integer. Specifies the maximum number of pending packets in the NIC transmit buffer.
|
||||||
|
When unset, the kernel's default will be used.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
|
|
@ -244,10 +244,16 @@ int efi_set_variable_string(sd_id128_t vendor, const char *name, const char *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_efi_boot(void) {
|
bool is_efi_boot(void) {
|
||||||
if (detect_container() > 0)
|
static int cache = -1;
|
||||||
return false;
|
|
||||||
|
|
||||||
return access("/sys/firmware/efi/", F_OK) >= 0;
|
if (cache < 0) {
|
||||||
|
if (detect_container() > 0)
|
||||||
|
cache = false;
|
||||||
|
else
|
||||||
|
cache = access("/sys/firmware/efi/", F_OK) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_flag(const char *varname) {
|
static int read_flag(const char *varname) {
|
||||||
|
@ -271,11 +277,21 @@ static int read_flag(const char *varname) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_efi_secure_boot(void) {
|
bool is_efi_secure_boot(void) {
|
||||||
return read_flag("SecureBoot") > 0;
|
static int cache = -1;
|
||||||
|
|
||||||
|
if (cache < 0)
|
||||||
|
cache = read_flag("SecureBoot");
|
||||||
|
|
||||||
|
return cache > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_efi_secure_boot_setup_mode(void) {
|
bool is_efi_secure_boot_setup_mode(void) {
|
||||||
return read_flag("SetupMode") > 0;
|
static int cache = -1;
|
||||||
|
|
||||||
|
if (cache < 0)
|
||||||
|
cache = read_flag("SetupMode");
|
||||||
|
|
||||||
|
return cache > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int systemd_efi_options_variable(char **line) {
|
int systemd_efi_options_variable(char **line) {
|
||||||
|
|
|
@ -431,18 +431,24 @@ int ethtool_set_nic_buffer_size(int *ethtool_fd, const char *ifname, netdev_ring
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
|
|
||||||
if (ring->rx_pending_set) {
|
if (ring->rx_pending_set && ecmd.rx_pending != ring->rx_pending) {
|
||||||
if (ecmd.rx_pending != ring->rx_pending) {
|
ecmd.rx_pending = ring->rx_pending;
|
||||||
ecmd.rx_pending = ring->rx_pending;
|
need_update = true;
|
||||||
need_update = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ring->tx_pending_set) {
|
if (ring->rx_mini_pending_set && ecmd.rx_mini_pending != ring->rx_mini_pending) {
|
||||||
if (ecmd.tx_pending != ring->tx_pending) {
|
ecmd.rx_mini_pending = ring->rx_mini_pending;
|
||||||
ecmd.tx_pending = ring->tx_pending;
|
need_update = true;
|
||||||
need_update = true;
|
}
|
||||||
}
|
|
||||||
|
if (ring->rx_jumbo_pending_set && ecmd.rx_jumbo_pending != ring->rx_jumbo_pending) {
|
||||||
|
ecmd.rx_jumbo_pending = ring->rx_jumbo_pending;
|
||||||
|
need_update = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ring->tx_pending_set && ecmd.tx_pending != ring->tx_pending) {
|
||||||
|
ecmd.tx_pending = ring->tx_pending;
|
||||||
|
need_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_update) {
|
if (need_update) {
|
||||||
|
@ -1036,6 +1042,12 @@ int config_parse_nic_buffer_size(const char *unit,
|
||||||
if (streq(lvalue, "RxBufferSize")) {
|
if (streq(lvalue, "RxBufferSize")) {
|
||||||
ring->rx_pending = k;
|
ring->rx_pending = k;
|
||||||
ring->rx_pending_set = true;
|
ring->rx_pending_set = true;
|
||||||
|
} else if (streq(lvalue, "RxMiniBufferSize")) {
|
||||||
|
ring->rx_mini_pending = k;
|
||||||
|
ring->rx_mini_pending_set = true;
|
||||||
|
} else if (streq(lvalue, "RxJumboBufferSize")) {
|
||||||
|
ring->rx_jumbo_pending = k;
|
||||||
|
ring->rx_jumbo_pending_set = true;
|
||||||
} else if (streq(lvalue, "TxBufferSize")) {
|
} else if (streq(lvalue, "TxBufferSize")) {
|
||||||
ring->tx_pending = k;
|
ring->tx_pending = k;
|
||||||
ring->tx_pending_set = true;
|
ring->tx_pending_set = true;
|
||||||
|
|
|
@ -84,9 +84,13 @@ typedef struct netdev_channels {
|
||||||
|
|
||||||
typedef struct netdev_ring_param {
|
typedef struct netdev_ring_param {
|
||||||
uint32_t rx_pending;
|
uint32_t rx_pending;
|
||||||
|
uint32_t rx_mini_pending;
|
||||||
|
uint32_t rx_jumbo_pending;
|
||||||
uint32_t tx_pending;
|
uint32_t tx_pending;
|
||||||
|
|
||||||
bool rx_pending_set;
|
bool rx_pending_set;
|
||||||
|
bool rx_mini_pending_set;
|
||||||
|
bool rx_jumbo_pending_set;
|
||||||
bool tx_pending_set;
|
bool tx_pending_set;
|
||||||
} netdev_ring_param;
|
} netdev_ring_param;
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,8 @@ Link.OtherChannels, config_parse_channel, 0,
|
||||||
Link.CombinedChannels, config_parse_channel, 0, offsetof(link_config, channels)
|
Link.CombinedChannels, config_parse_channel, 0, offsetof(link_config, channels)
|
||||||
Link.Advertise, config_parse_advertise, 0, offsetof(link_config, advertise)
|
Link.Advertise, config_parse_advertise, 0, offsetof(link_config, advertise)
|
||||||
Link.RxBufferSize, config_parse_nic_buffer_size, 0, offsetof(link_config, ring)
|
Link.RxBufferSize, config_parse_nic_buffer_size, 0, offsetof(link_config, ring)
|
||||||
|
Link.RxMiniBufferSize, config_parse_nic_buffer_size, 0, offsetof(link_config, ring)
|
||||||
|
Link.RxJumboBufferSize, config_parse_nic_buffer_size, 0, offsetof(link_config, ring)
|
||||||
Link.TxBufferSize, config_parse_nic_buffer_size, 0, offsetof(link_config, ring)
|
Link.TxBufferSize, config_parse_nic_buffer_size, 0, offsetof(link_config, ring)
|
||||||
Link.RxFlowControl, config_parse_tristate, 0, offsetof(link_config, rx_flow_control)
|
Link.RxFlowControl, config_parse_tristate, 0, offsetof(link_config, rx_flow_control)
|
||||||
Link.TxFlowControl, config_parse_tristate, 0, offsetof(link_config, tx_flow_control)
|
Link.TxFlowControl, config_parse_tristate, 0, offsetof(link_config, tx_flow_control)
|
||||||
|
|
|
@ -407,7 +407,7 @@ int link_config_apply(link_config_ctx *ctx, link_config *config,
|
||||||
log_warning_errno(r, "Could not set channels of %s: %m", old_name);
|
log_warning_errno(r, "Could not set channels of %s: %m", old_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config->ring.rx_pending_set || config->ring.tx_pending_set) {
|
if (config->ring.rx_pending_set || config->ring.rx_mini_pending_set || config->ring.rx_jumbo_pending_set || config->ring.tx_pending_set) {
|
||||||
r = ethtool_set_nic_buffer_size(&ctx->ethtool_fd, old_name, &config->ring);
|
r = ethtool_set_nic_buffer_size(&ctx->ethtool_fd, old_name, &config->ring);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning_errno(r, "Could not set ring buffer of %s: %m", old_name);
|
log_warning_errno(r, "Could not set ring buffer of %s: %m", old_name);
|
||||||
|
|
|
@ -40,6 +40,8 @@ OtherChannels=
|
||||||
CombinedChannels=
|
CombinedChannels=
|
||||||
Advertise=
|
Advertise=
|
||||||
RxBufferSize=
|
RxBufferSize=
|
||||||
|
RxMiniBufferSize=
|
||||||
|
RxJumboBufferSize=
|
||||||
TxBufferSize=
|
TxBufferSize=
|
||||||
RxFlowControl=
|
RxFlowControl=
|
||||||
TxFlowControl=
|
TxFlowControl=
|
||||||
|
|
Loading…
Reference in New Issue