linux-cxl.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* CXL mailbox background command
@ 2021-04-29  1:24 Dai WeiBin (David Dai)
  0 siblings, 0 replies; 6+ messages in thread
From: Dai WeiBin (David Dai) @ 2021-04-29  1:24 UTC (permalink / raw)
  To: ben.widawsky; +Cc: linux-cxl

Hi Ben,

When we think of cxl mailbox background command, we met a difficult issue, how to handle switching between a background command end and another background command start?
The flow is as below:
1. Host/caller sends a command to cxl device.
2. CXL device identifies the command as a background command, then cxl device returns background command started.
3. CXL device start to handle background command
4. Host/caller can send other commands to cxl device when background command is ongoing on device side
5. At a special point host/caller is sending a command to device when the background command just is finished, the new command will be handled as a background command by device
6. That means the old background command ends, background Operation is set to 0, immediately the new background command is started, background Operation is set to 1 again at once.
7. So Host driver doesn’t have a chance to check the old background command has been finished, it still see “background Operation == 1”
8. Mailbox Status Register and Background Command Status Register are both read-only, that results there is not a handshake between host and device

Do you have any suggestion about this?

Thanks,
David




^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: CXL mailbox background command
  2021-04-29 20:32 ` Dan Williams
@ 2021-04-30  1:42   ` Dai WeiBin (David Dai)
  0 siblings, 0 replies; 6+ messages in thread
From: Dai WeiBin (David Dai) @ 2021-04-30  1:42 UTC (permalink / raw)
  To: 'Dan Williams'
  Cc: 'Ben Widawsky', linux-cxl, 'Jin LiZhi (Lynn Jin)'

Thanks, Dan, your direction is important for us, this will help our software/hardware design.

David


-----Original Message-----
From: Dan Williams (dan.j.williams@intel.com) [mailto:dan.j.williams@intel.com] 
Sent: 2021年4月30日 4:32
To: Dai WeiBin (David Dai)
Cc: Ben Widawsky; linux-cxl@vger.kernel.org; Jin LiZhi (Lynn Jin)
Subject: Re: CXL mailbox background command


CAUTION: This email 
originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.


On Wed, Apr 28, 2021 at 9:30 PM Dai WeiBin (David Dai)
<david.dai@montage-tech.com> wrote:
>
> Hi Ben,
>
> When we think of cxl mailbox background command, we met a difficult issue, how to handle switching between a background command end and another background command start?
>
> The flow is as below:
> 1. Host/caller sends a command to cxl device.
> 2. CXL device identifies the command as a background command, then cxl device returns background command started, background Operation is set to 1.
> 3. CXL device start to handle background command.
> 4. Host/caller can send other commands to cxl device when background command is ongoing on device side.
> 5. At a special point host/caller is sending a command to device when the background command just is finished, the new command will be handled as a background command by device.
> 6. That means the old background command ends, background Operation is set to 0, immediately the new background command is started, background Operation is set to 1 again at once.
> 7. So Host driver doesn’t have a chance to check the old background command has been finished, it still see “background Operation == 1”.
> 8. Mailbox Status Register and Background Command Status Register are both read-only, that results there is not a handshake between host and device.
> 9.How to guarantee exclusion between two background commands.
>
> Do you have any suggestion about this?

Background commands are not suitable to be exposed directly to
userspace, they can lockout critical driver access. They need to be
mediated by the kernel, so they each need a kernel managed state
machine and those state machines need to cooperate with each other.
Userspace can not be trusted to get this right on its own, so
userspace should be disallowed from issuing such commands by default.
Luckily Linux distributions can get this safety policy with minimal
effort by leaving CONFIG_CXL_MEM_RAW_COMMANDS default disabled.




^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: CXL mailbox background command
  2021-04-29  9:18 ` Jonathan Cameron
@ 2021-04-30  1:18   ` Dai WeiBin (David Dai)
  0 siblings, 0 replies; 6+ messages in thread
