Commit Graph

1211 Commits

Author SHA1 Message Date
Florian Pose fa96b8fcb0 Merge branch 'lock-fixes' into 'master'
Various locking fixes and improvements

See merge request etherlab.org/ethercat!58
2022-09-05 09:41:16 +00:00
Florian Pose 1437f8d409 Merge branch 'lock-abstraction-fixups' into 'master'
fix direct uses of up()/down()

See merge request etherlab.org/ethercat!55
2022-09-05 09:17:32 +00:00
Esben Haabendal 81758004fd Improve synchronization of master->domains list
Introduce a new lock for synchronization of the master->domains list, and use
that instead of the big master_sem lock, improving real-time performance of
fx. ecrt_domain_process() when EoE thread is being shut down (or other
use-cases where master_sem is held for extended periods).

The following locking order is used:

* master->master_sem
* master->domains_lock
* master->io_sem
* domain->datagram_pairs_lock

Meaning that it is allowed to take domains_lock while holding master_sem, and
it is allowed to hold domains_lock while locking io_sem and
datagram_pairs_lock.

[RV: For now, the lockdep_assert_held() annotations are commented out,
since they don't compile with CONFIG_PROVE_LOCKING and (the default)
--disable-rtmutex.]
2022-09-01 15:38:01 +02:00
Esben Haabendal 19b8ddea18 Add lock protection of domain->datagram_pairs
While domain->datagram_pairs was previously partly protected by the
master->master_sem lock (it was not done consistently though), the fix
to protection of master->datagram_queue made it even worse.

This change adds protection of domain->datagram_pairs using a new lock
dedicated to this.  The domain->datagram_pairs_lock is acquired in the actual
functions accessing the domain->datagram_pairs, and this currently means that
it is acquired both in situations where master->master_sem is held and in
situations where master->io_sem is held.
2022-09-01 15:37:58 +02:00
Esben Haabendal 2372382259 Acquire master->io_sem lock where needed
With this, we should have in place so that master->io_sem is always held when
accessing master->datagram_queue.

Note, the use of master->master_sem in ec_ioctl_send() and
ec_ioctl_receive() were wrong (introduced in commit cef602586c). The
only thing needing to be synchronized there is the access to
master->datagram_queue, which is protected by master->io_sem.

This corresponds roughly to the fixes for stable-1.5 that are seen in
https://gitlab.com/etherlab.org/ethercat/-/merge_requests/36 .
2022-09-01 15:37:54 +02:00
Esben Haabendal e243c6b7db Clarify purpose of master->io_sem
In order to ensure proper use of locking, the purpose of each mutex/semaphore
must be clear and documented.

This is my best guess.  The master->io_sem has a simple purpose, synchronizing
access to the master->datagram_queue list structure.
2022-09-01 15:37:50 +02:00
Rasmus Villemoes 624872fcdb fix direct uses of up()/down()
When converting to the ec_lock_t abstraction, these were missed,
making building with --enable-rtmutex broken.

