Merge ae96b02b9d
("soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"") into android12-5.10-lts
Steps on the way to 5.10.226 Change-Id: I92c594018a2ec1c562a580e493117d780fade779 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
1f05cd743b
@ -148,6 +148,22 @@ &emmc_phy {
|
||||
drive-impedance-ohm = <33>;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
/*
|
||||
* The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module
|
||||
* eMMC and SPI flash powered-down initially (in fact it keeps the
|
||||
* reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override
|
||||
* that signal so that eMMC and SPI can be used regardless of the state
|
||||
* of the signal.
|
||||
*/
|
||||
bios-disable-override-hog {
|
||||
gpios = <RK_PD5 GPIO_ACTIVE_LOW>;
|
||||
gpio-hog;
|
||||
line-name = "bios_disable_override";
|
||||
output-high;
|
||||
};
|
||||
};
|
||||
|
||||
&gmac {
|
||||
assigned-clocks = <&cru SCLK_RMII_SRC>;
|
||||
assigned-clock-parents = <&clkin_gmac>;
|
||||
@ -437,9 +453,14 @@ &pcie_clkreqn_cpm {
|
||||
|
||||
&pinctrl {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&q7_thermal_pin>;
|
||||
pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>;
|
||||
|
||||
gpios {
|
||||
bios_disable_override_hog_pin: bios-disable-override-hog-pin {
|
||||
rockchip,pins =
|
||||
<3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
|
||||
q7_thermal_pin: q7-thermal-pin {
|
||||
rockchip,pins =
|
||||
<0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
|
@ -908,6 +908,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
mem_topology_setup();
|
||||
/* Set max_mapnr before paging_init() */
|
||||
set_max_mapnr(max_pfn);
|
||||
high_memory = (void *)__va(max_low_pfn * PAGE_SIZE);
|
||||
|
||||
/*
|
||||
* Release secondary cpus out of their spinloops at 0x60 now that
|
||||
|
@ -292,8 +292,6 @@ void __init mem_init(void)
|
||||
swiotlb_init(0);
|
||||
#endif
|
||||
|
||||
high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
|
||||
|
||||
kasan_late_init();
|
||||
|
||||
memblock_free_all();
|
||||
|
@ -93,7 +93,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
|
||||
* was a bad idea, and is only provided for backwards
|
||||
* compatibility for older targets.
|
||||
*/
|
||||
return -ENODEV;
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
if (IS_ERR(fw)) {
|
||||
|
@ -409,6 +409,12 @@ enum pmbus_sensor_classes {
|
||||
enum pmbus_data_format { linear = 0, direct, vid };
|
||||
enum vrm_version { vr11 = 0, vr12, vr13, imvp9, amd625mv };
|
||||
|
||||
/* PMBus revision identifiers */
|
||||
#define PMBUS_REV_10 0x00 /* PMBus revision 1.0 */
|
||||
#define PMBUS_REV_11 0x11 /* PMBus revision 1.1 */
|
||||
#define PMBUS_REV_12 0x22 /* PMBus revision 1.2 */
|
||||
#define PMBUS_REV_13 0x33 /* PMBus revision 1.3 */
|
||||
|
||||
struct pmbus_driver_info {
|
||||
int pages; /* Total number of pages */
|
||||
u8 phases[PMBUS_PAGES]; /* Number of phases per page */
|
||||
@ -438,6 +444,8 @@ struct pmbus_driver_info {
|
||||
int (*read_byte_data)(struct i2c_client *client, int page, int reg);
|
||||
int (*read_word_data)(struct i2c_client *client, int page, int phase,
|
||||
int reg);
|
||||
int (*write_byte_data)(struct i2c_client *client, int page, int reg,
|
||||
u8 byte);
|
||||
int (*write_word_data)(struct i2c_client *client, int page, int reg,
|
||||
u16 word);
|
||||
int (*write_byte)(struct i2c_client *client, int page, u8 value);
|
||||
|
@ -82,6 +82,8 @@ struct pmbus_data {
|
||||
|
||||
u32 flags; /* from platform data */
|
||||
|
||||
u8 revision; /* The PMBus revision the device is compliant with */
|
||||
|
||||
int exponent[PMBUS_PAGES];
|
||||
/* linear mode: exponent for output voltages */
|
||||
|
||||
@ -265,6 +267,24 @@ static int _pmbus_write_word_data(struct i2c_client *client, int page, int reg,
|
||||
return pmbus_write_word_data(client, page, reg, word);
|
||||
}
|
||||
|
||||
/*
|
||||
* _pmbus_write_byte_data() is similar to pmbus_write_byte_data(), but checks if
|
||||
* a device specific mapping function exists and calls it if necessary.
|
||||
*/
|
||||
static int _pmbus_write_byte_data(struct i2c_client *client, int page, int reg, u8 value)
|
||||
{
|
||||
struct pmbus_data *data = i2c_get_clientdata(client);
|
||||
const struct pmbus_driver_info *info = data->info;
|
||||
int status;
|
||||
|
||||
if (info->write_byte_data) {
|
||||
status = info->write_byte_data(client, page, reg, value);
|
||||
if (status != -ENODATA)
|
||||
return status;
|
||||
}
|
||||
return pmbus_write_byte_data(client, page, reg, value);
|
||||
}
|
||||
|
||||
int pmbus_update_fan(struct i2c_client *client, int page, int id,
|
||||
u8 config, u8 mask, u16 command)
|
||||
{
|
||||
@ -279,7 +299,7 @@ int pmbus_update_fan(struct i2c_client *client, int page, int id,
|
||||
|
||||
to = (from & ~mask) | (config & mask);
|
||||
if (to != from) {
|
||||
rv = pmbus_write_byte_data(client, page,
|
||||
rv = _pmbus_write_byte_data(client, page,
|
||||
pmbus_fan_config_registers[id], to);
|
||||
if (rv < 0)
|
||||
return rv;
|
||||
@ -386,7 +406,7 @@ int pmbus_update_byte_data(struct i2c_client *client, int page, u8 reg,
|
||||
tmp = (rv & ~mask) | (value & mask);
|
||||
|
||||
if (tmp != rv)
|
||||
rv = pmbus_write_byte_data(client, page, reg, tmp);
|
||||
rv = _pmbus_write_byte_data(client, page, reg, tmp);
|
||||
|
||||
return rv;
|
||||
}
|
||||
@ -899,9 +919,14 @@ static int pmbus_get_boolean(struct i2c_client *client, struct pmbus_boolean *b,
|
||||
|
||||
regval = status & mask;
|
||||
if (regval) {
|
||||
ret = pmbus_write_byte_data(client, page, reg, regval);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
if (data->revision >= PMBUS_REV_12) {
|
||||
ret = _pmbus_write_byte_data(client, page, reg, regval);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
} else {
|
||||
pmbus_clear_fault_page(client, page);
|
||||
}
|
||||
|
||||
}
|
||||
if (s1 && s2) {
|
||||
s64 v1, v2;
|
||||
@ -2222,6 +2247,10 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,
|
||||
if (ret > 0 && (ret & PB_WP_ANY))
|
||||
data->flags |= PMBUS_WRITE_PROTECTED | PMBUS_SKIP_STATUS_CHECK;
|
||||
|
||||
ret = i2c_smbus_read_byte_data(client, PMBUS_REVISION);
|
||||
if (ret >= 0)
|
||||
data->revision = ret;
|
||||
|
||||
if (data->info->pages)
|
||||
pmbus_clear_faults(client);
|
||||
else
|
||||
|
@ -187,6 +187,7 @@ static const char * const smbus_pnp_ids[] = {
|
||||
"LEN2054", /* E480 */
|
||||
"LEN2055", /* E580 */
|
||||
"LEN2068", /* T14 Gen 1 */
|
||||
"SYN3015", /* HP EliteBook 840 G2 */
|
||||
"SYN3052", /* HP EliteBook 840 G4 */
|
||||
"SYN3221", /* HP 15-ay000 */
|
||||
"SYN323d", /* HP Spectre X360 13-w013dx */
|
||||
|
@ -617,6 +617,15 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
|
||||
},
|
||||
.driver_data = (void *)(SERIO_QUIRK_NOMUX)
|
||||
},
|
||||
{
|
||||
/* Fujitsu Lifebook E756 */
|
||||
/* https://bugzilla.suse.com/show_bug.cgi?id=1229056 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E756"),
|
||||
},
|
||||
.driver_data = (void *)(SERIO_QUIRK_NOMUX)
|
||||
},
|
||||
{
|
||||
/* Fujitsu Lifebook E5411 */
|
||||
.matches = {
|
||||
|
@ -819,7 +819,7 @@ static void ads7846_read_state(struct ads7846 *ts)
|
||||
m = &ts->msg[msg_idx];
|
||||
error = spi_sync(ts->spi, m);
|
||||
if (error) {
|
||||
dev_err(&ts->spi->dev, "spi_sync --> %d\n", error);
|
||||
dev_err_ratelimited(&ts->spi->dev, "spi_sync --> %d\n", error);
|
||||
packet->ignore = true;
|
||||
return;
|
||||
}
|
||||
|
@ -84,7 +84,7 @@
|
||||
FTGMAC100_INT_RPKT_BUF)
|
||||
|
||||
/* All the interrupts we care about */
|
||||
#define FTGMAC100_INT_ALL (FTGMAC100_INT_RPKT_BUF | \
|
||||
#define FTGMAC100_INT_ALL (FTGMAC100_INT_RXTX | \
|
||||
FTGMAC100_INT_BAD)
|
||||
|
||||
/*
|
||||
|
@ -2155,12 +2155,12 @@ static netdev_tx_t
|
||||
dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
|
||||
{
|
||||
const int queue_mapping = skb_get_queue_mapping(skb);
|
||||
bool nonlinear = skb_is_nonlinear(skb);
|
||||
struct rtnl_link_stats64 *percpu_stats;
|
||||
struct dpaa_percpu_priv *percpu_priv;
|
||||
struct netdev_queue *txq;
|
||||
struct dpaa_priv *priv;
|
||||
struct qm_fd fd;
|
||||
bool nonlinear;
|
||||
int offset = 0;
|
||||
int err = 0;
|
||||
|
||||
@ -2170,6 +2170,13 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
|
||||
|
||||
qm_fd_clear_fd(&fd);
|
||||
|
||||
/* Packet data is always read as 32-bit words, so zero out any part of
|
||||
* the skb which might be sent if we have to pad the packet
|
||||
*/
|
||||
if (__skb_put_padto(skb, ETH_ZLEN, false))
|
||||
goto enomem;
|
||||
|
||||
nonlinear = skb_is_nonlinear(skb);
|
||||
if (!nonlinear) {
|
||||
/* We're going to store the skb backpointer at the beginning
|
||||
* of the data buffer, so we need a privately owned skb
|
||||
|
@ -1259,7 +1259,7 @@ ice_add_update_vsi_list(struct ice_hw *hw,
|
||||
|
||||
/* A rule already exists with the new VSI being added */
|
||||
if (test_bit(vsi_handle, m_entry->vsi_list_info->vsi_map))
|
||||
return 0;
|
||||
return -EEXIST;
|
||||
|
||||
/* Update the previously created VSI list set with
|
||||
* the new VSI ID passed in
|
||||
|
@ -947,15 +947,13 @@ jme_udpsum(struct sk_buff *skb)
|
||||
if (skb->protocol != htons(ETH_P_IP))
|
||||
return csum;
|
||||
skb_set_network_header(skb, ETH_HLEN);
|
||||
if ((ip_hdr(skb)->protocol != IPPROTO_UDP) ||
|
||||
(skb->len < (ETH_HLEN +
|
||||
(ip_hdr(skb)->ihl << 2) +
|
||||
sizeof(struct udphdr)))) {
|
||||
|
||||
if (ip_hdr(skb)->protocol != IPPROTO_UDP ||
|
||||
skb->len < (ETH_HLEN + ip_hdrlen(skb) + sizeof(struct udphdr))) {
|
||||
skb_reset_network_header(skb);
|
||||
return csum;
|
||||
}
|
||||
skb_set_transport_header(skb,
|
||||
ETH_HLEN + (ip_hdr(skb)->ihl << 2));
|
||||
skb_set_transport_header(skb, ETH_HLEN + ip_hdrlen(skb));
|
||||
csum = udp_hdr(skb)->check;
|
||||
skb_reset_transport_header(skb);
|
||||
skb_reset_network_header(skb);
|
||||
|
@ -127,6 +127,10 @@ void mlx5e_build_ptys2ethtool_map(void)
|
||||
ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GBASE_LR4, legacy,
|
||||
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100BASE_TX, legacy,
|
||||
ETHTOOL_LINK_MODE_100baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_1000BASE_T, legacy,
|
||||
ETHTOOL_LINK_MODE_1000baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_10GBASE_T, legacy,
|
||||
ETHTOOL_LINK_MODE_10000baseT_Full_BIT);
|
||||
MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_CR, legacy,
|
||||
|
@ -1600,6 +1600,7 @@ static const struct pci_device_id mlx5_core_pci_table[] = {
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2d2) }, /* BlueField integrated ConnectX-5 network controller */
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2d3), MLX5_PCI_DEV_IS_VF}, /* BlueField integrated ConnectX-5 network controller VF */
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2d6) }, /* BlueField-2 integrated ConnectX-6 Dx network controller */
|
||||
{ PCI_VDEVICE(MELLANOX, 0xa2dc) }, /* BlueField-3 integrated ConnectX-7 network controller */
|
||||
{ 0, }
|
||||
};
|
||||
|
||||
|
@ -232,16 +232,6 @@ static int vsc739x_config_init(struct phy_device *phydev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vsc73xx_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
/* The VSC73xx switches does not like to be instructed to
|
||||
* do autonegotiation in any way, it prefers that you just go
|
||||
* with the power-on/reset defaults. Writing some registers will
|
||||
* just make autonegotiation permanently fail.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This adds a skew for both TX and RX clocks, so the skew should only be
|
||||
* applied to "rgmii-id" interfaces. It may not work as expected
|
||||
* on "rgmii-txid", "rgmii-rxid" or "rgmii" interfaces. */
|
||||
@ -424,7 +414,6 @@ static struct phy_driver vsc82xx_driver[] = {
|
||||
.phy_id_mask = 0x000ffff0,
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.config_init = vsc738x_config_init,
|
||||
.config_aneg = vsc73xx_config_aneg,
|
||||
.read_page = vsc73xx_read_page,
|
||||
.write_page = vsc73xx_write_page,
|
||||
}, {
|
||||
@ -433,7 +422,6 @@ static struct phy_driver vsc82xx_driver[] = {
|
||||
.phy_id_mask = 0x000ffff0,
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.config_init = vsc738x_config_init,
|
||||
.config_aneg = vsc73xx_config_aneg,
|
||||
.read_page = vsc73xx_read_page,
|
||||
.write_page = vsc73xx_write_page,
|
||||
}, {
|
||||
@ -442,7 +430,6 @@ static struct phy_driver vsc82xx_driver[] = {
|
||||
.phy_id_mask = 0x000ffff0,
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.config_init = vsc739x_config_init,
|
||||
.config_aneg = vsc73xx_config_aneg,
|
||||
.read_page = vsc73xx_read_page,
|
||||
.write_page = vsc73xx_write_page,
|
||||
}, {
|
||||
@ -451,7 +438,6 @@ static struct phy_driver vsc82xx_driver[] = {
|
||||
.phy_id_mask = 0x000ffff0,
|
||||
/* PHY_GBIT_FEATURES */
|
||||
.config_init = vsc739x_config_init,
|
||||
.config_aneg = vsc73xx_config_aneg,
|
||||
.read_page = vsc73xx_read_page,
|
||||
.write_page = vsc73xx_write_page,
|
||||
}, {
|
||||
|
@ -253,13 +253,14 @@ static int ipheth_carrier_set(struct ipheth_device *dev)
|
||||
0x02, /* index */
|
||||
dev->ctrl_buf, IPHETH_CTRL_BUF_SIZE,
|
||||
IPHETH_CTRL_TIMEOUT);
|
||||
if (retval < 0) {
|
||||
if (retval <= 0) {
|
||||
dev_err(&dev->intf->dev, "%s: usb_control_msg: %d\n",
|
||||
__func__, retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
if (dev->ctrl_buf[0] == IPHETH_CARRIER_ON) {
|
||||
if ((retval == 1 && dev->ctrl_buf[0] == IPHETH_CARRIER_ON) ||
|
||||
(retval >= 2 && dev->ctrl_buf[1] == IPHETH_CARRIER_ON)) {
|
||||
netif_carrier_on(dev->net);
|
||||
if (dev->tx_urb->status != -EINPROGRESS)
|
||||
netif_wake_queue(dev->net);
|
||||
|
@ -1425,18 +1425,18 @@ struct sdw_dpn_prop *sdw_get_slave_dpn_prop(struct sdw_slave *slave,
|
||||
unsigned int port_num)
|
||||
{
|
||||
struct sdw_dpn_prop *dpn_prop;
|
||||
unsigned long mask;
|
||||
u8 num_ports;
|
||||
int i;
|
||||
|
||||
if (direction == SDW_DATA_DIR_TX) {
|
||||
mask = slave->prop.source_ports;
|
||||
num_ports = hweight32(slave->prop.source_ports);
|
||||
dpn_prop = slave->prop.src_dpn_prop;
|
||||
} else {
|
||||
mask = slave->prop.sink_ports;
|
||||
num_ports = hweight32(slave->prop.sink_ports);
|
||||
dpn_prop = slave->prop.sink_dpn_prop;
|
||||
}
|
||||
|
||||
for_each_set_bit(i, &mask, 32) {
|
||||
for (i = 0; i < num_ports; i++) {
|
||||
if (dpn_prop[i].num == port_num)
|
||||
return &dpn_prop[i];
|
||||
}
|
||||
|
@ -731,14 +731,15 @@ static void nxp_fspi_fill_txfifo(struct nxp_fspi *f,
|
||||
if (i < op->data.nbytes) {
|
||||
u32 data = 0;
|
||||
int j;
|
||||
int remaining = op->data.nbytes - i;
|
||||
/* Wait for TXFIFO empty */
|
||||
ret = fspi_readl_poll_tout(f, f->iobase + FSPI_INTR,
|
||||
FSPI_INTR_IPTXWE, 0,
|
||||
POLL_TOUT, true);
|
||||
WARN_ON(ret);
|
||||
|
||||
for (j = 0; j < ALIGN(op->data.nbytes - i, 4); j += 4) {
|
||||
memcpy(&data, buf + i + j, 4);
|
||||
for (j = 0; j < ALIGN(remaining, 4); j += 4) {
|
||||
memcpy(&data, buf + i + j, min_t(int, 4, remaining - j));
|
||||
fspi_writel(f, data, base + FSPI_TFDR + j);
|
||||
}
|
||||
fspi_writel(f, FSPI_INTR_IPTXWE, base + FSPI_INTR);
|
||||
|
@ -30,12 +30,24 @@
|
||||
#define uISP_VAL_MAX ((unsigned int)((1 << uISP_REG_BIT) - 1))
|
||||
|
||||
/* a:fraction bits for 16bit precision, b:fraction bits for ISP precision */
|
||||
#define sDIGIT_FITTING(v, a, b) \
|
||||
min_t(int, max_t(int, (((v) >> sSHIFT) >> max(sFRACTION_BITS_FITTING(a) - (b), 0)), \
|
||||
sISP_VAL_MIN), sISP_VAL_MAX)
|
||||
#define uDIGIT_FITTING(v, a, b) \
|
||||
min((unsigned int)max((unsigned)(((v) >> uSHIFT) \
|
||||
>> max((int)(uFRACTION_BITS_FITTING(a) - (b)), 0)), \
|
||||
uISP_VAL_MIN), uISP_VAL_MAX)
|
||||
static inline int sDIGIT_FITTING(int v, int a, int b)
|
||||
{
|
||||
int fit_shift = sFRACTION_BITS_FITTING(a) - b;
|
||||
|
||||
v >>= sSHIFT;
|
||||
v >>= fit_shift > 0 ? fit_shift : 0;
|
||||
|
||||
return clamp_t(int, v, sISP_VAL_MIN, sISP_VAL_MAX);
|
||||
}
|
||||
|
||||
static inline unsigned int uDIGIT_FITTING(unsigned int v, int a, int b)
|
||||
{
|
||||
int fit_shift = uFRACTION_BITS_FITTING(a) - b;
|
||||
|
||||
v >>= uSHIFT;
|
||||
v >>= fit_shift > 0 ? fit_shift : 0;
|
||||
|
||||
return clamp_t(unsigned int, v, uISP_VAL_MIN, uISP_VAL_MAX);
|
||||
}
|
||||
|
||||
#endif /* __SH_CSS_FRAC_H */
|
||||
|
@ -3704,6 +3704,7 @@ static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
||||
|
||||
btrfs_i_size_write(dir, dir->vfs_inode.i_size - name_len * 2);
|
||||
inode_inc_iversion(&inode->vfs_inode);
|
||||
inode_set_ctime_current(&inode->vfs_inode);
|
||||
inode_inc_iversion(&dir->vfs_inode);
|
||||
inode->vfs_inode.i_ctime = dir->vfs_inode.i_mtime =
|
||||
dir->vfs_inode.i_ctime = current_time(&inode->vfs_inode);
|
||||
|
@ -609,6 +609,9 @@ static int nfs_server_return_marked_delegations(struct nfs_server *server,
|
||||
prev = delegation;
|
||||
continue;
|
||||
}
|
||||
inode = nfs_delegation_grab_inode(delegation);
|
||||
if (inode == NULL)
|
||||
continue;
|
||||
|
||||
if (prev) {
|
||||
struct inode *tmp = nfs_delegation_grab_inode(prev);
|
||||
@ -619,12 +622,6 @@ static int nfs_server_return_marked_delegations(struct nfs_server *server,
|
||||
}
|
||||
}
|
||||
|
||||
inode = nfs_delegation_grab_inode(delegation);
|
||||
if (inode == NULL) {
|
||||
rcu_read_unlock();
|
||||
iput(to_put);
|
||||
goto restart;
|
||||
}
|
||||
delegation = nfs_start_delegation_return_locked(NFS_I(inode));
|
||||
rcu_read_unlock();
|
||||
|
||||
@ -1140,7 +1137,6 @@ static int nfs_server_reap_unclaimed_delegations(struct nfs_server *server,
|
||||
struct inode *inode;
|
||||
restart:
|
||||
rcu_read_lock();
|
||||
restart_locked:
|
||||
list_for_each_entry_rcu(delegation, &server->delegations, super_list) {
|
||||
if (test_bit(NFS_DELEGATION_INODE_FREEING,
|
||||
&delegation->flags) ||
|
||||
@ -1151,7 +1147,7 @@ static int nfs_server_reap_unclaimed_delegations(struct nfs_server *server,
|
||||
continue;
|
||||
inode = nfs_delegation_grab_inode(delegation);
|
||||
if (inode == NULL)
|
||||
goto restart_locked;
|
||||
continue;
|
||||
delegation = nfs_start_delegation_return_locked(NFS_I(inode));
|
||||
rcu_read_unlock();
|
||||
if (delegation != NULL) {
|
||||
@ -1272,7 +1268,6 @@ static int nfs_server_reap_expired_delegations(struct nfs_server *server,
|
||||
nfs4_stateid stateid;
|
||||
restart:
|
||||
rcu_read_lock();
|
||||
restart_locked:
|
||||
list_for_each_entry_rcu(delegation, &server->delegations, super_list) {
|
||||
if (test_bit(NFS_DELEGATION_INODE_FREEING,
|
||||
&delegation->flags) ||
|
||||
@ -1283,7 +1278,7 @@ static int nfs_server_reap_expired_delegations(struct nfs_server *server,
|
||||
continue;
|
||||
inode = nfs_delegation_grab_inode(delegation);
|
||||
if (inode == NULL)
|
||||
goto restart_locked;
|
||||
continue;
|
||||
spin_lock(&delegation->lock);
|
||||
cred = get_cred_rcu(delegation->cred);
|
||||
nfs4_stateid_copy(&stateid, &delegation->stateid);
|
||||
|
@ -334,11 +334,11 @@ static struct sk_buff *gue_gro_receive(struct sock *sk,
|
||||
struct gro_remcsum grc;
|
||||
u8 proto;
|
||||
|
||||
skb_gro_remcsum_init(&grc);
|
||||
|
||||
if (!fou)
|
||||
goto out;
|
||||
|
||||
skb_gro_remcsum_init(&grc);
|
||||
|
||||
off = skb_gro_offset(skb);
|
||||
len = off + sizeof(*guehdr);
|
||||
|
||||
|
@ -160,6 +160,8 @@ for ORIG_MERGE_FILE in $MERGE_LIST ; do
|
||||
sed -i "/$CFG[ =]/d" $MERGE_FILE
|
||||
fi
|
||||
done
|
||||
# In case the previous file lacks a new line at the end
|
||||
echo >> $TMP_FILE
|
||||
cat $MERGE_FILE >> $TMP_FILE
|
||||
done
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user