346 lines
11 KiB
Diff
346 lines
11 KiB
Diff
|
diff --git a/Makefile b/Makefile
|
||
|
index 0c13bf09d17dc..734a4cc6ac464 100644
|
||
|
--- a/Makefile
|
||
|
+++ b/Makefile
|
||
|
@@ -1,6 +1,6 @@
|
||
|
VERSION = 4
|
||
|
PATCHLEVEL = 9
|
||
|
-SUBLEVEL = 313
|
||
|
+SUBLEVEL = 314
|
||
|
EXTRAVERSION =
|
||
|
NAME = Roaring Lionus
|
||
|
|
||
|
diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c
|
||
|
index 3b6f687f177cd..32f8c501f6cb1 100644
|
||
|
--- a/arch/mips/bmips/setup.c
|
||
|
+++ b/arch/mips/bmips/setup.c
|
||
|
@@ -174,7 +174,7 @@ void __init plat_mem_setup(void)
|
||
|
dtb = phys_to_virt(fw_arg2);
|
||
|
else if (fw_passed_dtb) /* UHI interface */
|
||
|
dtb = (void *)fw_passed_dtb;
|
||
|
- else if (__dtb_start != __dtb_end)
|
||
|
+ else if (&__dtb_start != &__dtb_end)
|
||
|
dtb = (void *)__dtb_start;
|
||
|
else
|
||
|
panic("no dtb found");
|
||
|
diff --git a/arch/mips/lantiq/prom.c b/arch/mips/lantiq/prom.c
|
||
|
index 4cbb000e778e3..9b30e46e91a75 100644
|
||
|
--- a/arch/mips/lantiq/prom.c
|
||
|
+++ b/arch/mips/lantiq/prom.c
|
||
|
@@ -76,7 +76,7 @@ void __init plat_mem_setup(void)
|
||
|
|
||
|
if (fw_passed_dtb) /* UHI interface */
|
||
|
dtb = (void *)fw_passed_dtb;
|
||
|
- else if (__dtb_start != __dtb_end)
|
||
|
+ else if (&__dtb_start != &__dtb_end)
|
||
|
dtb = (void *)__dtb_start;
|
||
|
else
|
||
|
panic("no dtb found");
|
||
|
diff --git a/arch/mips/pic32/pic32mzda/init.c b/arch/mips/pic32/pic32mzda/init.c
|
||
|
index 51599710472bc..406c6c5cec29b 100644
|
||
|
--- a/arch/mips/pic32/pic32mzda/init.c
|
||
|
+++ b/arch/mips/pic32/pic32mzda/init.c
|
||
|
@@ -36,7 +36,7 @@ static ulong get_fdtaddr(void)
|
||
|
if (fw_passed_dtb && !fw_arg2 && !fw_arg3)
|
||
|
return (ulong)fw_passed_dtb;
|
||
|
|
||
|
- if (__dtb_start < __dtb_end)
|
||
|
+ if (&__dtb_start < &__dtb_end)
|
||
|
ftaddr = (ulong)__dtb_start;
|
||
|
|
||
|
return ftaddr;
|
||
|
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
|
||
|
index 3c9cee9520ed5..ef51f811d4d9c 100644
|
||
|
--- a/drivers/block/drbd/drbd_nl.c
|
||
|
+++ b/drivers/block/drbd/drbd_nl.c
|
||
|
@@ -774,9 +774,11 @@ int drbd_adm_set_role(struct sk_buff *skb, struct genl_info *info)
|
||
|
mutex_lock(&adm_ctx.resource->adm_mutex);
|
||
|
|
||
|
if (info->genlhdr->cmd == DRBD_ADM_PRIMARY)
|
||
|
- retcode = drbd_set_role(adm_ctx.device, R_PRIMARY, parms.assume_uptodate);
|
||
|
+ retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device,
|
||
|
+ R_PRIMARY, parms.assume_uptodate);
|
||
|
else
|
||
|
- retcode = drbd_set_role(adm_ctx.device, R_SECONDARY, 0);
|
||
|
+ retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device,
|
||
|
+ R_SECONDARY, 0);
|
||
|
|
||
|
mutex_unlock(&adm_ctx.resource->adm_mutex);
|
||
|
genl_lock();
|
||
|
@@ -1933,7 +1935,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info)
|
||
|
drbd_flush_workqueue(&connection->sender_work);
|
||
|
|
||
|
rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE);
|
||
|
- retcode = rv; /* FIXME: Type mismatch. */
|
||
|
+ retcode = (enum drbd_ret_code)rv;
|
||
|
drbd_resume_io(device);
|
||
|
if (rv < SS_SUCCESS)
|
||
|
goto fail;
|
||
|
@@ -2684,7 +2686,8 @@ int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info)
|
||
|
}
|
||
|
rcu_read_unlock();
|
||
|
|
||
|
- retcode = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE);
|
||
|
+ retcode = (enum drbd_ret_code)conn_request_state(connection,
|
||
|
+ NS(conn, C_UNCONNECTED), CS_VERBOSE);
|
||
|
|
||
|
conn_reconfig_done(connection);
|
||
|
mutex_unlock(&adm_ctx.resource->adm_mutex);
|
||
|
@@ -2790,7 +2793,7 @@ int drbd_adm_disconnect(struct sk_buff *skb, struct genl_info *info)
|
||
|
mutex_lock(&adm_ctx.resource->adm_mutex);
|
||
|
rv = conn_try_disconnect(connection, parms.force_disconnect);
|
||
|
if (rv < SS_SUCCESS)
|
||
|
- retcode = rv; /* FIXME: Type mismatch. */
|
||
|
+ retcode = (enum drbd_ret_code)rv;
|
||
|
else
|
||
|
retcode = NO_ERROR;
|
||
|
mutex_unlock(&adm_ctx.resource->adm_mutex);
|
||
|
diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c
|
||
|
index efd995e3cb0b9..2c56f094b4974 100644
|
||
|
--- a/drivers/mmc/host/rtsx_pci_sdmmc.c
|
||
|
+++ b/drivers/mmc/host/rtsx_pci_sdmmc.c
|
||
|
@@ -49,10 +49,7 @@ struct realtek_pci_sdmmc {
|
||
|
bool double_clk;
|
||
|
bool eject;
|
||
|
bool initial_mode;
|
||
|
- int power_state;
|
||
|
-#define SDMMC_POWER_ON 1
|
||
|
-#define SDMMC_POWER_OFF 0
|
||
|
-
|
||
|
+ int prev_power_state;
|
||
|
int sg_count;
|
||
|
s32 cookie;
|
||
|
int cookie_sg_count;
|
||
|
@@ -914,14 +911,21 @@ static int sd_set_bus_width(struct realtek_pci_sdmmc *host,
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
-static int sd_power_on(struct realtek_pci_sdmmc *host)
|
||
|
+static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char power_mode)
|
||
|
{
|
||
|
struct rtsx_pcr *pcr = host->pcr;
|
||
|
int err;
|
||
|
|
||
|
- if (host->power_state == SDMMC_POWER_ON)
|
||
|
+ if (host->prev_power_state == MMC_POWER_ON)
|
||
|
return 0;
|
||
|
|
||
|
+ if (host->prev_power_state == MMC_POWER_UP) {
|
||
|
+ rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0);
|
||
|
+ goto finish;
|
||
|
+ }
|
||
|
+
|
||
|
+ msleep(100);
|
||
|
+
|
||
|
rtsx_pci_init_cmd(pcr);
|
||
|
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
|
||
|
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SHARE_MODE,
|
||
|
@@ -940,11 +944,17 @@ static int sd_power_on(struct realtek_pci_sdmmc *host)
|
||
|
if (err < 0)
|
||
|
return err;
|
||
|
|
||
|
+ mdelay(1);
|
||
|
+
|
||
|
err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
|
||
|
if (err < 0)
|
||
|
return err;
|
||
|
|
||
|
- host->power_state = SDMMC_POWER_ON;
|
||
|
+ /* send at least 74 clocks */
|
||
|
+ rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN);
|
||
|
+
|
||
|
+finish:
|
||
|
+ host->prev_power_state = power_mode;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
@@ -953,7 +963,7 @@ static int sd_power_off(struct realtek_pci_sdmmc *host)
|
||
|
struct rtsx_pcr *pcr = host->pcr;
|
||
|
int err;
|
||
|
|
||
|
- host->power_state = SDMMC_POWER_OFF;
|
||
|
+ host->prev_power_state = MMC_POWER_OFF;
|
||
|
|
||
|
rtsx_pci_init_cmd(pcr);
|
||
|
|
||
|
@@ -979,7 +989,7 @@ static int sd_set_power_mode(struct realtek_pci_sdmmc *host,
|
||
|
if (power_mode == MMC_POWER_OFF)
|
||
|
err = sd_power_off(host);
|
||
|
else
|
||
|
- err = sd_power_on(host);
|
||
|
+ err = sd_power_on(host, power_mode);
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
@@ -1417,7 +1427,7 @@ static int rtsx_pci_sdmmc_drv_probe(struct platform_device *pdev)
|
||
|
host->mmc = mmc;
|
||
|
host->pdev = pdev;
|
||
|
host->cookie = -1;
|
||
|
- host->power_state = SDMMC_POWER_OFF;
|
||
|
+ host->prev_power_state = MMC_POWER_OFF;
|
||
|
INIT_WORK(&host->work, sd_request);
|
||
|
platform_set_drvdata(pdev, host);
|
||
|
pcr->slots[RTSX_SD_CARD].p_dev = pdev;
|
||
|
diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c
|
||
|
index a2dbd7ae9db24..c6a176d8681c0 100644
|
||
|
--- a/drivers/net/can/grcan.c
|
||
|
+++ b/drivers/net/can/grcan.c
|
||
|
@@ -245,7 +245,7 @@ struct grcan_device_config {
|
||
|
.rxsize = GRCAN_DEFAULT_BUFFER_SIZE, \
|
||
|
}
|
||
|
|
||
|
-#define GRCAN_TXBUG_SAFE_GRLIB_VERSION 0x4100
|
||
|
+#define GRCAN_TXBUG_SAFE_GRLIB_VERSION 4100
|
||
|
#define GRLIB_VERSION_MASK 0xffff
|
||
|
|
||
|
/* GRCAN private data structure */
|
||
|
@@ -1141,7 +1141,7 @@ static int grcan_close(struct net_device *dev)
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
-static int grcan_transmit_catch_up(struct net_device *dev, int budget)
|
||
|
+static void grcan_transmit_catch_up(struct net_device *dev)
|
||
|
{
|
||
|
struct grcan_priv *priv = netdev_priv(dev);
|
||
|
unsigned long flags;
|
||
|
@@ -1149,7 +1149,7 @@ static int grcan_transmit_catch_up(struct net_device *dev, int budget)
|
||
|
|
||
|
spin_lock_irqsave(&priv->lock, flags);
|
||
|
|
||
|
- work_done = catch_up_echo_skb(dev, budget, true);
|
||
|
+ work_done = catch_up_echo_skb(dev, -1, true);
|
||
|
if (work_done) {
|
||
|
if (!priv->resetting && !priv->closing &&
|
||
|
!(priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
|
||
|
@@ -1163,8 +1163,6 @@ static int grcan_transmit_catch_up(struct net_device *dev, int budget)
|
||
|
}
|
||
|
|
||
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||
|
-
|
||
|
- return work_done;
|
||
|
}
|
||
|
|
||
|
static int grcan_receive(struct net_device *dev, int budget)
|
||
|
@@ -1246,19 +1244,13 @@ static int grcan_poll(struct napi_struct *napi, int budget)
|
||
|
struct net_device *dev = priv->dev;
|
||
|
struct grcan_registers __iomem *regs = priv->regs;
|
||
|
unsigned long flags;
|
||
|
- int tx_work_done, rx_work_done;
|
||
|
- int rx_budget = budget / 2;
|
||
|
- int tx_budget = budget - rx_budget;
|
||
|
+ int work_done;
|
||
|
|
||
|
- /* Half of the budget for receiveing messages */
|
||
|
- rx_work_done = grcan_receive(dev, rx_budget);
|
||
|
+ work_done = grcan_receive(dev, budget);
|
||
|
|
||
|
- /* Half of the budget for transmitting messages as that can trigger echo
|
||
|
- * frames being received
|
||
|
- */
|
||
|
- tx_work_done = grcan_transmit_catch_up(dev, tx_budget);
|
||
|
+ grcan_transmit_catch_up(dev);
|
||
|
|
||
|
- if (rx_work_done < rx_budget && tx_work_done < tx_budget) {
|
||
|
+ if (work_done < budget) {
|
||
|
napi_complete(napi);
|
||
|
|
||
|
/* Guarantee no interference with a running reset that otherwise
|
||
|
@@ -1275,7 +1267,7 @@ static int grcan_poll(struct napi_struct *napi, int budget)
|
||
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||
|
}
|
||
|
|
||
|
- return rx_work_done + tx_work_done;
|
||
|
+ return work_done;
|
||
|
}
|
||
|
|
||
|
/* Work tx bug by waiting while for the risky situation to clear. If that fails,
|
||
|
@@ -1665,6 +1657,7 @@ exit_free_candev:
|
||
|
static int grcan_probe(struct platform_device *ofdev)
|
||
|
{
|
||
|
struct device_node *np = ofdev->dev.of_node;
|
||
|
+ struct device_node *sysid_parent;
|
||
|
struct resource *res;
|
||
|
u32 sysid, ambafreq;
|
||
|
int irq, err;
|
||
|
@@ -1674,10 +1667,15 @@ static int grcan_probe(struct platform_device *ofdev)
|
||
|
/* Compare GRLIB version number with the first that does not
|
||
|
* have the tx bug (see start_xmit)
|
||
|
*/
|
||
|
- err = of_property_read_u32(np, "systemid", &sysid);
|
||
|
- if (!err && ((sysid & GRLIB_VERSION_MASK)
|
||
|
- >= GRCAN_TXBUG_SAFE_GRLIB_VERSION))
|
||
|
- txbug = false;
|
||
|
+ sysid_parent = of_find_node_by_path("/ambapp0");
|
||
|
+ if (sysid_parent) {
|
||
|
+ of_node_get(sysid_parent);
|
||
|
+ err = of_property_read_u32(sysid_parent, "systemid", &sysid);
|
||
|
+ if (!err && ((sysid & GRLIB_VERSION_MASK) >=
|
||
|
+ GRCAN_TXBUG_SAFE_GRLIB_VERSION))
|
||
|
+ txbug = false;
|
||
|
+ of_node_put(sysid_parent);
|
||
|
+ }
|
||
|
|
||
|
err = of_property_read_u32(np, "freq", &ambafreq);
|
||
|
if (err) {
|
||
|
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
|
||
|
index 819796fb9d46f..0f231e96ae25f 100644
|
||
|
--- a/include/net/bluetooth/hci_core.h
|
||
|
+++ b/include/net/bluetooth/hci_core.h
|
||
|
@@ -32,6 +32,9 @@
|
||
|
/* HCI priority */
|
||
|
#define HCI_PRIO_MAX 7
|
||
|
|
||
|
+/* HCI maximum id value */
|
||
|
+#define HCI_MAX_ID 10000
|
||
|
+
|
||
|
/* HCI Core structures */
|
||
|
struct inquiry_data {
|
||
|
bdaddr_t bdaddr;
|
||
|
diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
|
||
|
index af817e5060fbf..bb6cb42656b16 100644
|
||
|
--- a/mm/userfaultfd.c
|
||
|
+++ b/mm/userfaultfd.c
|
||
|
@@ -50,6 +50,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
|
||
|
/* don't free the page */
|
||
|
goto out;
|
||
|
}
|
||
|
+
|
||
|
+ flush_dcache_page(page);
|
||
|
} else {
|
||
|
page = *pagep;
|
||
|
*pagep = NULL;
|
||
|
@@ -267,6 +269,7 @@ retry:
|
||
|
err = -EFAULT;
|
||
|
goto out;
|
||
|
}
|
||
|
+ flush_dcache_page(page);
|
||
|
goto retry;
|
||
|
} else
|
||
|
BUG_ON(page);
|
||
|
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
|
||
|
index 40e6e5feb1e06..6f99da11d2073 100644
|
||
|
--- a/net/bluetooth/hci_core.c
|
||
|
+++ b/net/bluetooth/hci_core.c
|
||
|
@@ -3064,10 +3064,10 @@ int hci_register_dev(struct hci_dev *hdev)
|
||
|
*/
|
||
|
switch (hdev->dev_type) {
|
||
|
case HCI_PRIMARY:
|
||
|
- id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL);
|
||
|
+ id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL);
|
||
|
break;
|
||
|
case HCI_AMP:
|
||
|
- id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL);
|
||
|
+ id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL);
|
||
|
break;
|
||
|
default:
|
||
|
return -EINVAL;
|
||
|
@@ -3076,7 +3076,7 @@ int hci_register_dev(struct hci_dev *hdev)
|
||
|
if (id < 0)
|
||
|
return id;
|
||
|
|
||
|
- sprintf(hdev->name, "hci%d", id);
|
||
|
+ snprintf(hdev->name, sizeof(hdev->name), "hci%d", id);
|
||
|
hdev->id = id;
|
||
|
|
||
|
BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
|