Rev 1954 | Rev 2009 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1954 | Rev 2007 | ||
---|---|---|---|
Line 548... | Line 548... | ||
548 | * @param acc_size Expected size of the source area. |
548 | * @param acc_size Expected size of the source area. |
549 | * @param dst_as Pointer to destination address space. |
549 | * @param dst_as Pointer to destination address space. |
550 | * @param dst_base Target base address. |
550 | * @param dst_base Target base address. |
551 | * @param dst_flags_mask Destination address space area flags mask. |
551 | * @param dst_flags_mask Destination address space area flags mask. |
552 | * |
552 | * |
553 | * @return Zero on success or ENOENT if there is no such task or |
553 | * @return Zero on success or ENOENT if there is no such task or if there is no |
554 | * if there is no such address space area, |
554 | * such address space area, EPERM if there was a problem in accepting the area |
555 | * EPERM if there was a problem in accepting the area or |
555 | * or ENOMEM if there was a problem in allocating destination address space |
556 | * ENOMEM if there was a problem in allocating destination |
556 | * area. ENOTSUP is returned if the address space area backend does not support |
557 | * address space area. ENOTSUP is returned if an attempt |
557 | * sharing. It can be also returned if the architecture uses virtually indexed |
558 | * to share non-anonymous address space area is detected. |
558 | * caches and the source and destination areas start at pages with different |
- | 559 | * page colors. |
|
559 | */ |
560 | */ |
560 | int as_area_share(as_t *src_as, uintptr_t src_base, size_t acc_size, |
561 | int as_area_share(as_t *src_as, uintptr_t src_base, size_t acc_size, |
561 | as_t *dst_as, uintptr_t dst_base, int dst_flags_mask) |
562 | as_t *dst_as, uintptr_t dst_base, int dst_flags_mask) |
562 | { |
563 | { |
563 | ipl_t ipl; |
564 | ipl_t ipl; |
Line 578... | Line 579... | ||
578 | mutex_unlock(&src_as->lock); |
579 | mutex_unlock(&src_as->lock); |
579 | interrupts_restore(ipl); |
580 | interrupts_restore(ipl); |
580 | return ENOENT; |
581 | return ENOENT; |
581 | } |
582 | } |
582 | 583 | ||
- | 584 | #if 0 /* disable the check for now */ |
|
- | 585 | #ifdef CONFIG_VIRT_IDX_CACHE |
|
- | 586 | if (PAGE_COLOR(src_area->base) != PAGE_COLOR(dst_base)) { |
|
- | 587 | /* |
|
- | 588 | * Refuse to create illegal address alias. |
|
- | 589 | */ |
|
- | 590 | mutex_unlock(&src_area->lock); |
|
- | 591 | mutex_unlock(&src_as->lock); |
|
- | 592 | interrupts_restore(ipl); |
|
- | 593 | return ENOTSUP; |
|
- | 594 | } |
|
- | 595 | #endif /* CONFIG_VIRT_IDX_CACHE */ |
|
- | 596 | #endif |
|
- | 597 | ||
583 | if (!src_area->backend || !src_area->backend->share) { |
598 | if (!src_area->backend || !src_area->backend->share) { |
584 | /* |
599 | /* |
585 | * There is no backend or the backend does not |
600 | * There is no backend or the backend does not |
586 | * know how to share the area. |
601 | * know how to share the area. |
587 | */ |
602 | */ |