Comment 3 for bug 1929035

Revision history for this message
Frank Heimes (fheimes) wrote :

Thx for the list of commits.

Looks like LP#1929060 "[22.04 FEAT] smc: Add User-defined EID (Enterprise ID) Support - kernel" is a prereq - if not worked based on that, I run into EID issues already starting with 42042dbbc2eb.

Applying the patches based on LP#1929060 I get further down, but still run into conflicts, this time with 8799e310fb3f ("net/smc: add v2 support to the work request layer").

$ git cherry-pick -s -e -x 8799e310fb3f
Auto-merging net/smc/smc_wr.h
Auto-merging net/smc/smc_wr.c
CONFLICT (content): Merge conflict in net/smc/smc_wr.c
Auto-merging net/smc/smc_ib.c
Auto-merging net/smc/smc_core.h
Auto-merging net/smc/smc_core.c
error: could not apply 8799e310fb3f... net/smc: add v2 support to the work request layer
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
fheimes@T570:~/ubuntu-jammy-master-next/jammy-lp1929035$ git status
On branch master-next
Your branch is ahead of 'origin/master-next' by 9 commits.
  (use "git push" to publish your local commits)

You are currently cherry-picking commit 8799e310fb3f.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Changes to be committed:
 modified: net/smc/smc_core.c
 modified: net/smc/smc_core.h
 modified: net/smc/smc_ib.c
 modified: net/smc/smc_wr.h

Unmerged paths:
  (use "git add <file>..." to mark resolution)
 both modified: net/smc/smc_wr.c
$

$ git diff
diff --cc net/smc/smc_wr.c
index 59ca1a2d5c65,22d7324969cd..000000000000
--- a/net/smc/smc_wr.c
+++ b/net/smc/smc_wr.c
@@@ -96,20 -101,47 +96,59 @@@ static inline void smc_wr_tx_process_cq
        }

        pnd_snd_idx = smc_wr_tx_find_pending_index(link, wc->wr_id);
- if (pnd_snd_idx == link->wr_tx_cnt)
- return;
- link->wr_tx_pends[pnd_snd_idx].wc_status = wc->status;
- if (link->wr_tx_pends[pnd_snd_idx].compl_requested)
- complete(&link->wr_tx_compl[pnd_snd_idx]);
- memcpy(&pnd_snd, &link->wr_tx_pends[pnd_snd_idx], sizeof(pnd_snd));
- /* clear the full struct smc_wr_tx_pend including .priv */
- memset(&link->wr_tx_pends[pnd_snd_idx], 0,
- sizeof(link->wr_tx_pends[pnd_snd_idx]));
- memset(&link->wr_tx_bufs[pnd_snd_idx], 0,
- sizeof(link->wr_tx_bufs[pnd_snd_idx]));
- if (!test_and_clear_bit(pnd_snd_idx, link->wr_tx_mask))
- return;
+ if (pnd_snd_idx == link->wr_tx_cnt) {
+ if (link->lgr->smc_version != SMC_V2 ||
+ link->wr_tx_v2_pend->wr_id != wc->wr_id)
+ return;
+ link->wr_tx_v2_pend->wc_status = wc->status;
+ memcpy(&pnd_snd, link->wr_tx_v2_pend, sizeof(pnd_snd));
+ /* clear the full struct smc_wr_tx_pend including .priv */
+ memset(link->wr_tx_v2_pend, 0,
+ sizeof(*link->wr_tx_v2_pend));
+ memset(link->lgr->wr_tx_buf_v2, 0,
+ sizeof(*link->lgr->wr_tx_buf_v2));
+ } else {
+ link->wr_tx_pends[pnd_snd_idx].wc_status = wc->status;
+ if (link->wr_tx_pends[pnd_snd_idx].compl_requested)
+ complete(&link->wr_tx_compl[pnd_snd_idx]);
+ memcpy(&pnd_snd, &link->wr_tx_pends[pnd_snd_idx],
+ sizeof(pnd_snd));
+ /* clear the full struct smc_wr_tx_pend including .priv */
+ memset(&link->wr_tx_pends[pnd_snd_idx], 0,
+ sizeof(link->wr_tx_pends[pnd_snd_idx]));
+ memset(&link->wr_tx_bufs[pnd_snd_idx], 0,
+ sizeof(link->wr_tx_bufs[pnd_snd_idx]));
+ if (!test_and_clear_bit(pnd_snd_idx, link->wr_tx_mask))
+ return;
+ }
+
        if (wc->status) {
++<<<<<<< HEAD
++||||||| parent of 8799e310fb3f... net/smc: add v2 support to the work request layer
++ for_each_set_bit(i, link->wr_tx_mask, link->wr_tx_cnt) {
++ /* clear full struct smc_wr_tx_pend including .priv */
++ memset(&link->wr_tx_pends[i], 0,
++ sizeof(link->wr_tx_pends[i]));
++ memset(&link->wr_tx_bufs[i], 0,
++ sizeof(link->wr_tx_bufs[i]));
++ clear_bit(i, link->wr_tx_mask);
++ }
++=======
+ for_each_set_bit(i, link->wr_tx_mask, link->wr_tx_cnt) {
+ /* clear full struct smc_wr_tx_pend including .priv */
+ memset(&link->wr_tx_pends[i], 0,
+ sizeof(link->wr_tx_pends[i]));
+ memset(&link->wr_tx_bufs[i], 0,
+ sizeof(link->wr_tx_bufs[i]));
+ clear_bit(i, link->wr_tx_mask);
+ }
+ if (link->lgr->smc_version == SMC_V2) {
+ memset(link->wr_tx_v2_pend, 0,
+ sizeof(*link->wr_tx_v2_pend));
+ memset(link->lgr->wr_tx_buf_v2, 0,
+ sizeof(*link->lgr->wr_tx_buf_v2));
+ }
++>>>>>>> 8799e310fb3f... net/smc: add v2 support to the work request layer
                /* terminate link */
                smcr_link_down_cond_sched(link);
        }

I can start fixing this and converting the cherry-pick into a backport,
but I hope thee is a cleaner solution, e.g. a missing pre-req or so?