Commit Graph

1223 Commits

Author SHA1 Message Date
Graeme Foot 2c1597231d Applied base-0028-ec_master_exec_slave_fsms-external-datagram-fix
Slaves can fail to correctly read their SII information, leading to
zero or corrupted SII information.  This leads to slaves that remain
in PREOP or SAFEOP.

This is caused by the cached external (slave) datagrams being cycled
through too quickly due to being marked as consumed when they are not.
Datagrams can then be lost or incorrectly shared between multiple slaves
as the ring returns a datagram that is still in use by a read SII call.

This may also occur if multiple services are contending for a slaves
mailbox.

I have not added checks into ec_master_get_external_datagram() to
check that a returned datagram is not currently in use.
2023-08-29 14:38:54 +02:00
Gavin Lambert d3e853514f Applied base-0027-Prevent abandoning the mailbox state machines early
Fixup for f943348d - caused deadlock.

Fixes the exit condition of the mailbox FSMs -- previously they returned
whether they were sending a datagram or not, and the parent assumed that
this meant they were done if they didn't want to send a datagram. Since
earlier patches can cause idle cycles now, this could cause unexpected
early exit, so they now return whether they're complete or not
explicitly.
2023-08-29 14:38:54 +02:00
Knud Baastrup ff2e062a08 Applied base-0026-EoE-processing-is-now-only-allowed-in-state-PREOP
EoE is disabled in INIT, BOOT, and invalid states to prevent errors.
2023-08-29 14:38:54 +02:00
Knud Baastrup 1267e45bf8 Applied base-0025-Ignore-mailbox-settings-if-corrupted-sii-file
Ignore SII specified mailbox settings if they appear to be from
a blank EEPROM.
2023-08-29 14:38:54 +02:00
Knud Baastrup ba27819221 Applied base-0024-Sdo-directory-now-only-fetched-on-request
Sdo directory now only fetched on request.

The time-consuming SDO directory fetch during slave scan can now be
skipped by setting the EC_SKIP_SDO_DICT in globals.h. The directory
will now instead be fethed the first time an ethercat sdos command
is executed with the ethercat tool.
2023-08-29 14:38:54 +02:00
Knud Baastrup 1124a8b359 Applied base-0023-Skip-output-statistics-during-re-scan
Skip output statistics during re-scan.

No reason to write output statistics in syslog when issuing a slave
scanning where UNMATCHED datagrams are expected behavior.
2023-08-28 13:41:59 +02:00
Knud Baastrup 74798d5259 Applied base-0022-Clear-slave-mailboxes-after-a-re-scan
When rescanning a slave (and thus discarding any prior pending FSMs),
explicitly clear the slave mailbox, to avoid getting confused by a
stale response.
2023-08-28 13:39:15 +02:00
Florian Pose b1945b7bdc Always define EoE handler count. 2023-07-20 13:11:10 +02:00
Nicola Fontana 262afa2f9c Fix class_create on kernel 6.4
Commit 1aaba11da9aa7d7d6b52a74d45b31cac118295a1 in kernel code removed
`module *` argument from `class_create`.
2023-07-05 07:31:52 +02:00
Andreas Stewering-Bone e35f35b25c Merge branch 'fix_vm_set_flag' into 'stable-1.5'
Fix setting flag in vm_area_struct for Kernel 6.3

See merge request etherlab.org/ethercat!67

(cherry picked from commit 04f202a39c)

27db882d Fix setting flag in vm_area_struct for Kernel 6.3
2023-06-01 06:11:19 +00:00
Florian Pose 24a361c8f5 Allow zero-sized SDO responses 2023-05-02 10:53:33 +02:00
Florian Pose 20d0c93270 Changed email and postal address. 2023-01-09 10:01:24 +01:00
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