diff --git a/include/xenomai/cobalt/uapi/kernel/synch.h b/include/xenomai/cobalt/uapi/kernel/synch.h index a21eb965e77739abdd9e4bc99ed39ba70c494e90..a7cb9fb099421552c12a229d2c17433f2150201f 100644 --- a/include/xenomai/cobalt/uapi/kernel/synch.h +++ b/include/xenomai/cobalt/uapi/kernel/synch.h @@ -48,7 +48,7 @@ static inline xnhandle_t xnsynch_fast_ceiling(xnhandle_t handle) static inline int xnsynch_fast_owner_check(atomic_t *fastlock, xnhandle_t ownerh) { - return (xnhandle_get_id(atomic_read(fastlock)) == ownerh) ? + return (xnhandle_get_id((xnhandle_t)atomic_read(fastlock)) == ownerh) ? 0 : -EPERM; } @@ -57,7 +57,7 @@ int xnsynch_fast_acquire(atomic_t *fastlock, xnhandle_t new_ownerh) { xnhandle_t h; - h = atomic_cmpxchg(fastlock, XN_NO_HANDLE, new_ownerh); + h = (xnhandle_t)atomic_cmpxchg(fastlock, XN_NO_HANDLE, new_ownerh); if (h != XN_NO_HANDLE) { if (xnhandle_get_id(h) == new_ownerh) return -EBUSY; diff --git a/include/xenomai/rtdm/analogy/rtdm_helpers.h b/include/xenomai/rtdm/analogy/rtdm_helpers.h index 1de219f967b68bffe9f16dcd707f13122d6d79c4..6799183c19f14679d346ce2e1e637ae35af239af 100644 --- a/include/xenomai/rtdm/analogy/rtdm_helpers.h +++ b/include/xenomai/rtdm/analogy/rtdm_helpers.h @@ -65,7 +65,7 @@ #else /* !CONFIG_XENO_DRIVERS_ANALOGY_DEBUG */ -#define __a4l_dbg(level, debug, fmt, args...) +#define __a4l_dbg(level, debug, fmt, args...) do {} while (0) #endif /* CONFIG_XENO_DRIVERS_ANALOGY_DEBUG */ diff --git a/init/Kconfig b/init/Kconfig index f38c9bb727687338600ac518fbda15c00f5cd770..462d56b3eea339be6483ec3e7c546cac2a582319 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -2081,8 +2081,8 @@ config XENO_VERSION_MINOR config XENO_REVISION_LEVEL int - default 3 + default 5 config XENO_VERSION_STRING string - default "3.1.3" + default "3.1.5" diff --git a/kernel/xenomai/rtdm/drvlib.c b/kernel/xenomai/rtdm/drvlib.c index 5778ad559ced43a2c118d7e46623b6bebc3d3d23..287769bdd833bc156ae7e14a8f000584ee2420f0 100644 --- a/kernel/xenomai/rtdm/drvlib.c +++ b/kernel/xenomai/rtdm/drvlib.c @@ -1706,6 +1706,7 @@ static int mmap_iomem_helper(struct vm_area_struct *vma, phys_addr_t pa) { pgprot_t prot = PAGE_SHARED; unsigned long len; + int ret; len = vma->vm_end - vma->vm_start; #ifndef CONFIG_MMU @@ -1719,8 +1720,17 @@ static int mmap_iomem_helper(struct vm_area_struct *vma, phys_addr_t pa) #endif vma->vm_page_prot = pgprot_noncached(prot); - return remap_pfn_range(vma, vma->vm_start, pa >> PAGE_SHIFT, - len, vma->vm_page_prot); + ret = remap_pfn_range(vma, vma->vm_start, pa >> PAGE_SHIFT, + len, vma->vm_page_prot); + if (ret) + return ret; + +#ifdef CONFIG_MMU + if (cobalt_machine.prefault) + cobalt_machine.prefault(vma); +#endif + + return 0; } static int mmap_buffer_helper(struct rtdm_fd *fd, struct vm_area_struct *vma)