aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNamhoon Kim <namhoonk@cs.unc.edu>2017-03-14 16:02:39 -0400
committerNamhoon Kim <namhoonk@cs.unc.edu>2017-03-14 16:02:39 -0400
commitdb10d5d59c677daa184e07ca4fb43ecab1ddc942 (patch)
tree0b3eef4812275bf673da6a4d34560d6f09b622c6
parent53548d64cba3af8e063f41f0eedbeecf8fa1b67b (diff)
added net ISR support
-rw-r--r--arch/arm/mm/dma-mapping.c19
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c5
-rw-r--r--litmus/bank_proc.c4
-rw-r--r--litmus/cache_proc.c2
-rw-r--r--litmus/litmus.c2
-rw-r--r--litmus/page_dev.c2
-rw-r--r--litmus/sched_mc2.c4
7 files changed, 32 insertions, 6 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 7e7583ddd607..d0c70d97346b 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -341,6 +341,24 @@ void __init init_dma_coherent_pool_size(unsigned long size)
341 atomic_pool_size = size; 341 atomic_pool_size = size;
342} 342}
343 343
344#define BANK_MASK 0x38000000
345#define BANK_SHIFT 27
346
347#define CACHE_MASK 0x0000f000
348#define CACHE_SHIFT 12
349
350/* Decoding page color, 0~15 */
351static inline unsigned int page_color(struct page *page)
352{
353 return ((page_to_phys(page)& CACHE_MASK) >> CACHE_SHIFT);
354}
355
356/* Decoding page bank number, 0~7 */
357static inline unsigned int page_bank(struct page *page)
358{
359 return ((page_to_phys(page)& BANK_MASK) >> BANK_SHIFT);
360}
361
344/* 362/*
345 * Initialise the coherent pool for atomic allocations. 363 * Initialise the coherent pool for atomic allocations.
346 */ 364 */
@@ -375,6 +393,7 @@ static int __init atomic_pool_init(void)
375 (void *)PAGE_SHIFT); 393 (void *)PAGE_SHIFT);
376 pr_info("DMA: preallocated %zd KiB pool for atomic coherent allocations\n", 394 pr_info("DMA: preallocated %zd KiB pool for atomic coherent allocations\n",
377 atomic_pool_size / 1024); 395 atomic_pool_size / 1024);
396 pr_info("DMA: coherent pool located in 0x%p phys %08x color %d bank %d\n", ptr, page_to_phys(page), page_color(page), page_bank(page));
378 return 0; 397 return 0;
379 } 398 }
380 399
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 66d47e448e4d..ad3759e8a749 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -61,6 +61,8 @@
61 61
62#include <asm/cacheflush.h> 62#include <asm/cacheflush.h>
63 63
64#include <litmus/cache_proc.h>
65
64#include "fec.h" 66#include "fec.h"
65 67
66static void set_multicast_list(struct net_device *ndev); 68static void set_multicast_list(struct net_device *ndev);
@@ -1587,6 +1589,8 @@ fec_enet_interrupt(int irq, void *dev_id)
1587 writel(int_events, fep->hwp + FEC_IEVENT); 1589 writel(int_events, fep->hwp + FEC_IEVENT);
1588 fec_enet_collect_events(fep, int_events); 1590 fec_enet_collect_events(fep, int_events);
1589 1591
1592 enter_irq_mode();
1593
1590 if ((fep->work_tx || fep->work_rx) && fep->link) { 1594 if ((fep->work_tx || fep->work_rx) && fep->link) {
1591 ret = IRQ_HANDLED; 1595 ret = IRQ_HANDLED;
1592 1596
@@ -1605,6 +1609,7 @@ fec_enet_interrupt(int irq, void *dev_id)
1605 if (fep->ptp_clock) 1609 if (fep->ptp_clock)
1606 fec_ptp_check_pps_event(fep); 1610 fec_ptp_check_pps_event(fep);
1607 1611
1612 exit_irq_mode();
1608 return ret; 1613 return ret;
1609} 1614}
1610 1615
diff --git a/litmus/bank_proc.c b/litmus/bank_proc.c
index 2284f4fd5816..b84f2603293e 100644
--- a/litmus/bank_proc.c
+++ b/litmus/bank_proc.c
@@ -247,9 +247,11 @@ static int do_add_pages(void)
247 counter[color]++; 247 counter[color]++;
248 // printk("page(%d) = color %x, bank %x, [color] =%d \n", color, page_color(page), page_bank(page), atomic_read(&color_groups[color].nr_pages)); 248 // printk("page(%d) = color %x, bank %x, [color] =%d \n", color, page_color(page), page_bank(page), atomic_read(&color_groups[color].nr_pages));
249 //show_nr_pages(); 249 //show_nr_pages();
250 if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR && color>=32) { 250 //if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR && color>=32) {
251 //if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR) { 251 //if (atomic_read(&color_groups[color].nr_pages) < PAGES_PER_COLOR) {
252 //if ( PAGES_PER_COLOR && color>=16*2) { 252 //if ( PAGES_PER_COLOR && color>=16*2) {
253 //if (color>=32) {
254 if (color>=0) {
253 add_page_to_color_list(page); 255 add_page_to_color_list(page);
254 // printk("add page(%d) = color %x, bank %x\n", color, page_color(page), page_bank(page)); 256 // printk("add page(%d) = color %x, bank %x\n", color, page_color(page), page_bank(page));
255 } else{ 257 } else{
diff --git a/litmus/cache_proc.c b/litmus/cache_proc.c
index 15c1b0145be2..9c50a0147f0d 100644
--- a/litmus/cache_proc.c
+++ b/litmus/cache_proc.c
@@ -531,7 +531,6 @@ void inline enter_irq_mode(void)
531 return; 531 return;
532 prev_lockdown_i_reg[cpu] = readl_relaxed(ld_i_reg(cpu)); 532 prev_lockdown_i_reg[cpu] = readl_relaxed(ld_i_reg(cpu));
533 prev_lockdown_d_reg[cpu] = readl_relaxed(ld_d_reg(cpu)); 533 prev_lockdown_d_reg[cpu] = readl_relaxed(ld_d_reg(cpu));
534
535 writel_relaxed(way_partitions[8], ld_i_reg(cpu)); 534 writel_relaxed(way_partitions[8], ld_i_reg(cpu));
536 writel_relaxed(way_partitions[8], ld_d_reg(cpu)); 535 writel_relaxed(way_partitions[8], ld_d_reg(cpu));
537} 536}
@@ -542,6 +541,7 @@ void inline exit_irq_mode(void)
542 541
543 if (os_isolation == 0) 542 if (os_isolation == 0)
544 return; 543 return;
544
545 writel_relaxed(prev_lockdown_i_reg[cpu], ld_i_reg(cpu)); 545 writel_relaxed(prev_lockdown_i_reg[cpu], ld_i_reg(cpu));
546 writel_relaxed(prev_lockdown_d_reg[cpu], ld_d_reg(cpu)); 546 writel_relaxed(prev_lockdown_d_reg[cpu], ld_d_reg(cpu));
547} 547}
diff --git a/litmus/litmus.c b/litmus/litmus.c
index 7fbabcee64d5..84446acb0869 100644
--- a/litmus/litmus.c
+++ b/litmus/litmus.c
@@ -549,7 +549,7 @@ asmlinkage long sys_test_call(unsigned int param)
549 continue; 549 continue;
550 } 550 }
551 551
552 TRACE_TASK(current, "addr: %08x, pfn: %05lx, _mapcount: %d, _count: %d flags: %s%s%s mapping: %p\n", vma_itr->vm_start + PAGE_SIZE*i, page_to_pfn(old_page), page_mapcount(old_page), page_count(old_page), vma_itr->vm_flags&VM_READ?"r":"-", vma_itr->vm_flags&VM_WRITE?"w":"-", vma_itr->vm_flags&VM_EXEC?"x":"-", &(old_page->mapping)); 552 TRACE_TASK(current, "addr: %08x, phy: %08x, pfn: %05lx, _mapcount: %d, _count: %d flags: %s%s%s mapping: %p\n", vma_itr->vm_start + PAGE_SIZE*i, page_to_phys(old_page), page_to_pfn(old_page), page_mapcount(old_page), page_count(old_page), vma_itr->vm_flags&VM_READ?"r":"-", vma_itr->vm_flags&VM_WRITE?"w":"-", vma_itr->vm_flags&VM_EXEC?"x":"-", &(old_page->mapping));
553 put_page(old_page); 553 put_page(old_page);
554 } 554 }
555 vma_itr = vma_itr->vm_next; 555 vma_itr = vma_itr->vm_next;
diff --git a/litmus/page_dev.c b/litmus/page_dev.c
index 16a6b756353b..1e91b989dae2 100644
--- a/litmus/page_dev.c
+++ b/litmus/page_dev.c
@@ -269,8 +269,6 @@ static int __init init_litmus_page_dev(void)
269 269
270 mutex_init(&dev_mutex); 270 mutex_init(&dev_mutex);
271 271
272 printk(KERN_INFO "Registering LITMUS^RT proc page_dev sysctl.\n");
273
274 litmus_sysctls = register_sysctl_table(litmus_dir_table); 272 litmus_sysctls = register_sysctl_table(litmus_dir_table);
275 if (!litmus_sysctls) { 273 if (!litmus_sysctls) {
276 printk(KERN_WARNING "Could not register LITMUS^RT page_dev sysctl.\n"); 274 printk(KERN_WARNING "Could not register LITMUS^RT page_dev sysctl.\n");
diff --git a/litmus/sched_mc2.c b/litmus/sched_mc2.c
index 6c02a56959b5..b0300abf18e4 100644
--- a/litmus/sched_mc2.c
+++ b/litmus/sched_mc2.c
@@ -620,8 +620,10 @@ static inline void pre_schedule(struct task_struct *prev, int cpu)
620static inline void post_schedule(struct task_struct *next, int cpu) 620static inline void post_schedule(struct task_struct *next, int cpu)
621{ 621{
622 enum crit_level lev; 622 enum crit_level lev;
623 if ((!next) || !is_realtime(next)) 623 if ((!next) || !is_realtime(next)) {
624 do_partition(NUM_CRIT_LEVELS, -1);
624 return; 625 return;
626 }
625 627
626 lev = get_task_crit_level(next); 628 lev = get_task_crit_level(next);
627 do_partition(lev, cpu); 629 do_partition(lev, cpu);