[9610] Set irq affinity and rps on big core when TP is high
authorJiyoung Jeong <ji_0.jeong@samsung.com>
Fri, 19 Oct 2018 13:36:44 +0000 (22:36 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:23:06 +0000 (20:23 +0300)
Change-Id: I538a63d2c48143ee71d08275cde523f2063dc9c2
Signed-off-by: Jiyoung Jeong <ji_0.jeong@samsung.com>
drivers/misc/mcu_ipc/mcu_ipc.c
drivers/misc/mcu_ipc/mcu_ipc.h
drivers/misc/modem_if/modem_io_device.c
drivers/misc/modem_if/modem_link_device_shmem.c [changed mode: 0755->0644]
include/linux/mcu_ipc.h

index cd9faceee1bad6abb58dd0ecf7a97fecdfe9ac98..77aa3bc1073bb5da6f0c36f514eeb4363ee02fa2 100644 (file)
@@ -195,10 +195,18 @@ static int mcu_ipc_set_affinity(enum mcu_ipc_region id, struct device *dev, int
                        mcu_dat[id].dmask);
 }
 #else
-static int mcu_ipc_set_affinity(enum mcu_ipc_region id, struct device *dev, int irq)
+int mcu_ipc_set_affinity(enum mcu_ipc_region id, int affinity)
 {
+       if (id >= MCU_MAX) {
+               pr_err("mcu_ipc_set_affinity err. id=%d\n", id);
+               return -1;
+       }
+
+       irq_set_affinity(mcu_dat[id].irq, cpumask_of(affinity));
+
        return 0;
 }
+EXPORT_SYMBOL(mcu_ipc_set_affinity);
 #endif
 
 #ifdef CONFIG_MCU_IPC_TEST
@@ -235,8 +243,6 @@ static int mcu_ipc_probe(struct platform_device *pdev)
        int mcu_ipc_irq;
        int err = 0;
        u32 id = 0;
-       struct cpumask cpumaks_mcu_ipc;
-       int ret;
 
        dev_err(&pdev->dev, "%s: mcu_ipc probe start.\n", __func__);
 
@@ -283,24 +289,10 @@ static int mcu_ipc_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "Can't request MCU_IPC IRQ\n");
                return err;
        }
-
-       /* Set CPU affinity for mcu_ipc */
-       cpumask_clear(&cpumaks_mcu_ipc);
-       cpumask_set_cpu(MCU_IPC_AFFINITY_CORE, &cpumaks_mcu_ipc);
-       ret = irq_set_affinity_hint(mcu_ipc_irq, &cpumaks_mcu_ipc);
-       if (ret)
-               dev_err(dev, "irq_set_affinity_hit error: %d\n", ret);
-       else
-               dev_info(dev, "irq_set_affinity_hint - CPU core: %d\n",
-                               MCU_IPC_AFFINITY_CORE);
+       mcu_dat[id].irq = mcu_ipc_irq;
 
        mcu_ipc_clear_all_interrupt(id);
 
-       /* set argos irq affinity */
-       err = mcu_ipc_set_affinity(id, dev, mcu_ipc_irq);
-       if (err)
-               dev_err(dev, "Can't set IRQ affinity with(%d)\n", err);
-
 #ifdef CONFIG_MCU_IPC_TEST
        test_without_dev(id);
 #endif
index aed6f837fdc37b0c8a50e3956276f87b7de87d24..222f1dfcc43849d8bd2ffe9a24e6a332fb917130 100644 (file)
@@ -48,6 +48,7 @@ struct mcu_ipc_drv_data {
        struct device *mcu_ipc_dev;
        struct mcu_ipc_ipc_handler hd[16];
        spinlock_t lock;
+       int irq;
 };
 
 static struct mcu_ipc_drv_data mcu_dat[MCU_MAX];
index 522be7613436046bc17d8786e6e82f6e2e1487c4..847efeb63996a3ef45171f164f609d4e76c90879 100644 (file)
@@ -357,7 +357,7 @@ static int rx_multi_pdp(struct sk_buff *skb)
                ret = netif_rx_ni(skb);
 
        if (ret != NET_RX_SUCCESS) {
-               mif_err("%s->%s: ERR! netif_rx fail (err %d)\n",
+               mif_err_limited("%s->%s: ERR! netif_rx fail (err %d)\n",
                        ld->name, iod->name, ret);
        }
 
old mode 100755 (executable)
new mode 100644 (file)
index f596d41..162f570
@@ -888,7 +888,7 @@ static void ipc_rx_task(unsigned long data)
 
                msg_handler(shmd, mst);
 
-               queue_delayed_work_on(3, system_long_wq, &shmd->msg_rx_dwork, 0);
+               queue_delayed_work(system_long_wq, &shmd->msg_rx_dwork, 0);
        }
 }
 
@@ -1157,6 +1157,8 @@ static void shmem_qos_work_max(struct work_struct *work)
                        INT_MAX);
        pm_qos_update_request(&pm_qos_req_int,
                        INT_MAX);
+
+       mcu_ipc_set_affinity(MCU_CP, 4);
 }
 
 static void shmem_qos_work_normal(struct work_struct *work)
index e68d1e927ecb790acc018f4d55d24d31dd34e5dc..9c69d0d167b0c1777e81634df0125256f66197a1 100644 (file)
@@ -52,5 +52,6 @@ void mbox_update_value(enum mcu_ipc_region id, u32 mbx_num,
 u32 mbox_extract_value(enum mcu_ipc_region id, u32 mbx_num, u32 mask, u32 pos);
 void mbox_sw_reset(enum mcu_ipc_region id);
 void mcu_ipc_clear_all_interrupt(enum mcu_ipc_region id);
+int mcu_ipc_set_affinity(enum mcu_ipc_region id, int affinity);
 
 #endif