Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[efi] Raise TPL when calling UNDI entry point
The SnpDxe driver raises the task priority level to TPL_CALLBACK when
calling the UNDI entry point.  This does not appear to be a documented
requirement, but we should probably match the behaviour of SnpDxe to
minimise surprises to third party code.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Sep 5, 2017
1 parent 306465b commit 3ae70be
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/drivers/net/efi/nii.c
Expand Up @@ -402,7 +402,9 @@ static EFIAPI VOID nii_block ( UINT64 unique_id, UINT32 acquire ) {
*/
static int nii_issue_cpb_db ( struct nii_nic *nii, unsigned int op, void *cpb,
size_t cpb_len, void *db, size_t db_len ) {
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
PXE_CDB cdb;
UINTN tpl;

/* Prepare command descriptor block */
memset ( &cdb, 0, sizeof ( cdb ) );
Expand All @@ -414,6 +416,9 @@ static int nii_issue_cpb_db ( struct nii_nic *nii, unsigned int op, void *cpb,
cdb.DBsize = db_len;
cdb.IFnum = nii->nii->IfNum;

/* Raise task priority level */
tpl = bs->RaiseTPL ( TPL_CALLBACK );

/* Issue command */
DBGC2 ( nii, "NII %s issuing %02x:%04x ifnum %d%s%s\n",
nii->dev.name, cdb.OpCode, cdb.OpFlags, cdb.IFnum,
Expand All @@ -424,6 +429,9 @@ static int nii_issue_cpb_db ( struct nii_nic *nii, unsigned int op, void *cpb,
DBGC2_HD ( nii, db, db_len );
nii->issue ( ( intptr_t ) &cdb );

/* Restore task priority level */
bs->RestoreTPL ( tpl );

/* Check completion status */
if ( cdb.StatCode != PXE_STATCODE_SUCCESS )
return -cdb.StatCode;
Expand Down

0 comments on commit 3ae70be

Please sign in to comment.