Hi Jerrin,
First, just a reminder that I'm not aware of any platforms available with eADR yet (it is possible for someone to build such a custom platform -- eADR just isn't supported by Intel yet). That text about eADR in the book is forward looking, because we had to make sure the programming model and ACPI, etc. were prepared for it. We recommend all persistent memory programs check to see if the CPU caches are considered persistent and dynamically use or skip the cache flush instructions.
Now on to your question. The recommendation that you use an SFENCE with eADR is a fairly conservative way of looking at it, and I'm sure there are cases where you could get rid of the SFENCE. It wasn't so much about ordering as knowing something has reached global visibility before continuing to run the program. Typically there's some point in the program where it needs to assume some stores are persistent before continuing. I call the operation that ensures the persistence a "store barrier". Today, the store barrier for pmem is CLWB+SFENCE. When we have eADR systems, of course you are right that the stores will become visible in program store order on x86, but if the program needs a store barrier, a point at which it can assume something is persistent, then it needs to know that the stores have reached global visibility. That's what the SFENCE is for. There are certainly lots of cases where you can look at an instruction sequence and decide the SFENCE isn't needed because you either don't need to know something is persistent yet or some other instruction you're doing will force the store to become globally visible without the fence.
Hope my explanation made some sense.
-andy