From: Pavel Pisa Date: Sat, 25 Jul 2015 21:14:55 +0000 (+0200) Subject: Merge branch 'master' into can-usb1 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/commitdiff_plain/3c47a7cd435662f7e2daa006596722271f5dd090?hp=b29ebe97fb5acced24e8ce9bb30e5d4dcad58815 Merge branch 'master' into can-usb1 --- diff --git a/lincan/include/can_sysdep.h b/lincan/include/can_sysdep.h index 60c76de..b2c8d83 100644 --- a/lincan/include/can_sysdep.h +++ b/lincan/include/can_sysdep.h @@ -136,13 +136,13 @@ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,7)) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) -#define MINOR_NR \ - (MINOR(file->f_dentry->d_inode->i_rdev)) +#define INODE2MINOR_NR(inode) \ + (MINOR(inode->i_rdev)) #else /* Linux kernel < 2.5.7 or >= 2.6.0 */ -#define MINOR_NR \ - (minor(file->f_dentry->d_inode->i_rdev)) +#define INODE2MINOR_NR(inode) \ + (minor(inode->i_rdev)) #endif /* Linux kernel < 2.5.7 or >= 2.6.0 */ diff --git a/lincan/include/main.h b/lincan/include/main.h index f7a302c..aad913d 100644 --- a/lincan/include/main.h +++ b/lincan/include/main.h @@ -406,6 +406,7 @@ struct mem_addr { /* Structure for the RTR queue */ struct rtr_id { unsigned long id; + int ready_fl; struct canmsg_t *rtr_message; wait_queue_head_t rtr_wq; struct rtr_id *next; diff --git a/lincan/src/i82527.c b/lincan/src/i82527.c index 635dfc7..6445f5d 100644 --- a/lincan/src/i82527.c +++ b/lincan/src/i82527.c @@ -750,6 +750,7 @@ void i82527_irq_rtr_handler(struct canchip_t *chip, struct msgobj_t *obj, can_spin_unlock(&hardware_p->rtr_lock); + rtr_search->ready_fl = 1; if (waitqueue_active(&rtr_search->rtr_wq)) wake_up(&rtr_search->rtr_wq); } diff --git a/lincan/src/ioctl_remote.c b/lincan/src/ioctl_remote.c index 5ba89f8..8c3dd77 100644 --- a/lincan/src/ioctl_remote.c +++ b/lincan/src/ioctl_remote.c @@ -46,6 +46,7 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg, struct rtr_id *rtr_current, *new_rtr_entry; struct msgobj_t *obj; struct canchip_t *chip; + int err; /*struct canque_ends_t *qends;*/ DEBUGMSG("Remote transmission request\n"); @@ -84,6 +85,7 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg, } init_waitqueue_head(&new_rtr_entry->rtr_wq); new_rtr_entry->id = rtr_id; + new_rtr_entry->ready_fl = 0; new_rtr_entry->rtr_message = rtr_msg; new_rtr_entry->next=NULL; @@ -92,7 +94,8 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg, /* Send remote transmission request */ chip->chipspecops->remote_request(chip,obj); obj->ret = 0; - interruptible_sleep_on(&new_rtr_entry->rtr_wq); + + err = wait_event_interruptible(new_rtr_entry->rtr_wq, new_rtr_entry->ready_fl); can_spin_lock_irqsave(&hardware_p->rtr_lock, flags); if (hardware_p->rtr_queue == new_rtr_entry) { @@ -113,6 +116,9 @@ int can_ioctl_remote_read(struct canuser_t *canuser, struct canmsg_t *rtr_msg, can_spin_unlock_irqrestore(&hardware_p->rtr_lock, flags); kfree(new_rtr_entry); + if (err) + return -EINTR; + return obj->ret; } diff --git a/lincan/src/open.c b/lincan/src/open.c index 942225a..266aed4 100644 --- a/lincan/src/open.c +++ b/lincan/src/open.c @@ -50,15 +50,21 @@ int can_open(struct inode *inode, struct file *file) struct canque_edge_t *edge; can_spin_irqflags_t iflags; char openflag; // Martin Petera: Object already opened + int minor_nr = INODE2MINOR_NR(inode); - if ( ((obj=objects_p[MINOR_NR]) == NULL) || - ((chip=objects_p[MINOR_NR]->hostchip) == NULL) ) { - CANMSG("There is no hardware support for the device file with minor nr.: %d\n",MINOR_NR); + if ((minor_nr < 0) || (minor_nr >= MAX_TOT_MSGOBJS)) { + CANMSG("can_open: bad minor %d\n", minor_nr); + return -ENODEV; + } + + if ( ((obj=objects_p[minor_nr]) == NULL) || + ((chip=objects_p[minor_nr]->hostchip) == NULL) ) { + CANMSG("There is no hardware support for the device file with minor nr.: %d\n", minor_nr); return -ENODEV; } atomic_inc(&obj->obj_used); - DEBUGMSG("Device %d opened %d times.\n", MINOR_NR, atomic_read(&obj->obj_used)); + DEBUGMSG("Device %d opened %d times.\n", minor_nr, atomic_read(&obj->obj_used)); openflag = can_msgobj_test_fl(obj,OPENED); // Martin Petera: store previous status can_msgobj_set_fl(obj,OPENED); diff --git a/omk/rules/linux/Makefile.rules b/omk/rules/linux/Makefile.rules index 1458619..6c3095e 100644 --- a/omk/rules/linux/Makefile.rules +++ b/omk/rules/linux/Makefile.rules @@ -4,7 +4,7 @@ # (C) Copyright 2006, 2007, 2008, 2009, 2010, 2011 by Michal Sojka - Czech Technical University, FEE, DCE # # Homepage: http://rtime.felk.cvut.cz/omk/ -# Version: 0.2-97-g532aeb1 +# Version: 0.2-111-g8f9236e # # The OMK build system is distributed under the GNU General Public # License. See file COPYING for details. @@ -348,7 +348,7 @@ omkize: fi $(Q)for i in `find -L . -name Makefile.omk` ; do \ d=`dirname $${i}`; \ - if ! test -f "$${d}/Makefile.rules" && ( test -f "$${d}/Makefile" && ! cmp --silent Makefile "$${d}/Makefile" ); then \ + if ! test -f "$${d}/Makefile.rules" && ( test -f "$${d}/Makefile" && ! cmp -s Makefile "$${d}/Makefile" ); then \ rm -f "$${d}/Makefile"; \ cp -v Makefile "$${d}/Makefile"; \ fi \ @@ -402,14 +402,15 @@ endif ifneq ($(LN_HEADERS),y) define cp_cmd -if ! cmp --quiet $(1) $(2); then \ +if ! cmp -s $(1) $(2); then \ echo " CP $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; \ - install -D $(CPHEADER_FLAGS) $(1) $(2) || exit 1; \ + install -d $(CPHEADER_FLAGS) `dirname $(2)` && \ + install $(CPHEADER_FLAGS) $(1) $(2) || exit 1; \ fi endef else define cp_cmd -if ! cmp --quiet $(1) $(2); then \ +if ! cmp -s $(1) $(2); then \ echo " LN $(1:$(OUTPUT_DIR)/%=%) -> $(2:$(OUTPUT_DIR)/%=%)"; \ if [ -f $(1) ]; then d=$(2); mkdir -p $${d%/*} && ln -sf $(LNHEADER_FLAGS) $(1) $(2) || exit 1; else exit 1; fi; \ fi @@ -568,9 +569,9 @@ endif ifdef USER_RULE_TEMPLATES -USER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.S .o/.o +USER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.cpp .o/.S .o/.o -USER_SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.S .lo/.lo +USER_SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.cpp .lo/.S .lo/.lo #%.lo: %.c # $(CC) -o $@ $(LCFLAGS) -c $< @@ -579,7 +580,7 @@ c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USER cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USER + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(CXXFLAGS) -DOMK_FOR_USER S_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(ASFLAGS) -DOMK_FOR_USER @@ -689,7 +690,7 @@ USER_SOURCES += $$($(1)_SOURCES) $(2)/$(1)$(3): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " LINK $$@" - $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc)),$$(CXX),$$(CC)) \ + $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES))$$(filter %.cxx,$$($(1)_SOURCES))$$(filter %.cpp,$$($(1)_SOURCES)),$$(CXX),$$(CC)) \ $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) $$($(1)_LDFLAGS) -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@ @echo "$(2)/$(1)$(3): \\" >$(USER_OBJS_DIR)/$(1).exe.d @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$| \1 \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134' >>$(USER_OBJS_DIR)/$(1).exe.d @@ -994,6 +995,7 @@ define MODULE_kern_template $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o)) $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o)) $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o)) +$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cpp=%.o)) $(1)_OBJS := $$(sort $$($(1)_OBJS)) KERN_OBJS += $$($(1)_OBJS) @@ -1046,6 +1048,7 @@ define LIBRARY_kern_template $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o)) $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o)) $(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o)) +$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cpp=%.o)) $(1)_OBJS := $$(sort $$($(1)_OBJS)) KERN_OBJS += $$($(1)_OBJS) @@ -1177,6 +1180,8 @@ $(foreach src,$(filter %.cc,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template $(foreach src,$(filter %.cxx,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),))) +$(foreach src,$(filter %.cpp,$(USER_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cpp=%.o),))) + $(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),))) $(foreach src,$(filter %.c,$(USER_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(src),$(src:%.c=%.o),))) @@ -1196,6 +1201,8 @@ $(foreach src,$(filter %.cc,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_templat $(foreach src,$(filter %.cxx,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.lo),$(SOLIB_PICFLAGS)))) +$(foreach src,$(filter %.cpp,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cpp=%.lo),$(SOLIB_PICFLAGS)))) + $(foreach src,$(filter %.S,$(SOLIB_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.lo),$(SOLIB_PICFLAGS)))) $(foreach src,$(filter %.c,$(SOLIB_GEN_SOURCES)),$(eval $(call COMPILE_c_o_template,$(src),$(src:%.c=%.lo),$(SOLIB_PICFLAGS)))) @@ -1226,6 +1233,8 @@ $(foreach src,$(filter %.cc,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_tem $(foreach src,$(filter %.cxx,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),))) +$(foreach src,$(filter %.cpp,$(KERN_SOURCES)),$(eval $(call COMPILE_cc_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.cpp=%.o),))) + $(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),))) endif @@ -1274,7 +1283,7 @@ $(addprefix $(1)/,$(notdir $(addsuffix .stamp,$(2)))) : $(CONFIG_FILES) >> "$(2).tmp" @echo "#endif /*$(4)*/" >> "$(2).tmp" @touch "$$@" - @if cmp --quiet "$(2).tmp" "$(2)" ; then rm "$(2).tmp"; \ + @if cmp -s "$(2).tmp" "$(2)" ; then rm "$(2).tmp"; \ else mv "$(2).tmp" "$(2)" ; \ echo "Updated configuration $(2)" ; fi diff --git a/omk/rules/linux/kernelcfg2mk b/omk/rules/linux/kernelcfg2mk index 9636241..ecbd286 100755 --- a/omk/rules/linux/kernelcfg2mk +++ b/omk/rules/linux/kernelcfg2mk @@ -121,7 +121,7 @@ EOF #===================================================================== # test for 2.6.x and 3.x kernels - 2.6 | 3.* ) + 2.6 | 3.* | 4.* ) rm -f ${KERN_BUILD_DIR}/kernel.mk rm -rf ${KERN_TEST_DIR} @@ -155,9 +155,9 @@ flags: @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags ifdef KBUILD_CFLAGS - @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)\$(if \$(filter -I,\$(KBUILD_CPPFLAGS)),, \$(LINUXINCLUDE))" | sed 's#-I\(include\|arch\)#-I"\$(LINUXDIR)/\1"#g'>>\$(obj)/flags - @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags - @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags + @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)\$(if \$(filter -I,\$(KBUILD_CPPFLAGS)),, \$(LINUXINCLUDE))" | sed 's#-I\(\./\|include\|arch\)#-I"\$(LINUXDIR)/\1"#g'>>\$(obj)/flags + @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(\./\|include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags + @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(\./\|include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags else @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>\$(obj)/flags @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags @@ -166,7 +166,7 @@ endif ifdef KBUILD_CFLAGS_MODULE @echo LINUX_CFLAGS_MODULE="\$(KBUILD_CFLAGS_MODULE)" >>\$(obj)/flags @echo LINUX_AFLAGS_MODULE="\$(KBUILD_AFLAGS_MODULE)" >>\$(obj)/flags - @echo LINUX_LDFLAGS_MODULE="\$(KBUILD_LDFLAGS_MODULE)" >>\$(obj)/flags + @echo LINUX_LDFLAGS_MODULE="\$(KBUILD_LDFLAGS_MODULE)" | sed 's# \./#"\$(OMK_LINUX_SRC)"/#g' >>\$(obj)/flags else @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags @echo LINUX_AFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags