summaryrefslogtreecommitdiff
path: root/drivers
AgeCommit message (Collapse)Author
2019-11-25Merge "emac: Perf setting"qctecmdr
2019-11-22drivers: shs: limit size copied to cached flows array to avoid globar var ↵Subash Abhinov Kasiviswanathan
corruption Add limit to the number of flows copied into the gold flow and slow start flow arrays before memcpy to shared memory. Going out of bounds on the array write corrupted the global variables for the shared memory pointers. Fixes the following: [ 846.803490] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000081 [ 846.909206] Process kworker/4:1 (pid: 80, stack limit = 0xffffff800b670000) [ 846.916377] CPU: 4 PID: 80 Comm: kworker/4:1 Tainted: G S O 4.19.81+ #1 [ 846.930899] Workqueue: rmnet_shs_wq rmnet_shs_wq_process_wq [rmnet_shs] [ 846.942612] pc : rmnet_shs_wq_mem_update_cached_sorted_ss_flows+0x9c/0xf0 [rmnet_shs] [ 846.950657] lr : rmnet_shs_wq_eval_cpus_caps_and_flows+0x74/0x218 [rmnet_shs] Change-Id: Ifeee71e48fc61c4dd750eb061573beb88fcd2b7d Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-11-22drivers: shs: fix deadlock caused between generic netlink and rtnl locksSubash Abhinov Kasiviswanathan
Fix for a deadlock seen when trying to register the shs generic netlink family inside of the callback context of rtnl_netlink. Instead of running in the notifier's context, the generic netlink registration is moved to initialization of the kernel module. Fixes the following lock contention scenario: [ 3302.102281] Call trace: [ 3302.102332] __switch_to+0x108/0x118 [ 3302.102357] __schedule+0x8fc/0xcd8 [ 3302.102368] schedule_preempt_disabled+0x7c/0xa8 [ 3302.102384] __mutex_lock+0x444/0x660 [ 3302.102392] __mutex_lock_slowpath+0x10/0x18 [ 3302.102399] mutex_lock+0x30/0x38 mutex_lock(&rtnl_mutex); [ 3302.102422] rtnl_lock+0x14/0x20 rtnl_lock [ 3302.102448] nl80211_pre_doit+0x28/0x1a0 [ 3302.102465] genl_rcv_msg+0x3a4/0x408 [ 3302.102473] netlink_rcv_skb+0xa8/0x120 [ 3302.102481] genl_rcv+0x30/0x48 down_read(&cb_lock); [ 3302.102487] netlink_unicast+0x1ec/0x290 [ 3302.102496] netlink_sendmsg+0x2ec/0x348 [ 3302.102609] Call trace: [ 3302.102615] __switch_to+0x108/0x118 [ 3302.102624] __schedule+0x8fc/0xcd8 [ 3302.102630] schedule+0x70/0x90 [ 3302.102638] rwsem_down_write_failed+0x2bc/0x3c8 [ 3302.102644] down_write+0x4c/0x50 [ 3302.102652] genl_register_family+0xb4/0x650 down_write(&cb_lock); [ 3302.102818] rmnet_shs_wq_genl_init+0x1c/0x38 [rmnet_shs] [ 3302.102847] rmnet_shs_wq_init+0x218/0x328 [rmnet_shs] [ 3302.102873] rmnet_shs_dev_notify_cb+0x378/0x3e0 [rmnet_shs] [ 3302.102892] raw_notifier_call_chain+0x3c/0x68 [ 3302.102909] register_netdevice+0x374/0x560 [ 3302.102934] rmnet_vnd_newlink+0x6c/0xe8 [ 3302.102942] rmnet_newlink+0x9c/0x198 [ 3302.102950] rtnl_newlink+0x648/0x7b0 [ 3302.102960] rtnetlink_rcv_msg+0x270/0x388 mutex_lock(&rtnl_mutex); Change-Id: Ib71de0cb4617477cab40a7f42154584765e30c2b Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-11-22drivers: shs: fix null check before freeing slow start listSubash Abhinov Kasiviswanathan
Checks the correct pointer for null before freeing the associated page for slow start shared memory. Fixes the following: [ 2982.239281] Unable to handle kernel paging request at virtual address ffffffbfadadadb4 [ 2982.239512] pc : __free_pages+0x24/0xc0 [ 2982.239515] lr : free_pages+0x38/0x48 [ 2982.240605] Call trace: [ 2982.240609] __free_pages+0x24/0xc0 [ 2982.240613] free_pages+0x38/0x48 [ 2982.240632] rmnet_shs_release_ss_flows+0x38/0x58 [rmnet_shs] Change-Id: I1c61b8c9c89905e94c24f6836eaf1d7f56566162 Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-11-22Merge "drivers: rmnet_perf: Check for over pulling"qctecmdr
2019-11-21data-kernel: Micrel WOL & phy intrSuraj Jaiswal
Due to recent propogation ACK interrupt was removed. This can affect WOL & PHY intr. Added support. Change-Id: I0accb5b754971e9d9e2d58bbe3de15e71be73fe9
2019-11-20drivers: shs: Change allocation context of shs allocations within spin_lockSubash Abhinov Kasiviswanathan
The allocation of the shs memory for cpu and flow level stats is done is done in the atomic context due to the invocation of the spin_lock_irqsave which disables preemption. Fixes the following- 230.251419: <6> sleeping function called from invalid context at mm/slab.h:422 230.277265: <6> in_atomic(): 1, irqs_disabled(): 128, pid: 62, name: kworker/6:0 230.277267: <2> INFO: lockdep is turned off. 230.284504: <2> irq event stamp: 90 230.284514: <2> hardirqs last enabled at (89): [<ffffff9ddee82594>] _raw_spin_unlock_irq+0x34/0x68 230.284517: <2> hardirqs last disabled at (90): [<ffffff9ddee7b5a8>] __schedule+0x138/0x1128 230.284524: <2> softirqs last enabled at (0): [<ffffff9ddd8b7f24>] copy_process+0x60c/0x1c28 230.284525: <2> softirqs last disabled at (0): [<0000000000000000>] (null) 230.284526: <4> Preemption disabled at: 230.284535: <2> [<ffffff9d7fa2b63c>] rmnet_shs_wq_process_wq+0x18c/0x350 [rmnet_shs] 230.288129: <6> ------------[ cut here ]------------ 230.292958: <6> at kernel/sched/core.c:6786! 230.305980: <6> Internal error: Oops - BUG: 0 [#1] PREEMPT SMP 230.358297: <6> Process kworker/6:0 (pid: 62, stack limit = 0xffffff80083c0000) 230.365454: <6> CPU: 6 PID: 62 Comm: kworker/6:0 Tainted: G S O 4.19.81+ #1 230.379937: <6> Workqueue: rmnet_shs_wq rmnet_shs_wq_process_wq [rmnet_shs] 230.386741: <2> pc : ___might_sleep+0x204/0x208 230.401745: <2> lr : ___might_sleep+0x204/0x208 230.598414: <2> Call trace: 230.598419: <2> ___might_sleep+0x204/0x208 230.598420: <2> __might_sleep+0x50/0x88 230.598423: <2> kmem_cache_alloc_trace+0x74/0x420 230.598430: <2> rmnet_shs_wq_cpu_caps_list_add+0x64/0x118 [rmnet_shs] 230.598433: <2> rmnet_shs_wq_update_stats+0x4dc/0xea0 [rmnet_shs] 230.598435: <2> rmnet_shs_wq_process_wq+0x194/0x350 [rmnet_shs] 230.598438: <2> process_one_work+0x328/0x6b0 230.598439: <2> worker_thread+0x330/0x4d0 230.598441: <2> kthread+0x128/0x138 230.598443: <2> ret_from_fork+0x10/0x1c Also fixes structure padding of shared mem structs, which was causing memcpy overrun. CRs-Fixed: 2570479 Change-Id: Ia58b0bee544afb030353ad1d3cd45d8c16a94f75 Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-11-20drivers: rmnet_perf: Check for over pullingSean Tranchetti
Much like the core driver, we must check for the return value of rmnet_frag_pull() to ensure the descriptor is still valid before continuing to process it. Call Trace: __memcpy+0x68/0x180 rmnet_perf_core_send_desc+0x48/0x58 [rmnet_perf] rmnet_perf_opt_flush_single_flow_node+0x244/0x458 [rmnet_perf] rmnet_perf_tcp_opt_ingress+0x228/0x270 [rmnet_perf] rmnet_perf_opt_ingress+0x34c/0x3a0 [rmnet_perf] rmnet_perf_core_desc_entry+0x114/0x168 [rmnet_perf] Change-Id: I6665d7410bcdb6880af1ca20822328f81a2cc0ec Signed-off-by: Sean Tranchetti <stranche@codeaurora.org>
2019-11-19emac: Perf settingSuraj Jaiswal
This change add support in emac driver for required performance setting on Talos. Change-Id: I8facf4b72c624484cc4a75d34cd2cfcd5f95f42c
2019-11-14Merge "rmnet_shs: add userspace flow movement and slow start support"qctecmdr
2019-11-12Merge "drivers: rmnet_shs: Disable RPS for ICMP packets"qctecmdr
2019-11-12drivers: rmnet_shs: Disable RPS for ICMP packetsSubash Abhinov Kasiviswanathan
Previously ICMP packet would be ignored by SHS causing RPS to send them randomly to a CPU in the configured RPS mask. This would lead ICMP packets to being sent to gold cluster in some cases. This results in worse power performance and higher latency as gold cluster might have to be woken up from power collapse in order to process a single packet. This change causes SHS to instead mark the ICMP packet as having a valid hash but actually leaves the hash as null. This is interpreted by RPS as an invalid CPU and causes the packet to be processed on the current CPU. From various experiments rmnet to NW stack latency start seems to take on avg about ~.8ms longer for inter-cluster ping processing so queing to gold cluster is not advised. Additionally queueing to a separate silver core in the silver cluster only increased avg latency by about ~.01ms. Change-Id: I631061890b1edb03d2e680b7f6d19f310d838ed1 Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-11-08Merge "data-kernel : EMAC: Fixing KW errors"qctecmdr
2019-11-07Merge "data-kernel: EMAC: Fix CRC error on bootup"qctecmdr
2019-11-06Merge "data-kernel: EMAC: ETH KW Errors solved"qctecmdr
2019-11-06data-kernel: EMAC: Fix CRC error on bootupSunil Paidimarri
Change-Id: Ifd30e9d98dd43e31a4c7e3fd804c5fe4426cfbb9 Acked-by: Rahul Kawadgave <rahulak@qti.qualcomm.com> Signed-off-by: Sunil Paidimarri <hisunil@codeaurora.org>
2019-11-06data-kernel: EMAC: ETH KW Errors solvedLakshit Tyagi
- Added check for NULL pointer access and initialized uninitalized variables. Change-Id: I84dfee37664407fd5a7d1303b0457ea241130cea Acked-by : Sneh Shah <snehshah@qti.qualcomm.com> Signed-off-by: Mohammed Javid <mjavid@codeaurora.org>
2019-11-06data-kernel: EMAc: add support for different phy chipsSuraj Jaiswal
This change add the phy check for the phy specific code. Change-Id: I28334df4cf16b6108afc7c44bf8e9623b22add98
2019-11-05data-kernel : EMAC: Fixing KW errorsSneh Shah
- Checking for null pointer dereference Change-Id: I163fa32cedbad9f9a6ab19e8371b2a043d7a8884 Signed-off-by: sneh shah <snehshah@codeaurora.org>
2019-11-04data-kernel: emac: Resolving EMAC crashLakshit Tyagi
- resolve EMAC crash caused due improper ip header handling Change-Id: Ia9d4249592a2a0dcfa492cd07dcf25fdf62f70e7 Signed-off-by: Lakshit Tyagi <ltyagi@codeaurora.org>
2019-11-04Merge "data-kernel: EMAC: suspend resume fix."qctecmdr
2019-11-04Merge "data-kernel: EMAC: Add hibernation mode support."qctecmdr
2019-10-30data-kernel: EMAC: Disable IPA for sa8155 autoLakshit Tyagi
IPA offload was getting enabled in Sa8155 for early ethernet. Disabling it while checking the correct config Change-Id: I4d165aea9dcbf6115218f21f99ff0968664aa2f7 Signed-off-by: Lakshit Tyagi <ltyagi@codeaurora.org>
2019-10-29data-kernel: EMAC: suspend resume fix.Suraj Jaiswal
This change help for suspend resume.With dev_pm_ops enabled legacy suspend/resume will never happend. Added support to provide the suspend/resume in dev_pm_ops. Change-Id: Ibc74407a90cc12605795222bc31586828caf3278
2019-10-29data-kernel: EMAC: Add hibernation mode support.Sunil Paidimarri
Update EMAC driver to support hibernation mode support. Bring down interface on hibernation mode and up on exi Change-Id: I20591969a56fb30c0a13be617f519bb43119f27d Acked-by: Rahul Kawadgave <rahulak@qti.qualcomm.com> Signed-off-by: Sunil Paidimarri <hisunil@codeaurora.org>
2019-10-28data-kernel: EMAC: Enable PPS configSunil Paidimarri
Enable PPS config. Change-Id: I1f89c965b0c6234211a059249c4ee1575fa4a3ce Acked-by: Rahul Kawadgave <rahulak@qti.qualcomm.com> Signed-off-by: Sunil Paidimarri <hisunil@codeaurora.org>
2019-10-25data-kernel: EMAC: PPS Timestamp methodSuraj Jaiswal
This change add support to changed the timestamp update method to Fine timestamp update method instead of Coarse Timestamp Update method since on driver we are using Fine method as default. Also , we are chaniging default PTP clock to 96Mhz to generate 19.2Mhz PPS frequency. Change-Id: Id5c4a22c0163b64762422df0cb3f1e0154515f60
2019-10-25data-kernel: EMAC: Enable PPS-LPASS connectivitySunil Paidimarri
Add new flag to the enable PPS-LPASS connectivity initialziation. Fix the ptp clock frequency initiazation too the. Change-Id: I8296306e9223a846a7c57d94231d05488121bcf4 CRs-Fixed: 2374673 Signed-off-by: Sunil Paidimarri <hisunil@codeaurora.org>
2019-10-25data-kernel: EMAC: Fix required PTP clock for accuracySunil Paidimarri
Fix the required PTP clock for accuracy.the Fix sub_second_increment and addend configuration. Change-Id: Ib2b68529d689c1d8c84aadf6a456df0abc77af8b Acked-by: Rahul Kawadgave <rahulak@qti.qualcomm.com> Signed-off-by: Sunil Paidimarri <hisunil@codeaurora.org>
2019-10-24emac: Enable sleep support for EMAC RXC clockChaitanya Pratapa
EMAC RXC clock is always sourced from PHY. If the GPIO used for RXC clock is multiplexed, there will be interrupt line routed towards GIC and it will be always enabled. As a result, device will never go to low power state. Make a change to disable GPIO pin used for RXC clock when defice goes to suspend and enable it back on resume. Change-Id: I83cab3f77ee05b12004a28f68529566de5fd1faa Signed-off-by: Chaitanya Pratapa <cpratapa@codeaurora.org>
2019-10-23rmnet_shs: add userspace flow movement and slow start supportSubash Abhinov Kasiviswanathan
Adds shared memory and generic netlink communication channels for userspace to access cpu and flow related stats so that shsusr can manage how flows are balanced and how TCP flows ramp up. Change-Id: Ie565141149fd5fa58cb1d2b982907681f5c7fd7d Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-10-21Merge "emac: Add route to Local table"qctecmdr
2019-10-09drivers: rmnet_shs: Remove rmnet ep accessSubash Abhinov Kasiviswanathan
Rmnet driver allocates rmnet_endpoint which rmnet_shs was using to keep track of endpoints that needed. However rmnet driver frees the memory before endpoint unregistration so this leaves a potential race condition where the wq can run after freeing. Change is to instead use net_dev refrerences we keep track of from net_dev_cb and no longer use rmnet_endpoints allocated by rmnet driver. Rmnet_shs was only using netdev references in rmnet_endpoint so no impact should be expected. This use-after-free would cause the following crash-signature. <6> Unable to handle kernel paging request at virtual address 00005000 <6> Mem abort info: <6> Exception class = DABT (current EL), IL = 32 bits <6> SET = 0, FnV = 0 <6> EA = 0, S1PTW = 0 <6> FSC = 5 <6> Data abort info: <6> ISV = 0, ISS = 0x00000005 <6> CM = 0, WnR = 0 <6> user pgtable: 4k pages, 39-bit VAs, pgd = 0000000070b0b425 <6> Internal error: Oops: 96000005 [#1] PREEMPT SMP <6> Workqueue: rmnet_shs_wq rmnet_shs_wq_process_wq [rmnet_shs] <6> task: 00000000deaad59d task.stack: 00000000053e0949 <2> pc : rmnet_shs_wq_update_ep_rps_msk+0x3c/0xd8 [rmnet_shs] <2> lr : rmnet_shs_wq_update_ep_rps_msk+0x28/0xd8 [rmnet_shs] <2> Call trace: <2> rmnet_shs_wq_update_ep_rps_msk+0x3c/0xd8 [rmnet_shs] <2> rmnet_shs_wq_update_stats+0x98/0x928 [rmnet_shs] <2> rmnet_shs_wq_process_wq+0x10c/0x248 [rmnet_shs] <2> process_one_work+0x1f0/0x458 <2> worker_thread+0x2ec/0x450 <2> kthread+0x11c/0x130 <2> ret_from_fork+0x10/0x1c CRs-Fixed: 2541604 Change-Id: I7026f2564c463f4ca989af97572e2a8fe5652087 Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-10-07drivers: rmnet: perf: Safely free recycle buffersConner Huff
Only free recycled buffers which have successfully been allocated. In the event allocation fails, we deallocate all previously allocated buffers, and we disable the feature entirely. Also, handle other resources more carefully during module bring up and teardown. Make sure resources are null if they fail to allocate. Additionally, modify the way that handling of allocation failures on init works. Now if one feature fails it won't bring down the operation of another feature. Now core_meta has access to a flag which indicates if the callbacks were completed successfully. If they were not, it is set to indicate that we must flush at the end of every chain since we can't rely on bm/ps. [ 1026.970767] Unable to handle kernel paging request at virtual address ffffffbfaaaaaaa0 [ 1026.979098] Mem abort info: [ 1026.981973] Exception class = DABT (current EL), IL = 32 bits [ 1026.988147] SET = 0, FnV = 0 [ 1026.991687] EA = 0, S1PTW = 0 [ 1026.995578] FSC = 6 [ 1026.997993] Data abort info: [ 1027.001962] ISV = 0, ISS = 0x00000006 [ 1027.006283] CM = 0, WnR = 0 [ 1027.011503] swapper pgtable: 4k pages, 39-bit VAs, pgd = ffffff812120f000 [ 1027.018667] [ffffffbfaaaaaaa0] *pgd=00000001bcbfc003, *pud=00000001bcbfc003, *pmd=0000000000000000 [ 1027.028686] Internal error: Oops: 96000006 [#1] PREEMPT SMP [ 1027.048533] mhi 0001:01:00.0: enabling device (0000 - 0002) [ 1027.084511] CPU: 5 PID: 17777 Comm: modprobe Tainted: G S W O 4.14.83+ #1 [ 1027.101460] task: ffffffec3f430080 task.stack: ffffff8052338000 [ 1027.107541] pc : kfree+0xe8/0x62c [ 1027.110954] lr : rmnet_perf_config_notify_cb+0xf8/0x484 [rmnet_perf] [ 1027.328866] Call trace: [ 1027.331381] kfree+0xe8/0x62c [ 1027.334425] rmnet_perf_config_notify_cb+0xf8/0x484 [rmnet_perf] [ 1027.340592] unregister_netdevice_notifier+0xc0/0x114 [ 1027.345780] rmnet_perf_exit+0x40/0x60c [rmnet_perf] [ 1027.350870] SyS_delete_module+0x1b8/0x224 [ 1027.355078] el0_svc_naked+0x34/0x38 [ 1027.358746] Code: f2ffffe9 aa090109 d2dff7ea f2ffffea (f9400129) Change-Id: Ieb12697fe23b6e7de39ae352a5481e6ae454e126 Signed-off-by: Conner Huff <chuff@codeaurora.org>
2019-10-04drivers: rmnet_shs: Change init to Register eventsSubash Abhinov Kasiviswanathan
Previously we used NETDEV_GOING_DOWN and NETDEV_UP events to cover shs init/de-init scenarios. That did not cover rmnet driver going down prematurely if rmnet vnds were cleaned up in a non-SSR scenario. This change will allow shs to keep track of registered vnds and to de-init when the last vnd has been unregistered to avoid this issue. <6> Unable to handle kernel NULL pointer dereference at virtual address 00000000 <6> Mem abort info: <6> Exception class = DABT (current EL), IL = 32 bits <6> SET = 0, FnV = 0 <6> EA = 0, S1PTW = 0 <6> FSC = 5 <6> Data abort info: <6> ISV = 0, ISS = 0x00000005 <6> CM = 0, WnR = 0 <6> user pgtable: 4k pages, 39-bit VAs, pgd = 00000000bafe2c18 <6> task: 00000000d6d739bd task.stack: 000000009afe105c <2> pc : rmnet_map_dl_ind_deregister+0x24/0x68 <2> lr : rmnet_shs_exit+0x30/0x68 [rmnet_shs] <2> Call trace: <2> rmnet_map_dl_ind_deregister+0x24/0x68 <2> rmnet_shs_dev_notify_cb+0x118/0x478 [rmnet_shs] <2> raw_notifier_call_chain+0x3c/0x68 <2> __dev_close_many+0x9c/0x158 <2> dev_close_many+0x7c/0x1e0 <2> rollback_registered_many+0xe4/0x460 <2> unregister_netdev+0x48/0xd0 <2> mhi_netdev_remove+0x124/0x220 <2> mhi_driver_remove+0x178/0x250 <2> device_release_driver_internal+0x158/0x200 <2> device_release_driver+0x14/0x20 <2> bus_remove_device+0xd8/0x100 CRs-Fixed: 2540066 Change-Id: I231ff0af3cb2feb955b891b628487ab4fc3377ba Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-10-03emac: Add route to Local tableSuraj Jaiswal
For Talos as part of early Ethernet we have to add support to add route in local table instead of main table .On Early Ethernet Network manager is not available on Talos to add route .Since on Talos main table is used for route so we need local table. Change-Id: I062d84b007418a2e27bbfb93f7af0c0fcc6fbc82
2019-10-02drivers: rmnet_shs: Core conflict fixSubash Abhinov Kasiviswanathan
Previously if shs had no fully idle cpus and two new flows came into SHS and a WQ was executed between them the round robin counter would be reset back to 0 and the two flows would not be ditributed to different cores. This change changes the way the wq calculates the most idle CPU so that new flows get distributed correctly based on least number of flows and lowest workload across WQ ticks. CRs-Fixed: 2503374 Change-Id: I3934b693f65579e1bd12e6f86e692f8feae2975c Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-10-02Merge "drivers: rmnet_shs: Fix shs_boost_wq memleak"qctecmdr
2019-10-02Merge "drivers: rmnet_shs: Remove netdev dereference"qctecmdr
2019-10-01Merge "drivers: rmnet_perf: Fix SSR cleanup of structs"qctecmdr
2019-10-01drivers: rmnet_shs: Fix shs_boost_wq memleakSubash Abhinov Kasiviswanathan
Previously when SSR occured a new shs_freq_wq would be allocated if shs initialized. This change destroys the workqueue on de-initialization so that allocating isn't resulting in a memleak. Change-Id: I6282890f9fd3c6c562903ff7b64b014ad2658f38 Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org
2019-10-01drivers: rmnet_shs: Remove netdev dereferenceSubash Abhinov Kasiviswanathan
Previously there was a dereference of RPS CPU when updating flows in rmnet_shs_wq. After changing logic to handle change of RPS mask net_rx is responsible for catching changes in a flow's CPU. This leaves this dereference unessesary. This change removes that dereference and relies on the trustworthy saved CPU of the flow. <6> Unable to handle kernel NULL pointer dereference at virtual address 00000000 <6> Mem abort info: <6> Exception class = DABT (current EL), IL = 32 bits <6> SET = 0, FnV = 0 <6> EA = 0, S1PTW = 0 <6> FSC = 6 <6> Data abort info: <6> ISV = 0, ISS = 0x00000006 <6> CM = 0, WnR = 0 <6> user pgtable: 4k pages, 39-bit VAs, pgd = 0000000019917200 <6> [0000000000000000] *pgd=0000000000000000, *pud=0000000000000000 <6> Internal error: Oops: 96000006 [#1] PREEMPT SMP <2> pc : rmnet_shs_wq_update_cpu_rx_tbl+0x44/0x224 [rmnet_shs] <2> lr : rmnet_shs_wq_update_cpu_rx_tbl+0x3c/0x224 [rmnet_shs] <2> Call trace: <2> rmnet_shs_wq_update_cpu_rx_tbl+0x44/0x224 [rmnet_shs] <2> rmnet_shs_wq_process_wq+0x184/0x83c [rmnet_shs] <2> process_one_work+0x1e0/0x410 <2> worker_thread+0x27c/0x38c <2> kthread+0x12c/0x13c <2> ret_from_fork+0x10/0x18 <6> Code: f9401274 94000ed6 f9400a88 f9419508 (f9400108) Change-Id: Id50a7da2cccccacf4694a1bb43d62ec28e2b4462 Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org
2019-10-01drivers: rmnet_shs: Change rmnet_port initSubash Abhinov Kasiviswanathan
Rmnet_port was being collected previously from the first saved instance of a phy_dev into a temporary variable. This could cause issue if the phy_dev was incorrectly made. This change causes the phy_dev to be collected at the time of initialization when the 1st rmnet is brought up. <6> Unable to handle kernel paging request at virtual address 6b6b6b6b6b6b6b <6> Mem abort info: <6> Exception class = DABT (current EL), IL = 32 bits <6> SET = 0, FnV = 0 <6> EA = 0, S1PTW = 0 <6> FSC = 4 <6> Data abort info: <6> ISV = 0, ISS = 0x00000004 <6> CM = 0, WnR = 0 <6> [006b6b6b6b6b6b6b] address between user and kernel address ranges <6> Internal error: Oops: 96000004 [#1] PREEMPT SMP <2> Call trace: <2> rmnet_map_dl_ind_deregister+0x3c/0x84 <2> rmnet_shs_exit+0x40/0x74 [rmnet_shs] <2> rmnet_shs_dev_notify_cb+0x100/0x48c [rmnet_shs] <2> notifier_call_chain+0x8c/0xd0 <2> raw_notifier_call_chain+0x38/0x48 <2> call_netdevice_notifiers_info+0x40/0x70 <2> __dev_close_many+0x64/0x108 <2> dev_close_many+0x88/0x138 <2> rollback_registered_many+0x138/0x434 <2> rollback_registered+0x5c/0xa0 <2> unregister_netdevice_queue+0x94/0xac <2> unregister_netdev+0x24/0x34 Change-Id: Idc2b3059cbcb9c1ccb1091c630d27bdcdc0e894d Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org
2019-10-01Merge "drivers: rmnet_shs: Fix ep down race condition"qctecmdr
2019-09-27drivers: rmnet_shs: Fix ep down race conditionSubash Abhinov Kasiviswanathan
Previously when a vnd would go down we would clear it's struct in netdev_notifier_cb context. However if rmnet_shs_wq is running it can get into a state where the struct has been cleared but has passed error checking. Resulting in a use after clear error of our own internal ep structs. This error can cause the following stack error. <6> Unable to handle kernel NULL pointer dereference at virtual address 00000328 <6> Mem abort info: <6> Exception class = DABT (current EL), IL = 32 bits <6> SET = 0, FnV = 0 <6> EA = 0, S1PTW = 0 <6> FSC = 5 <6> Data abort info: <6> ISV = 0, ISS = 0x00000005 <6> CM = 0, WnR = 0 <6> user pgtable: 4k pages, 39-bit VAs, pgd = 0000000071c11f76 <6> [0000000000000328] *pgd=0000000000000000, *pud=0000000000000000 <6> Internal error: Oops: 96000005 [#1] PREEMPT SMP <2> pc : rmnet_shs_wq_update_ep_rps_msk+0x24/0xb0 [rmnet_shs] <2> lr : rmnet_shs_wq_update_ep_rps_msk+0x1c/0xb0 [rmnet_shs] <2> Call trace: <2> rmnet_shs_wq_update_ep_rps_msk+0x24/0xb0 [rmnet_shs] <2> rmnet_shs_wq_refresh_ep_masks+0x3c/0x54 [rmnet_shs] <2> rmnet_shs_wq_process_wq+0x140/0x83c [rmnet_shs] <2> process_one_work+0x1e0/0x410 <2> worker_thread+0x27c/0x38c <2> kthread+0x12c/0x13c <2> ret_from_fork+0x10/0x18 <6> Code: b40003b3 94000900 f9400a68 f9400508 (f9419508) Change-Id: Ic1529b0e2645df08432c1ba22821db68d1c58951 Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org
2019-09-26drivers: rmnet_shs: Move PS ind dereg upSubash Abhinov Kasiviswanathan
QMI rmnet indications are deregistered after wq is cleanup during shs_exit. This leaves a window where after the shs wq is cleaned-up that it can be potentially used. This change moves the qmi_rmnet deregistration before the wq cleanup removing that window. CRs-Fixed: 2427399 Change-Id: I979cdc65ea69ee4ec6097fb6d67508ab4253891a Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-09-26drivers: rmnet_perf: Fix SSR cleanup of structsSubash Abhinov Kasiviswanathan
When SSR occurs rmnet_mhi0 is torn down and the check perf makes on the netdev to make sure that rmnet_mhi0 is registered with rmnet is not valid if rmnet has processed the unregister event before rmnet_perf.This change adds priority to rmnet_perf so that it processes events before the main driver. Previously rmnet_perf was not cleaning up as a result of that and had a memleak when it would come back up. This fixes it so that perf cleans up all of the remaining flows in rmnet_perf hashatable. Change-Id: Ifd10a2ca586c33bf0d4fe479d54a41f8f46b720b Acked-by: Raul Martinez <mraul@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org
2019-09-19data-kernel: EMAC: DMA stats fixSuraj Jaiswal
This change help to provide the proper DMA stats for RX/TX for Non-IPA Target. Change-Id: Ibd4b956c041c52cee472a56bca80535d46b50521
2019-09-14rmnet: shs: Fix uninitialized use in initSubash Abhinov Kasiviswanathan
If the physical device is not in up state before a virtual device is brought up, there is an use of uninitialized variable leading to the following- 145.153137: <6> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000018 145.153156: <6> Mem abort info: 145.153165: <6> ESR = 0x96000005 145.153176: <6> Exception class = DABT (current EL), IL = 32 bits 145.153186: <6> SET = 0, FnV = 0 145.153195: <6> EA = 0, S1PTW = 0 145.153203: <6> Data abort info: 145.153212: <6> ISV = 0, ISS = 0x00000005 145.153221: <6> CM = 0, WnR = 0 145.153237: <6> user pgtable: 4k pages, 39-bit VAs, pgdp = 000000007f1dc94f 145.153246: <6> [0000000000000018] pgd=0000000000000000, pud=0000000000000000 145.153269: <6> Internal error: Oops: 96000005 [#1] PREEMPT SMP 145.153524: <2> pc : rmnet_get_endpoint+0x4/0x48 145.153607: <2> lr : rmnet_shs_wq_gather_rmnet_ep+0x68/0x1f0 [rmnet_shs] 145.155341: <2> Call trace: 145.155359: <2> rmnet_get_endpoint+0x4/0x48 145.155395: <2> rmnet_shs_wq_init+0x168/0x328 [rmnet_shs] 145.155428: <2> rmnet_shs_dev_notify_cb+0x234/0x388 [rmnet_shs] 145.155450: <2> raw_notifier_call_chain+0x3c/0x68 145.155472: <2> __dev_notify_flags+0xa0/0x190 145.155486: <2> dev_change_flags+0x48/0x60 145.155506: <2> devinet_ioctl+0x3a8/0x658 145.155523: <2> inet_ioctl+0xb4/0x280 145.155541: <2> sock_do_ioctl+0x44/0x230 145.155554: <2> sock_ioctl+0x25c/0x3d8 145.155575: <2> do_vfs_ioctl+0x5dc/0x928 145.155589: <2> __arm64_sys_ioctl+0x70/0x98 145.155608: <2> el0_svc_common+0xa0/0x158 145.155623: <2> el0_svc_handler+0x6c/0x88 145.155640: <2> el0_svc+0x8/0xc CRs-Fixed: 2527900 Change-Id: Iece4e21c5acc5504fb3939f489d221a1e949b31a Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
2019-09-04data-kernel: remove warningsLakshit Tyagi
- removing all fatal warnings Change-Id: Iadb647ea68b939c98af269761da24e10b36797ea Signed-off-by: Lakshit Tyagi <ltyagi@codeaurora.org>