From: Dai WeiBin (David Dai) @ 2021-04-30  1:18 UTC (permalink / raw)
  To: 'Jonathan Cameron'
  Cc: ben.widawsky, linux-cxl, 'Jin LiZhi (Lynn Jin)'

Thanks, Jonathan,
I agree that your suggestion is reasonable solution for my problem, mailbox driver knows which command is background command, so it can make sure background commands sequence.   


Thanks,
David

-----Original Message-----
From: Jonathan Cameron (Jonathan.Cameron@Huawei.com) [mailto:Jonathan.Cameron@Huawei.com] 
Sent: 2021年4月29日 17:19
To: Dai WeiBin (David Dai)
Cc: ben.widawsky@intel.com; linux-cxl@vger.kernel.org; 'Jin LiZhi (Lynn Jin)'
Subject: Re: CXL mailbox background command


CAUTION: This email 
originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.


On Thu, 29 Apr 2021 12:26:20 +0800
"Dai WeiBin (David Dai)" <david.dai@montage-tech.com> wrote:

> Hi Ben,
> 
> When we think of cxl mailbox background command, we met a difficult issue, how to handle switching between a background command end and another background command start?
> 
> The flow is as below:
> 1. Host/caller sends a command to cxl device.
> 2. CXL device identifies the command as a background command, then cxl device returns background command started, background Operation is set to 1.
> 3. CXL device start to handle background command.
> 4. Host/caller can send other commands to cxl device when background command is ongoing on device side.
> 5. At a special point host/caller is sending a command to device when the background command just is finished, the new command will be handled as a background command by device.
> 6. That means the old background command ends, background Operation is set to 0, immediately the new background command is started, background Operation is set to 1 again at once.
> 7. So Host driver doesn’t have a chance to check the old background command has been finished, it still see “background Operation == 1”.
> 8. Mailbox Status Register and Background Command Status Register are both read-only, that results there is not a handshake between host and device.
> 9.How to guarantee exclusion between two background commands.
> 
> Do you have any suggestion about this?

Perhaps use the CEL to identify which commands are background commands and queue them up
in software?  So don't issue another one until previous is known to have completed.

Would that work?

Jonathan

> 
> Thanks,
> David
> 
> 






^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: CXL mailbox background command
  2021-04-29  4:26 Dai WeiBin (David Dai)
  2021-04-29  9:18 ` Jonathan Cameron
@ 2021-04-29 20:32 ` Dan Williams
  2021-04-30  1:42   ` Dai WeiBin (David Dai)
  1 sibling, 1 reply; 6+ messages in thread
From: Dan Williams @ 2021-04-29 20:32 UTC (permalink / raw)
  To: Dai WeiBin (David Dai); +Cc: Ben Widawsky, linux-cxl, Jin LiZhi (Lynn Jin)

On Wed, Apr 28, 2021 at 9:30 PM Dai WeiBin (David Dai)
<david.dai@montage-tech.com> wrote:
>
> Hi Ben,
>
> When we think of cxl mailbox background command, we met a difficult issue, how to handle switching between a background command end and another background command start?
>
> The flow is as below:
> 1. Host/caller sends a command to cxl device.
> 2. CXL device identifies the command as a background command, then cxl device returns background command started, background Operation is set to 1.
> 3. CXL device start to handle background command.
> 4. Host/caller can send other commands to cxl device when background command is ongoing on device side.
> 5. At a special point host/caller is sending a command to device when the background command just is finished, the new command will be handled as a background command by device.
> 6. That means the old background command ends, background Operation is set to 0, immediately the new background command is started, background Operation is set to 1 again at once.
> 7. So Host driver doesn’t have a chance to check the old background command has been finished, it still see “background Operation == 1”.
> 8. Mailbox Status Register and Background Command Status Register are both read-only, that results there is not a handshake between host and device.
> 9.How to guarantee exclusion between two background commands.
>
> Do you have any suggestion about this?

Background commands are not suitable to be exposed directly to
userspace, they can lockout critical driver access. They need to be
mediated by the kernel, so they each need a kernel managed state
machine and those state machines need to cooperate with each other.
Userspace can not be trusted to get this right on its own, so
userspace should be disallowed from issuing such commands by default.
Luckily Linux distributions can get this safety policy with minimal
effort by leaving CONFIG_CXL_MEM_RAW_COMMANDS default disabled.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: CXL mailbox background command
  2021-04-29  4:26 Dai WeiBin (David Dai)
@ 2021-04-29  9:18 ` Jonathan Cameron
  2021-04-30  1:18   ` Dai WeiBin (David Dai)
  2021-04-29 20:32 ` Dan Williams
  1 sibling, 1 reply; 6+ messages in thread