Fixes: 9955855f7e (Applied 0016-If-enable-rtmutex-use-rtmutexes-instead-of-semaphore.patch)
2022-08-31 15:21:23 +02:00
Nicola Fontana 4050913147 Fix for linux 5.18.0
In recent kernels, netif_rx_ni() is just a wrapper around netif_rx():

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9f9919f73c94ae00af4e6ad45179282122f24988
2022-07-18 11:21:29 +02:00
Florian Pose fa890a8b61 Applied 0021-Await-SDO-dictionary-to-be-fetched.patch 2022-06-23 12:43:34 +02:00
Florian Pose 8896d3b879 Applied 0020-eoe-ip.patch 2022-06-23 12:39:52 +02:00
Florian Pose 5f84d54890 Applied 0000-version-magic.patch and bumped to 1.6 2022-06-23 12:20:47 +02:00
Florian Pose 44c6c3d1da Merge branch 'master' of ../git 2022-06-23 11:55:13 +02:00
Florian Pose f943348d98 Applied 0019-Support-for-multiple-mailbox-protocols.patch 2022-06-23 11:54:10 +02:00
Florian Pose 429ba9356e Applied 0018-Use-call-back-functions.patch 2022-06-23 11:27:28 +02:00
Florian Pose cef602586c Applied 0017-Master-locks-to-avoid-corrupted-datagram-queue.patch 2022-06-23 11:26:20 +02:00
Florian Pose 9955855f7e Applied 0016-If-enable-rtmutex-use-rtmutexes-instead-of-semaphore.patch 2022-06-23 11:21:51 +02:00
Florian Pose 667e93284d Applied 0015-Clear-configuration-on-deactivate-even-if-not-activa.patch 2022-06-23 11:00:45 +02:00
Florian Pose a3fa7cecaf Applied 0014-Fix-NOHZ-local_softirq_pending-08-warning.patch 2022-06-23 10:59:45 +02:00
Florian Pose d09daadfbb Applied 0013-Do-not-reuse-the-index-of-a-pending-datagram.patch 2022-06-23 10:58:57 +02:00
Florian Pose 8db3e5abf4 Applied 0012-Added-newline-to-syslog-message-MAC-address-derived.patch 2022-06-23 10:56:33 +02:00
Florian Pose 57342c99ca Applied 0011-Reduced-printing-to-avoid-syslog-spam.patch 2022-06-23 10:55:57 +02:00
Florian Pose d1dc6795f3 Applied 0010-Make-busy-logging-a-little-less-irritating.patch 2022-06-23 10:55:03 +02:00
Florian Pose 90f3f7e841 Applied 0009-Avoid-changing-running-slaves-DC-offset.patch 2022-06-23 10:53:56 +02:00
Florian Pose 225af9f787 Applied 0008-read-reference-slave-clock-64bit-time.patch 2022-06-23 10:45:16 +02:00
Florian Pose 234695fe44 Applied 0006-avoid-ssize_t.patch 2022-06-23 10:26:43 +02:00
Florian Pose 405c88f6d6 Applied 0005-disable-eoe.patch 2022-06-23 10:25:36 +02:00
Florian Pose efcd95ed9c Applied 0004-fix-eoe-clear.patch 2022-06-23 10:13:49 +02:00
Florian Pose d0d4535df0 Applied 0003-print-sync-signed.patch 2022-06-23 10:13:00 +02:00
Florian Pose 17eddce68d Applied 0002-Distributed-Clock-fixes-from-Jun-Yuan.patch 2022-06-23 10:12:12 +02:00
Florian Pose b4f8c0e750 Added 0001-Distributed-Clock-fixes-and-helpers.patch 2022-06-23 10:07:34 +02:00
Florian Pose 89677140fa Minor: Fixed indent. 2022-05-17 14:09:00 +02:00
Bjarne von Horn 1f55565fbb Fix setting mac_address
eoe->dev->dev_addr is read_only in 5.17.0
using eth_hw_addr_set instead
2022-05-17 14:06:42 +02:00
Shi Qiyao 29919ef8b7 Add support for FoE with password.
Patch originally from https://github.com/ribalda/ethercat which adds the
support for FoE command tool with password.
2022-04-19 11:54:16 +02:00
Florian Pose 4fe2599530 Strictly using KERN_CONT for continued printk() calls to avoid newlines. 2021-08-31 13:29:16 +02:00
Florian Pose ffbb1eed9f Define set_normal_priority() inside #ifdef EC_EOE. Fixes #12. 2021-08-31 13:09:09 +02:00
Florian Pose 2d96b626e8 Avoided warning about unreasonable use of strncpy(). 2021-08-25 12:01:03 +02:00
Florian Pose a5a30f7dbf Avoided warning about unreasonable use of strncpy(). 2021-08-25 11:58:22 +02:00
Florian Pose 3781326aba Define set_normal_priority() inside #ifdef EC_EOE. Fixes #12. 2021-08-25 09:45:31 +02:00
Florian Pose 0e8ee10933 Avoided unused variables. 2021-08-24 18:12:27 +02:00
Florian Pose db12765645 Fixed duplicate ioctl labels. 2021-08-24 18:12:00 +02:00
Florian Pose 7facae8e3b First feature flag: AssignToPdi. 2021-08-24 17:48:46 +02:00
Florian Pose 980c8d3025 Find flag method with const char * parameter; added method to header. 2021-08-24 17:48:09 +02:00
Florian Pose 2ee65b6387 Added feature flags to API. 2021-08-24 17:47:15 +02:00
Florian Pose f2e838a664 Also changed license of gloabl headers to LGPL.
Moved definition of EC_SDO_INJECTION_TIMEOUT to master.c.
2021-08-24 17:40:06 +02:00
Florian Pose ab0d009bcc Added export for ecrt_slave_config_reg_pdo_entry_pos(). Fixes #11. 2021-08-24 17:39:54 +02:00
Florian Pose 8e1dc9f593 Corrected license text of master/ioctl.h, because it is included in the userspace library. 2021-08-24 17:39:43 +02:00
Nicola Fontana 4e6ac827c1 Revive 'make distcheck' 2021-08-24 17:37:01 +02:00
Florian Pose ff9db35874 Retry responding slaves datagram; more robust to timeouts. 2021-08-24 17:33:58 +02:00
Nicola Fontana 6e8c371c42 Do not include AC_CONFIG_FILES in BUILT_SOURCES
BUILT_SOURCES is used to trigger early generation of files in the `make`
process to workaround dependency problems:

    https://www.gnu.org/software/automake/manual/html_node/Sources.html

AC_CONFIG_FILES are generated by `configure`, so they are already
present in the file system even before `make` is called. Furthermore,
AC_CONFIG_FILES already properly handle dist and clean targets, so no
need to add them to EXTRA_DIST or DISTCLEANFILES:

    https://www.gnu.org/software/automake/manual/html_node/Requirements.html
2021-08-24 17:32:32 +02:00
Florian Pose fbc414c879 Use Git for version detection and tools. 2021-08-24 17:16:55 +02:00