Blocked Process Report - which process does lockmode apply to?
I just tried this out in my local copy of the Stack Overflow sample database.  I ran the following query in one session:

BEGIN TRANSACTION;

UPDATE dbo.Users
SET Reputation = 0
WHERE Id &lt; 1000;


Which was granted several X key locks in the users table (from EXEC sp_WhoIsActive @get_locks = 1):

&lt;Lock resource_type="KEY" index_name="PK_Users_Id" request_mode="X" request_status="GRANT" request_count="752" /&gt;


I then ran this query in another session, which got blocked:

SELECT *
FROM dbo.Users
WHERE Id = 1;


According to the same sp_WhoIsActive query, this is now blocked and waiting on and S key lock from the Users table:

&lt;Lock resource_type="KEY" index_name="PK_Users_Id" request_mode="S" request_status="WAIT" request_count="1" /&gt;


After 5 seconds, this produced a blocked process report event.  The "blocked process" node has a lockmode of "S" so this seems to prove that the lockmode is the lock being requested by the blocked process (not the lock being held by the blocking process).

Here's the full report XML for reference.  Unfortunately, it doesn't look like there's any way to tell the lock mode of the blocking process, other than consulting the lock compatibility matrix and inferring from that.

&lt;blocked-process-report monitorLoop="587"&gt;
 &lt;blocked-process&gt;
  &lt;process id="process25a0d94a108" taskpriority="0" logused="0" waitresource="KEY: 6:72057594039173120 (8194443284a0)" waittime="5279" ownerId="61463" transactionname="SELECT" lasttranstarted="2019-12-18T08:41:40.603" XDES="0x259bbe81ac0" lockMode="S" schedulerid="3" kpid="41876" status="suspended" spid="54" sbid="0" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-12-18T08:41:40.600" lastbatchcompleted="2019-12-18T08:41:40.600" lastattention="1900-01-01T00:00:00.600" clientapp="Microsoft SQL Server Management Studio - Query" hostname="redacted" hostpid="39076" loginname="redacted" isolationlevel="read committed (2)" xactid="61463" currentdb="6" currentdbname="StackOverflow2010" lockTimeout="4294967295" clientoption1="671090784" clientoption2="390200"&gt;
   &lt;executionStack&gt;
    &lt;frame line="1" stmtstart="24" stmtend="104" sqlhandle="0x02000000f1f6b108d092143d5a978eea9570bb0e96dc06ea0000000000000000000000000000000000000000" /&gt;
    &lt;frame line="1" stmtend="74" sqlhandle="0x02000000669ce70e2be50eb44c883b0c891f586643da33df0000000000000000000000000000000000000000" /&gt;
   &lt;/executionStack&gt;
   &lt;inputbuf&gt;
SELECT *
FROM dbo.Users
WHERE Id = 1;   &lt;/inputbuf&gt;
  &lt;/process&gt;
 &lt;/blocked-process&gt;
 &lt;blocking-process&gt;
  &lt;process status="sleeping" spid="53" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2019-12-18T08:39:20.630" lastbatchcompleted="2019-12-18T08:39:20.630" lastattention="1900-01-01T00:00:00.630" clientapp="Microsoft SQL Server Management Studio - Query" hostname="redacted" hostpid="39076" loginname="redacted" isolationlevel="read committed (2)" xactid="41842" currentdb="6" currentdbname="StackOverflow2010" lockTimeout="4294967295" clientoption1="671098976" clientoption2="390200"&gt;
   &lt;executionStack /&gt;
   &lt;inputbuf&gt;
SET STATISTICS XML OFF   &lt;/inputbuf&gt;
  &lt;/process&gt;
 &lt;/blocking-process&gt;
&lt;/blocked-process-report&gt;