From: Jonathan Cameron @ 2021-04-29  9:18 UTC (permalink / raw)
  To: Dai WeiBin (David Dai)
  Cc: ben.widawsky, linux-cxl, 'Jin LiZhi (Lynn Jin)'

On Thu, 29 Apr 2021 12:26:20 +0800
"Dai WeiBin (David Dai)" <david.dai@montage-tech.com> wrote:

> Hi Ben,
> 
> When we think of cxl mailbox background command, we met a difficult issue, how to handle switching between a background command end and another background command start?
> 
> The flow is as below:
> 1. Host/caller sends a command to cxl device.
> 2. CXL device identifies the command as a background command, then cxl device returns background command started, background Operation is set to 1.
> 3. CXL device start to handle background command.
> 4. Host/caller can send other commands to cxl device when background command is ongoing on device side.
> 5. At a special point host/caller is sending a command to device when the background command just is finished, the new command will be handled as a background command by device.
> 6. That means the old background command ends, background Operation is set to 0, immediately the new background command is started, background Operation is set to 1 again at once.
> 7. So Host driver doesn’t have a chance to check the old background command has been finished, it still see “background Operation == 1”.
> 8. Mailbox Status Register and Background Command Status Register are both read-only, that results there is not a handshake between host and device.
> 9.How to guarantee exclusion between two background commands.
> 
> Do you have any suggestion about this?

Perhaps use the CEL to identify which commands are background commands and queue them up
in software?  So don't issue another one until previous is known to have completed.

Would that work?

Jonathan

> 
> Thanks,
> David
> 
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* CXL mailbox background command
@ 2021-04-29  4:26 Dai WeiBin (David Dai)
  2021-04-29  9:18 ` Jonathan Cameron
  2021-04-29 20:32 ` Dan Williams
  0 siblings, 2 replies; 6+ messages in thread
From: Dai WeiBin (David Dai) @ 2021-04-29  4:26 UTC (permalink / raw)
  To: ben.widawsky; +Cc: linux-cxl, 'Jin LiZhi (Lynn Jin)'

Hi Ben,

When we think of cxl mailbox background command, we met a difficult issue, how to handle switching between a background command end and another background command start?

The flow is as below:
1. Host/caller sends a command to cxl device.
2. CXL device identifies the command as a background command, then cxl device returns background command started, background Operation is set to 1.
3. CXL device start to handle background command.
4. Host/caller can send other commands to cxl device when background command is ongoing on device side.
5. At a special point host/caller is sending a command to device when the background command just is finished, the new command will be handled as a background command by device.
6. That means the old background command ends, background Operation is set to 0, immediately the new background command is started, background Operation is set to 1 again at once.
7. So Host driver doesn’t have a chance to check the old background command has been finished, it still see “background Operation == 1”.
8. Mailbox Status Register and Background Command Status Register are both read-only, that results there is not a handshake between host and device.
9.How to guarantee exclusion between two background commands.

Do you have any suggestion about this?

Thanks,
David



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-04-30  1:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-29  1:24 CXL mailbox background command Dai WeiBin (David Dai)
2021-04-29  4:26 Dai WeiBin (David Dai)
2021-04-29  9:18 ` Jonathan Cameron
2021-04-30  1:18   ` Dai WeiBin (David Dai)
2021-04-29 20:32 ` Dan Williams
2021-04-30  1:42   ` Dai WeiBin (David Dai)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).