diff options
author | Namhoon Kim <namhoonk@cs.unc.edu> | 2017-03-14 16:02:39 -0400 |
---|---|---|
committer | Namhoon Kim <namhoonk@cs.unc.edu> | 2017-03-14 16:02:39 -0400 |
commit | db10d5d59c677daa184e07ca4fb43ecab1ddc942 (patch) | |
tree | 0b3eef4812275bf673da6a4d34560d6f09b622c6 | |
parent | 53548d64cba3af8e063f41f0eedbeecf8fa1b67b (diff) |
added net ISR support
-rw-r--r-- | arch/arm/mm/dma-mapping.c | 19 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 5 | ||||
-rw-r--r-- | litmus/bank_proc.c | 4 | ||||
-rw-r--r-- | litmus/cache_proc.c | 2 | ||||
-rw-r--r-- | litmus/litmus.c | 2 | ||||
-rw-r--r-- | litmus/page_dev.c | 2 | ||||
-rw-r--r-- | litmus/sched_mc2.c | 4 |
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 */ | ||
351 | static 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 */ | ||
357 | static 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 | ||
66 | static void set_multicast_list(struct net_device *ndev); | 68 | static 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) | |||
620 | static inline void post_schedule(struct task_struct *next, int cpu) | 620 | static 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); |