diff --git a/_posts/2021-12-28-gem5-21-2.md b/_posts/2021-12-28-gem5-21-2.md
new file mode 100644
index 0000000..d763d26
--- /dev/null
+++ b/_posts/2021-12-28-gem5-21-2.md
@@ -0,0 +1,152 @@
+---
+layout: post
+title:  "gem5-21.2 Released!"
+author: Bobby R. Bruce
+date:   2021-12-28
+categories: project
+---
+
+We are proud to announce version 21.2 of the the gem5 project.
+In this release we incorporated 790 commits from 33 unique authors, new and regular, from both academia and industry.
+We are, as always, thankful to all the time our community puts into maintaining and improving gem5.
+
+## 21.2 Highlights
+
+### Enhanced Standard Library
+
+Having existed since v21.1 under the now deprecated name "the components library", the v21.2 release of gem5 moves the gem5 standard library out of alpha.
+The purpose of the gem5 standard library is to provide gem5 users a standard set of commonly used components and utilities to aid them in their research.
+Our overarching goal with the standard library is to remove "boilerplate" code from gem5 configuration files;
+making the 95% of activities that rarely change from simulation-to-simulation available in an "off-the-shelf" manner to users.
+As an example, a users wishing to experiment with the effects of cache sizes can used the gem5 standard library to setup a processor, memory system, and test on sensible benchmarks, thus freeing them to focus completely on the impact of cache size changes.
+
+The gem5 standard library is a provided as Python package which contains the following:
+
+* **Components**: A set of Python classes which wrap gem5's models.
+Some of the components are pre-configured to match real hardware (e.g., `SingleChannelDDR3_1600`) and others are parameterized.
+Components can be combined together into `boards` which can be simulated.
+* **Resources**: A set of utilities to obtain and incorporate resources (disk images, applications, kernels, etc.) into gem5 simulations.
+Using this module allows you to _automatically_ download and use many of gem5's prebuilt resources (e.g., kernels and disk images) from [gem5-resources](https://www.gem5.org/documentation/general_docs/gem5_resources).
+* **Simulate**: Used to interface with gem5's simulation/run capabilities.
+**Note: This package is in beta.
+Expect API changes to this package in future releases.
+Feedback is appreciated.**
+* **Prebuilt**: These are fully functioning prebuilt systems (`boards`) to use directly in gem5 simulations with minimal setup.
+This release includes an [X86 demo board](https://gem5.googlesource.com/public/gem5/+/refs/tags/v21.2.0.0/src/python/gem5/prebuilt/demo/x86_demo_board.py) and an [example of how it may be used](https://gem5.googlesource.com/public/gem5/+/refs/tags/v21.2.0.0/configs/example/gem5_library/x86-ubuntu-run.py).
+
+**Note:** Usage of the gem5 standard library is optional.
+It does not change any established gem5 API, or how gem5 configuration scripts may be created.
+gem5 configuration scripts that functioned in v21.1 should continue to function in v21.2.
+We do, however, hope the gem5 library can aid users in creating simulations, as is the case with all libraries.
+
+Users can find example configurations scripts that incorporate the gem5 standard library in the gem5 repository's [`configs/example/gem5_library`](https://gem5.googlesource.com/public/gem5/+/refs/tags/v21.2.0.0/configs/example/gem5_library) directory.
+
+As an example of how simple the gem5 standard library can make running a gem5 simulation, consider the following script:
+
+```python
+from gem5.prebuilt.demo.x86_demo_board import X86DemoBoard
+from gem5.resources.resource import Resources
+from gem5.simulate.simulator import Simulators
+
+# Here we setup the board. The prebuilt X86DemoBoard allows for Full-System X86
+# simulation.
+board = X86DemoBoard()
+
+# We then set the workload. Here we use the 5.4.49 Linux kernel with an X86
+# Ubuntu OS. If these cannot be found locally they will be automatically
+# downloaded.
+board.set_kernel_disk_workload(
+    kernel=Resource("x86-linux-kernel-5.4.49"),
+    disk_image=Resource("x86-ubuntu-18.04-img"),
+)
+
+# We then setup the Simulator and run the simulation.
+simulator = Simulator(board=board)
+simulator.run()
+```
+
+This script can be executed with
+
+```sh
+scons build/X86/gem5.opt
+./build/X86/gem5.opt <script>
+```
+
+The script will automatically obtain the correct linux kernel and a disk image containing Ubuntu 18.04 from gem5-resources (if not already present on the host system).
+It will then run a full-system X86 simulation to a complete boot of the operating system, then exit.
+Prior to the introduction of the gem5 standard library, a user would have to put in considerable effort to build such a simulation (100s of lines of python).
+
+While we hope we have designed the standard library in an intuitive manner, users may reference the source under [src/python/gem5](https://gem5.googlesource.com/public/gem5/+/refs/tags/v21.2.0.0/src/python/gem5).
+
+In the coming month we will be updating the gem5 website with new tutorials and documentation on using the gem5 standard library.
+
+#### Future work on the gem5 standard library
+
+Over the next few gem5 releases we will be expanding the standard library to include more components and features.
+An big goal of ours is to provide prebuilt components and systems that are proven to be representative of real-world counterparts.
+
+The `Simulate` module [will be expanded, improved, and moved out of beta state](https://gem5.atlassian.net/browse/GEM5-1125) as its role in the gem5 standard library becomes more clear.
+
+If you wish to report a bug in the gem5 standard library or have a feature request, please submit it to gem5's [Jira site](https://gem5.atlassian.net/).
+Questions regarding usage of the standard library can be made to the [gem5 user's mailing list](https://lists.gem5.org/postorius/lists/gem5-users.gem5.org/).
+
+### LupIO: Friendly IO Devices for gem5.
+
+LupIO devices were developed by [Prof. Joel Porquet-Lupine](https://faculty.engineering.ucdavis.edu/porquet) as a set of open-source I/O devices to be used for teaching.
+They were designed to model a complete set of I/O devices that are neither too complex to teach in a classroom setting, or too simple to translate to understanding real-world devices.
+A goal of two undergraduate students at UC Davis, Melissa Jost and Laura Hinman, was to work on incorporating LupIO devices into gem5.
+As such the gem5 v21.2 release includes a LupIO real-time clock, a random number generator, a terminal device, a block device, a system controller, a timer device, a programmable interrupt controller, and an inter-processor interrupt controller.
+
+A more detailed outline of LupIO can be found in Prof. Porquet-Lupine's paper ["LupIO: a collection fo education-friendly I/O devices"](https://luplab.cs.ucdavis.edu/assets/lupio/wcae21-porquet-lupio-paper.pdf) and information on the wider LupLab research group can be found on [their website](https://luplab.cs.ucdavis.edu/).
+
+Users wishing to try out LupIO devices can find an example script and README file in the [`configs/example/lupv`](https://gem5.googlesource.com/public/gem5/+/refs/tags/v21.2.0.0/configs/example/lupv) directory.
+
+**Note:** These LupIO devices have been built and tested for RISC-V.
+However, there is no reason these couldn't be modified to work with other ISA targets if required or desired.
+We welcome further development by the gem5 community.
+
+### Arm improvements
+
+In continued and welcome collaboration with Arm Holdings, improvements to gem5 Arm implementations have been made.
+They are:
+
+* [Improved configurability for Arm architectural extensions](https://gem5.atlassian.net/browse/GEM5-1132): We have improved how  architectural extensions are enabled/disabled for an Arm system.
+Rather than working with independent boolean values, we now use a unified `ArmRelease` object which models the architectural features supported by a FS/SE Arm simulation.
+* [Arm TLB can store partial entries](https://gem5.atlassian.net/browse/GEM5-1108): It is now possible to configure an `ArmTLB` as a walk cache which stores intermediate PAs obtained during a translation table walk.
+* [Implemented a multilevel LB hierarchy](https://gem5.atlassian.net/browse/GEM5-790): Users can now compose/model a customizable multilevel TLB hierarchy in gem5.
+The default Arm MMU now has an Instruction LA TLB, a Data L1 TLB, and Unified (Instruction + Data) L2 TLB.
+* [Provided an Arm example script for the gem5-SST integration](https://gem5.atlassian.net/browse/GEM5-1121).
+
+### GPU Improvements
+
+Continued efforts by, primarily, AMD, Inc. and the University of Wisconsin have improved gem5's GPU support.
+In this release:
+
+* **Vega support**: gfx900 (Vega) discrete GPUs are now both supported and tested with [gem5-resources applications](https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/gpu/).
+* **Additional GPU applications**: The [Pannotia graph analytics benchmark suite](https://github.com/pannotia/pannotia) has been added to gem5-resources, including Makefiles, READMEs, and sample commands on how to run each application in gem5.
+* **Regression Testing**: Several GPU applications are now tested as part of the nightly and weekly regressions, which improves test coverage and avoids introducing inadvertent bugs.
+* **Minor updates to the architectural model**: Small changes and fixes have been made to the HSA queue size (to allow larger GPU applications with many kernels to run), and the TLB (to create GCN4- and Vega-specific TLBs). We have also added new instructions that were previously unimplemented in GCN4 and Vega, and fixed corner cases for some instructions that were leading to incorrect behavior.
+
+### gem5-SST bridge revived
+
+In recent versions of gem5, we sadly lost the ability to integrate with the [Structural Simulation Toolkit](http://sst-simulator.org) (SST).
+In collaboration with the SST community, we have revived support for connecting gem5 cores to the SST memory system.
+In v21.2 release, this has been tested for RISC-V and Arm.
+More information on setting up and running gem5 with SST can be found in [`ext/sst/README.md`](https://gem5.googlesource.com/public/gem5/+/refs/tags/v21.2.0.0/ext/sst/README.md).
+
+## New/Changed APIS
+
+* **[API CHANGE]**: All `SimObject` declarations in SConscript files now require a `sim_objects` parameter that lists all SimObject classes declared in that file which need C++ wrappers (that is, SimObject classes which have a `type` attribute defined).
+
+* **[NEW CHANGE]**: There is now an optional `enums` parameter for `SimObject` classes which must list all the Enum types defined in that SimObject file.
+Technically, this should only include Enum types which generate C++ wrappers though, as of v21.2, all Enums do so.
+
+## Other v21.2 improvements
+
+* The master/slave terminology has been removed.
+This has been an on-going effort for several gem5 releases.
+The gem5 codebase is now free of its usage.
+* Arm v8.2-A FEAT_UAO has been implemented.
+* [The "at" variants of the file system call have been implemented in SE mode](https://gem5.atlassian.net/browse/GEM5-1098).
+* The SConscripts have been refactored for improved modularity.
+* New "tester" CPUs have been introduced which mimic GUPS.
